@@ -0,0 +1,112 @@ | |||
package com.github.binarywang.wxpay.bean.request; | |||
import com.thoughtworks.xstream.annotations.XStreamAlias; | |||
import lombok.*; | |||
import lombok.experimental.Accessors; | |||
/** | |||
* 发送小程序红包请求参数对象. | |||
* | |||
* @author <a href="https://github.com/binarywang">Binary Wang</a> | |||
*/ | |||
@Data | |||
@EqualsAndHashCode(callSuper = true) | |||
@NoArgsConstructor | |||
@AllArgsConstructor | |||
@Builder | |||
@XStreamAlias("xml") | |||
@Accessors(chain = true) | |||
public class WxPaySendMiniProgramRedpackRequest extends BaseWxPayRequest { | |||
private static final long serialVersionUID = -2035425086824987567L; | |||
@Override | |||
protected String[] getIgnoredParamsForSign() { | |||
return new String[]{"sign_type", "sub_appid"}; | |||
} | |||
/** | |||
* mch_billno. | |||
* 商户订单号(每个订单号必须唯一) | |||
* 组成:mch_id+yyyymmdd+10位一天内不能重复的数字。 接口根据商户订单号支持重入,如出现超时可再调用。 | |||
*/ | |||
@XStreamAlias("mch_billno") | |||
private String mchBillNo; | |||
/** | |||
* send_name. | |||
* 商户名称 | |||
* 红包发送者名称 | |||
*/ | |||
@XStreamAlias("send_name") | |||
private String sendName; | |||
/** | |||
* re_openid. | |||
* 接受红包的用户 用户在wxappid下的openid | |||
*/ | |||
@XStreamAlias("re_openid") | |||
private String reOpenid; | |||
/** | |||
* total_amount. | |||
* 红包总额 | |||
*/ | |||
@XStreamAlias("total_amount") | |||
private Integer totalAmount; | |||
/** | |||
* total_num | |||
* 红包发放总人数 | |||
*/ | |||
@XStreamAlias("total_num") | |||
private Integer totalNum; | |||
/** | |||
* wishing. | |||
* 红包祝福语 | |||
*/ | |||
@XStreamAlias("wishing") | |||
private String wishing; | |||
/** | |||
* act_name. | |||
* 活动名称 | |||
*/ | |||
@XStreamAlias("act_name") | |||
private String actName; | |||
/** | |||
* remark. | |||
* 备注 | |||
*/ | |||
@XStreamAlias("remark") | |||
private String remark; | |||
/** | |||
* 通知用户形式 . | |||
* 通过JSAPI方式领取红包,小程序红包固定传MINI_PROGRAM_JSAPI | |||
*/ | |||
@XStreamAlias("notify_way") | |||
private String notifyWay = "MINI_PROGRAM_JSAPI"; | |||
/** | |||
* <pre> | |||
* 发放红包使用场景,红包金额大于200时必传 | |||
* PRODUCT_1:商品促销 | |||
* PRODUCT_2:抽奖 | |||
* PRODUCT_3:虚拟物品兑奖 | |||
* PRODUCT_4:企业内部福利 | |||
* PRODUCT_5:渠道分润 | |||
* PRODUCT_6:保险回馈 | |||
* PRODUCT_7:彩票派奖 | |||
* PRODUCT_8:税务刮奖 | |||
* </pre> | |||
*/ | |||
@XStreamAlias("scene_id") | |||
private String sceneId; | |||
@Override | |||
protected void checkConstraints() { | |||
} | |||
} |
@@ -0,0 +1,56 @@ | |||
package com.github.binarywang.wxpay.bean.result; | |||
import com.thoughtworks.xstream.annotations.XStreamAlias; | |||
import lombok.Data; | |||
import lombok.EqualsAndHashCode; | |||
import lombok.NoArgsConstructor; | |||
import java.io.Serializable; | |||
/** | |||
* 发送小程序红包的返回结果 | |||
* | |||
* @author <a href="https://github.com/binarywang">Binary Wang</a> | |||
*/ | |||
@Data | |||
@EqualsAndHashCode(callSuper = true) | |||
@NoArgsConstructor | |||
@XStreamAlias("xml") | |||
public class WxPaySendMiniProgramRedpackResult extends BaseWxPayResult implements Serializable { | |||
/** | |||
* 商户订单号. | |||
*/ | |||
@XStreamAlias("mch_billno") | |||
private String mchBillNo; | |||
/** | |||
* 公众账号appid. | |||
*/ | |||
@XStreamAlias("wxappid") | |||
private String wxAppid; | |||
/** | |||
* 用户openid. | |||
*/ | |||
@XStreamAlias("re_openid") | |||
private String reOpenid; | |||
/** | |||
* 付款金额. | |||
*/ | |||
@XStreamAlias("total_amount") | |||
private int totalAmount; | |||
/** | |||
* 返回jaspi的入参package的值. | |||
*/ | |||
@XStreamAlias("package") | |||
private String packageName; | |||
/** | |||
* 微信单号. | |||
*/ | |||
@XStreamAlias("send_listid") | |||
private String sendListId; | |||
} |
@@ -1,16 +1,7 @@ | |||
package com.github.binarywang.wxpay.service; | |||
import java.io.File; | |||
import java.util.Date; | |||
import java.util.Map; | |||
import com.github.binarywang.wxpay.bean.WxPayApiData; | |||
import com.github.binarywang.wxpay.bean.coupon.WxPayCouponInfoQueryRequest; | |||
import com.github.binarywang.wxpay.bean.coupon.WxPayCouponInfoQueryResult; | |||
import com.github.binarywang.wxpay.bean.coupon.WxPayCouponSendRequest; | |||
import com.github.binarywang.wxpay.bean.coupon.WxPayCouponSendResult; | |||
import com.github.binarywang.wxpay.bean.coupon.WxPayCouponStockQueryRequest; | |||
import com.github.binarywang.wxpay.bean.coupon.WxPayCouponStockQueryResult; | |||
import com.github.binarywang.wxpay.bean.coupon.*; | |||
import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult; | |||
import com.github.binarywang.wxpay.bean.notify.WxPayRefundNotifyResult; | |||
import com.github.binarywang.wxpay.bean.notify.WxScanPayNotifyResult; | |||
@@ -19,6 +10,10 @@ import com.github.binarywang.wxpay.bean.result.*; | |||
import com.github.binarywang.wxpay.config.WxPayConfig; | |||
import com.github.binarywang.wxpay.exception.WxPayException; | |||
import java.io.File; | |||
import java.util.Date; | |||
import java.util.Map; | |||
/** | |||
* <pre> | |||
* 微信支付相关接口. | |||
@@ -281,6 +276,19 @@ public interface WxPayService { | |||
*/ | |||
WxScanPayNotifyResult parseScanPayNotifyResult(String xmlData) throws WxPayException; | |||
/** | |||
* <pre> | |||
* 发送小程序红包. | |||
* 文档详见: https://pay.weixin.qq.com/wiki/doc/api/tools/miniprogram_hb.php?chapter=13_9&index=2 | |||
* 接口地址:https://api.mch.weixin.qq.com/mmpaymkttransfers/sendminiprogramhb | |||
* </pre> | |||
* | |||
* @param request 请求对象 | |||
* @return the result | |||
* @throws WxPayException the exception | |||
*/ | |||
WxPaySendMiniProgramRedpackResult sendMiniProgramRedpack(WxPaySendMiniProgramRedpackRequest request) throws WxPayException; | |||
/** | |||
* 发送微信红包给个人用户. | |||
* <pre> | |||
@@ -182,7 +182,19 @@ public abstract class BaseWxPayServiceImpl implements WxPayService { | |||
} | |||
@Override | |||
@Override | |||
public WxPaySendMiniProgramRedpackResult sendMiniProgramRedpack(WxPaySendMiniProgramRedpackRequest request) | |||
throws WxPayException { | |||
request.checkAndSign(this.getConfig()); | |||
String url = this.getPayBaseUrl() + "/mmpaymkttransfers/sendminiprogramhb"; | |||
String responseContent = this.post(url, request.toXML(), true); | |||
WxPaySendMiniProgramRedpackResult result = BaseWxPayResult.fromXML(responseContent, WxPaySendMiniProgramRedpackResult.class); | |||
result.checkResult(this, request.getSignType(), true); | |||
return result; | |||
} | |||
@Override | |||
public WxPaySendRedpackResult sendRedpack(WxPaySendRedpackRequest request) throws WxPayException { | |||
request.checkAndSign(this.getConfig()); | |||
@@ -1,43 +1,14 @@ | |||
package com.github.binarywang.wxpay.service.impl; | |||
import java.nio.file.Files; | |||
import java.nio.file.Path; | |||
import java.util.Calendar; | |||
import java.util.Date; | |||
import org.slf4j.Logger; | |||
import org.slf4j.LoggerFactory; | |||
import org.testng.annotations.*; | |||
import com.github.binarywang.utils.qrcode.QrcodeUtils; | |||
import com.github.binarywang.wxpay.bean.coupon.WxPayCouponInfoQueryRequest; | |||
import com.github.binarywang.wxpay.bean.coupon.WxPayCouponInfoQueryResult; | |||
import com.github.binarywang.wxpay.bean.coupon.WxPayCouponSendRequest; | |||
import com.github.binarywang.wxpay.bean.coupon.WxPayCouponSendResult; | |||
import com.github.binarywang.wxpay.bean.coupon.WxPayCouponStockQueryRequest; | |||
import com.github.binarywang.wxpay.bean.coupon.WxPayCouponStockQueryResult; | |||
import com.github.binarywang.wxpay.bean.coupon.*; | |||
import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult; | |||
import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResultTest; | |||
import com.github.binarywang.wxpay.bean.order.WxPayAppOrderResult; | |||
import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult; | |||
import com.github.binarywang.wxpay.bean.order.WxPayNativeOrderResult; | |||
import com.github.binarywang.wxpay.bean.request.WxPayAuthcode2OpenidRequest; | |||
import com.github.binarywang.wxpay.bean.request.WxPayMicropayRequest; | |||
import com.github.binarywang.wxpay.bean.request.WxPayOrderReverseRequest; | |||
import com.github.binarywang.wxpay.bean.request.WxPayRefundRequest; | |||
import com.github.binarywang.wxpay.bean.request.WxPayReportRequest; | |||
import com.github.binarywang.wxpay.bean.request.WxPaySendRedpackRequest; | |||
import com.github.binarywang.wxpay.bean.request.WxPayShorturlRequest; | |||
import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest; | |||
import com.github.binarywang.wxpay.bean.result.WxPayBillResult; | |||
import com.github.binarywang.wxpay.bean.result.WxPayFundFlowResult; | |||
import com.github.binarywang.wxpay.bean.result.WxPayMicropayResult; | |||
import com.github.binarywang.wxpay.bean.result.WxPayOrderReverseResult; | |||
import com.github.binarywang.wxpay.bean.result.WxPayRedpackQueryResult; | |||
import com.github.binarywang.wxpay.bean.result.WxPayRefundQueryResult; | |||
import com.github.binarywang.wxpay.bean.result.WxPayRefundResult; | |||
import com.github.binarywang.wxpay.bean.result.WxPaySendRedpackResult; | |||
import com.github.binarywang.wxpay.bean.result.WxPayUnifiedOrderResult; | |||
import com.github.binarywang.wxpay.bean.request.*; | |||
import com.github.binarywang.wxpay.bean.result.*; | |||
import com.github.binarywang.wxpay.constant.WxPayConstants.AccountType; | |||
import com.github.binarywang.wxpay.constant.WxPayConstants.BillType; | |||
import com.github.binarywang.wxpay.constant.WxPayConstants.SignType; | |||
@@ -47,6 +18,16 @@ import com.github.binarywang.wxpay.service.WxPayService; | |||
import com.github.binarywang.wxpay.testbase.ApiTestModule; | |||
import com.github.binarywang.wxpay.testbase.XmlWxPayConfig; | |||
import com.google.inject.Inject; | |||
import org.slf4j.Logger; | |||
import org.slf4j.LoggerFactory; | |||
import org.testng.annotations.DataProvider; | |||
import org.testng.annotations.Guice; | |||
import org.testng.annotations.Test; | |||
import java.nio.file.Files; | |||
import java.nio.file.Path; | |||
import java.util.Calendar; | |||
import java.util.Date; | |||
import static com.github.binarywang.wxpay.constant.WxPayConstants.TarType; | |||
import static org.assertj.core.api.Assertions.assertThat; | |||
@@ -461,8 +442,7 @@ public class BaseWxPayServiceImplTest { | |||
@Test | |||
public void testReverseOrder() throws Exception { | |||
WxPayOrderReverseResult result = this.payService.reverseOrder( | |||
WxPayOrderReverseRequest | |||
.newBuilder() | |||
WxPayOrderReverseRequest.newBuilder() | |||
.outTradeNo("1111") | |||
.build()); | |||
assertNotNull(result); | |||
@@ -541,8 +521,7 @@ public class BaseWxPayServiceImplTest { | |||
@Test | |||
public void testQueryCouponStock() throws Exception { | |||
WxPayCouponStockQueryResult result = this.payService.queryCouponStock( | |||
WxPayCouponStockQueryRequest | |||
.newBuilder() | |||
WxPayCouponStockQueryRequest.newBuilder() | |||
.couponStockId("123") | |||
.build()); | |||
this.logger.info(result.toString()); | |||
@@ -556,8 +535,7 @@ public class BaseWxPayServiceImplTest { | |||
@Test | |||
public void testQueryCouponInfo() throws Exception { | |||
WxPayCouponInfoQueryResult result = this.payService.queryCouponInfo( | |||
WxPayCouponInfoQueryRequest | |||
.newBuilder() | |||
WxPayCouponInfoQueryRequest.newBuilder() | |||
.openid("ojOQA0y9o-Eb6Aep7uVTdbkJqrP4") | |||
.couponId("11") | |||
.stockId("1121") | |||
@@ -632,4 +610,28 @@ public class BaseWxPayServiceImplTest { | |||
//see test in testUnifiedOrder() | |||
} | |||
@Test | |||
public void testSendMiniProgramRedpack() throws WxPayException { | |||
final WxPaySendMiniProgramRedpackResult result = this.payService | |||
.sendMiniProgramRedpack(new WxPaySendMiniProgramRedpackRequest() | |||
.setReOpenid("ojOQA0y9o-Eb6Aep7uVTdbkJqrP4") | |||
.setTotalAmount(1)); | |||
System.out.println(result); | |||
} | |||
@Test | |||
public void testDownloadRawBill() { | |||
} | |||
@Test | |||
public void testTestDownloadRawBill() { | |||
} | |||
@Test | |||
public void testGetWxPayFaceAuthInfo() { | |||
} | |||
@Test | |||
public void testFacepay() { | |||
} | |||
} |