diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPaySendMiniProgramRedpackRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPaySendMiniProgramRedpackRequest.java new file mode 100644 index 000000000..4215399d4 --- /dev/null +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/request/WxPaySendMiniProgramRedpackRequest.java @@ -0,0 +1,112 @@ +package com.github.binarywang.wxpay.bean.request; + +import com.thoughtworks.xstream.annotations.XStreamAlias; +import lombok.*; +import lombok.experimental.Accessors; + +/** + * 发送小程序红包请求参数对象. + * + * @author Binary Wang + */ +@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"; + + /** + *
+ * 发放红包使用场景,红包金额大于200时必传 + * PRODUCT_1:商品促销 + * PRODUCT_2:抽奖 + * PRODUCT_3:虚拟物品兑奖 + * PRODUCT_4:企业内部福利 + * PRODUCT_5:渠道分润 + * PRODUCT_6:保险回馈 + * PRODUCT_7:彩票派奖 + * PRODUCT_8:税务刮奖 + *+ */ + @XStreamAlias("scene_id") + private String sceneId; + + @Override + protected void checkConstraints() { + + } +} diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxPaySendMiniProgramRedpackResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxPaySendMiniProgramRedpackResult.java new file mode 100644 index 000000000..bb9bfee8a --- /dev/null +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxPaySendMiniProgramRedpackResult.java @@ -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 Binary Wang + */ +@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; + +} diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/WxPayService.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/WxPayService.java index d3fc4be7f..053405813 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/WxPayService.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/WxPayService.java @@ -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; + /** *
* 微信支付相关接口.
@@ -281,6 +276,19 @@ public interface WxPayService {
*/
WxScanPayNotifyResult parseScanPayNotifyResult(String xmlData) throws WxPayException;
+ /**
+ *
+ * 发送小程序红包.
+ * 文档详见: 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
+ *
+ *
+ * @param request 请求对象
+ * @return the result
+ * @throws WxPayException the exception
+ */
+ WxPaySendMiniProgramRedpackResult sendMiniProgramRedpack(WxPaySendMiniProgramRedpackRequest request) throws WxPayException;
+
/**
* 发送微信红包给个人用户.
*
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImpl.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImpl.java
index 4c3465f8d..093997e06 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImpl.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImpl.java
@@ -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());
diff --git a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImplTest.java b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImplTest.java
index 13a507d9e..551b00ee5 100644
--- a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImplTest.java
+++ b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImplTest.java
@@ -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() {
+ }
}