Commit 6fcff0863a858a3e44ab26e46baac4e4a3021d7b
1 parent
0f0e6eb8
支付宝统一退款接口 subCode == ACQ.SYSTEM_ERROR 返回 WAITING 状态
Showing
5 changed files
with
11 additions
and
6 deletions
yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/dto/transfer/PayTransferRespDTO.java
yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/dto/transfer/PayTransferUnifiedReqDTO.java
yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/PayClientFactoryImpl.java
| ... | ... | @@ -50,6 +50,8 @@ public class PayClientFactoryImpl implements PayClientFactory { |
| 50 | 50 | clientClass.put(ALIPAY_APP, AlipayAppPayClient.class); |
| 51 | 51 | clientClass.put(ALIPAY_PC, AlipayPcPayClient.class); |
| 52 | 52 | clientClass.put(ALIPAY_BAR, AlipayBarPayClient.class); |
| 53 | + // 支付包转账客户端 | |
| 54 | + clientClass.put(ALIPAY_TRANSFER, AlipayTransferClient.class); | |
| 53 | 55 | // Mock 支付客户端 |
| 54 | 56 | clientClass.put(MOCK, MockPayClient.class); |
| 55 | 57 | } | ... | ... |
yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/alipay/AbstractAlipayPayClient.java
| ... | ... | @@ -151,7 +151,7 @@ public abstract class AbstractAlipayPayClient extends AbstractPayClient<AlipayPa |
| 151 | 151 | AlipayTradeRefundResponse response = client.execute(request); |
| 152 | 152 | if (!response.isSuccess()) { |
| 153 | 153 | // 当出现 ACQ.SYSTEM_ERROR, 退款可能成功也可能失败。 返回 WAIT 状态. 后续 job 会轮询 |
| 154 | - if (Objects.equals(response.getSubCode(), "ACQ.SYSTEM_ERROR")) { | |
| 154 | + if (ObjectUtils.equalsAny(response.getSubCode(), "ACQ.SYSTEM_ERROR", "SYSTEM_ERROR")) { | |
| 155 | 155 | return PayRefundRespDTO.waitingOf(null, reqDTO.getOutRefundNo(), response); |
| 156 | 156 | } |
| 157 | 157 | return PayRefundRespDTO.failureOf(response.getSubCode(), response.getSubMsg(), reqDTO.getOutRefundNo(), response); | ... | ... |
yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/alipay/AlipayTransferClient.java
| ... | ... | @@ -3,6 +3,7 @@ package cn.iocoder.yudao.framework.pay.core.client.impl.alipay; |
| 3 | 3 | import cn.hutool.core.map.MapUtil; |
| 4 | 4 | import cn.hutool.core.util.StrUtil; |
| 5 | 5 | import cn.iocoder.yudao.framework.common.util.json.JsonUtils; |
| 6 | +import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; | |
| 6 | 7 | import cn.iocoder.yudao.framework.pay.core.client.dto.order.PayOrderRespDTO; |
| 7 | 8 | import cn.iocoder.yudao.framework.pay.core.client.dto.order.PayOrderUnifiedReqDTO; |
| 8 | 9 | import cn.iocoder.yudao.framework.pay.core.client.dto.refund.PayRefundRespDTO; |
| ... | ... | @@ -18,8 +19,6 @@ import com.alipay.api.request.AlipayFundTransUniTransferRequest; |
| 18 | 19 | import com.alipay.api.response.AlipayFundTransUniTransferResponse; |
| 19 | 20 | import lombok.extern.slf4j.Slf4j; |
| 20 | 21 | |
| 21 | -import java.util.Objects; | |
| 22 | - | |
| 23 | 22 | import static cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants.BAD_REQUEST; |
| 24 | 23 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception0; |
| 25 | 24 | |
| ... | ... | @@ -82,12 +81,11 @@ public class AlipayTransferClient extends AbstractAlipayPayClient { |
| 82 | 81 | // 处理结果 |
| 83 | 82 | if (!response.isSuccess()) { |
| 84 | 83 | // 当出现 SYSTEM_ERROR, 转账可能成功也可能失败。 返回 WAIT 状态. 后续 job 会轮询 |
| 85 | - if (Objects.equals(response.getSubCode(), "SYSTEM_ERROR")) { | |
| 84 | + if (ObjectUtils.equalsAny(response.getSubCode(), "SYSTEM_ERROR", "ACQ.SYSTEM_ERROR")) { | |
| 86 | 85 | return PayTransferRespDTO.waitingOf(null, reqDTO.getOutTransferNo(), response); |
| 87 | 86 | } |
| 88 | 87 | return PayTransferRespDTO.failureOf(response.getSubCode(), response.getSubMsg(), |
| 89 | 88 | reqDTO.getOutTransferNo(), response); |
| 90 | - | |
| 91 | 89 | } |
| 92 | 90 | return PayTransferRespDTO.successOf(response.getOrderId(), parseTime(response.getTransDate()), |
| 93 | 91 | response.getOutBizNo(), response); | ... | ... |