Просмотр исходного кода

!1113 【新增功能】微信转账到零钱:主动查询转账状态
Merge pull request !1113 from 杨宇庆/N/A

芋道源码 7 месяцев назад
Родитель
Сommit
e7ef83db7a

+ 24 - 3
yudao-module-pay/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/weixin/AbstractWxPayClient.java

@@ -24,6 +24,8 @@ import com.github.binarywang.wxpay.bean.notify.WxPayRefundNotifyResult;
 import com.github.binarywang.wxpay.bean.notify.WxPayRefundNotifyV3Result;
 import com.github.binarywang.wxpay.bean.request.*;
 import com.github.binarywang.wxpay.bean.result.*;
+import com.github.binarywang.wxpay.bean.transfer.QueryTransferBatchesRequest;
+import com.github.binarywang.wxpay.bean.transfer.QueryTransferBatchesResult;
 import com.github.binarywang.wxpay.bean.transfer.TransferBatchesRequest;
 import com.github.binarywang.wxpay.bean.transfer.TransferBatchesResult;
 import com.github.binarywang.wxpay.config.WxPayConfig;
@@ -484,9 +486,28 @@ public abstract class AbstractWxPayClient extends AbstractPayClient<WxPayClientC
     }
 
     @Override
-    protected PayTransferRespDTO doGetTransfer(String outTradeNo, PayTransferTypeEnum type) {
-        // TODO luchi:这个最好实现下。因为可能要主动轮询转账结果
-        throw new UnsupportedOperationException("待实现");
+    protected PayTransferRespDTO doGetTransfer(String outTradeNo, PayTransferTypeEnum type) throws WxPayException {
+        QueryTransferBatchesRequest request = QueryTransferBatchesRequest.newBuilder()
+                .outBatchNo(outTradeNo).needQueryDetail(true).offset(0).limit(20).detailStatus("ALL")
+                .build();
+        QueryTransferBatchesResult response = client.getTransferService().transferBatchesOutBatchNo(request);
+        QueryTransferBatchesResult.TransferBatch transferBatch = response.getTransferBatch();
+        if (Objects.equals("FINISHED", transferBatch.getBatchStatus())) {
+            // 明细中全部成功则成功,任一失败则失败
+            if (response.getTransferDetailList().stream().allMatch(detail -> Objects.equals("SUCCESS", detail.getDetailStatus()))) {
+                return PayTransferRespDTO.successOf(transferBatch.getBatchId(), parseDateV3(transferBatch.getUpdateTime()),
+                        transferBatch.getOutBatchNo(), response);
+            }
+            if (response.getTransferDetailList().stream().anyMatch(detail -> Objects.equals("FAIL", detail.getDetailStatus()))) {
+                return PayTransferRespDTO.closedOf(transferBatch.getBatchStatus(), transferBatch.getCloseReason(),
+                        transferBatch.getOutBatchNo(), response);
+            }
+        }
+        if (Objects.equals("CLOSED", transferBatch.getBatchStatus())) {
+            return PayTransferRespDTO.closedOf(transferBatch.getBatchStatus(), transferBatch.getCloseReason(),
+                    transferBatch.getOutBatchNo(), response);
+        }
+        return PayTransferRespDTO.dealingOf(transferBatch.getBatchId(), transferBatch.getOutBatchNo(), response);
     }
 
     // ========== 各种工具方法 ==========