Prechádzať zdrojové kódy

:new:【微信支付】增加商家转账到零钱结果回调的解析方法

wzkris 8 mesiacov pred
rodič
commit
43d270ac78

+ 6 - 0
weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/transfer/TransferBatchesRequest.java

@@ -72,6 +72,12 @@ public class TransferBatchesRequest implements Serializable {
   @SerializedName("transfer_scene_id")
   private String transferSceneId;
 
+  /**
+   * 异步接收微信支付结果通知的回调地址,通知url必须为公网可访问的url,必须为https,不能携带参数
+   */
+  @SerializedName("notify_url")
+  private String notifyUrl;
+
   @Data
   @Builder(builderMethodName = "newBuilder")
   @AllArgsConstructor

+ 92 - 0
weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/transfer/TransferNotifyResult.java

@@ -0,0 +1,92 @@
+package com.github.binarywang.wxpay.bean.transfer;
+
+import com.github.binarywang.wxpay.bean.notify.OriginNotifyResponse;
+import com.github.binarywang.wxpay.bean.notify.WxPayBaseNotifyV3Result;
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ *  <pre>
+ *    商家转账到零钱接口将转账结果通知用户
+ *    文档地址:https://pay.weixin.qq.com/docs/merchant/apis/batch-transfer-to-balance/transfer-batch-callback-notice.html
+ *  </pre>
+ */
+@Data
+public class TransferNotifyResult implements Serializable, WxPayBaseNotifyV3Result<TransferNotifyResult.DecryptNotifyResult> {
+  /**
+   * 源数据
+   */
+  private OriginNotifyResponse rawData;
+  /**
+   * 解密后的数据
+   */
+  private TransferNotifyResult.DecryptNotifyResult result;
+
+  @Data
+  @NoArgsConstructor
+  public static class DecryptNotifyResult implements Serializable {
+    /**
+     * 商户号
+     */
+    @SerializedName(value = "mchid")
+    private String mchid;
+    /**
+     * 商家批次单号
+     */
+    @SerializedName(value = "out_batch_no")
+    private String outBatchNo;
+    /**
+     * 微信批次单号
+     */
+    @SerializedName(value = "batch_id")
+    private String batchId;
+    /**
+     * 批次状态
+     */
+    @SerializedName(value = "batch_status")
+    private String batchStatus;
+    /**
+     * 批次总笔数
+     */
+    @SerializedName(value = "total_num")
+    private Integer totalNum;
+    /**
+     * 批次总金额
+     */
+    @SerializedName(value = "total_amount")
+    private Integer totalAmount;
+    /**
+     * 转账成功金额
+     */
+    @SerializedName(value = "success_amount")
+    private Integer successAmount;
+    /**
+     * 转账成功笔数
+     */
+    @SerializedName(value = "success_num")
+    private Integer successNum;
+    /**
+     * 转账失败金额
+     */
+    @SerializedName(value = "fail_amount")
+    private Integer failAmount;
+    /**
+     * 转账失败笔数
+     */
+    @SerializedName(value = "fail_num")
+    private Integer failNum;
+    /**
+     * 批次更新时间
+     */
+    @SerializedName(value = "update_time")
+    private String updateTime;
+    /**
+     * 批次关闭原因
+     */
+    @SerializedName(value = "close_reason")
+    private String closeReason;
+  }
+}

+ 12 - 0
weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/TransferService.java

@@ -1,5 +1,6 @@
 package com.github.binarywang.wxpay.service;
 
+import com.github.binarywang.wxpay.bean.notify.SignatureHeader;
 import com.github.binarywang.wxpay.bean.transfer.*;
 import com.github.binarywang.wxpay.exception.WxPayException;
 
@@ -29,6 +30,17 @@ public interface TransferService {
   TransferBatchesResult transferBatches(TransferBatchesRequest request) throws WxPayException;
 
   /**
+   * 解析商家转账结果
+   * 详见<a href="https://pay.weixin.qq.com/docs/merchant/apis/batch-transfer-to-balance/transfer-batch-callback-notice.html"></a>
+   *
+   * @param notifyData 通知数据
+   * @param header     通知头部数据,不传则表示不校验头
+   * @return the wx transfer notify result
+   * @throws WxPayException the wx pay exception
+   */
+  TransferNotifyResult parseTransferNotifyResult(String notifyData, SignatureHeader header) throws WxPayException;
+
+  /**
    * <pre>
    *
    * 微信批次单号查询批次单API

+ 6 - 0
weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/TransferServiceImpl.java

@@ -1,5 +1,6 @@
 package com.github.binarywang.wxpay.service.impl;
 
+import com.github.binarywang.wxpay.bean.notify.SignatureHeader;
 import com.github.binarywang.wxpay.bean.transfer.*;
 import com.github.binarywang.wxpay.exception.WxPayException;
 import com.github.binarywang.wxpay.service.TransferService;
@@ -37,6 +38,11 @@ public class TransferServiceImpl implements TransferService {
   }
 
   @Override
+  public TransferNotifyResult parseTransferNotifyResult(String notifyData, SignatureHeader header) throws WxPayException {
+    return this.payService.baseParseOrderNotifyV3Result(notifyData, header, TransferNotifyResult.class, TransferNotifyResult.DecryptNotifyResult.class);
+  }
+
+  @Override
   public QueryTransferBatchesResult transferBatchesBatchId(QueryTransferBatchesRequest request) throws WxPayException {
     String url;
     if (request.getNeedQueryDetail()) {