Commit 0fcc0072c23ae1e38b6cca752a53026b96c243cf

Authored by YunaiV
1 parent 5ae43a23

1. AlipayBarPayClient 增加小额支付的成功返回

yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/AbstractPayClient.java
@@ -81,6 +81,8 @@ public abstract class AbstractPayClient<Config extends PayClientConfig> implemen @@ -81,6 +81,8 @@ public abstract class AbstractPayClient<Config extends PayClientConfig> implemen
81 PayOrderRespDTO resp; 81 PayOrderRespDTO resp;
82 try { 82 try {
83 resp = doUnifiedOrder(reqDTO); 83 resp = doUnifiedOrder(reqDTO);
  84 + } catch (ServiceException ex) { // 业务异常,都是实现类已经翻译,所以直接抛出即可
  85 + throw ex;
84 } catch (Throwable ex) { 86 } catch (Throwable ex) {
85 // 系统异常,则包装成 PayException 异常抛出 87 // 系统异常,则包装成 PayException 异常抛出
86 log.error("[unifiedOrder][客户端({}) request({}) 发起支付异常]", 88 log.error("[unifiedOrder][客户端({}) request({}) 发起支付异常]",
@@ -97,6 +99,8 @@ public abstract class AbstractPayClient<Config extends PayClientConfig> implemen @@ -97,6 +99,8 @@ public abstract class AbstractPayClient<Config extends PayClientConfig> implemen
97 public final PayOrderRespDTO parseOrderNotify(Map<String, String> params, String body) { 99 public final PayOrderRespDTO parseOrderNotify(Map<String, String> params, String body) {
98 try { 100 try {
99 return doParseOrderNotify(params, body); 101 return doParseOrderNotify(params, body);
  102 + } catch (ServiceException ex) { // 业务异常,都是实现类已经翻译,所以直接抛出即可
  103 + throw ex;
100 } catch (Throwable ex) { 104 } catch (Throwable ex) {
101 log.error("[parseOrderNotify][客户端({}) params({}) body({}) 解析失败]", 105 log.error("[parseOrderNotify][客户端({}) params({}) body({}) 解析失败]",
102 getId(), params, body, ex); 106 getId(), params, body, ex);
@@ -111,6 +115,8 @@ public abstract class AbstractPayClient&lt;Config extends PayClientConfig&gt; implemen @@ -111,6 +115,8 @@ public abstract class AbstractPayClient&lt;Config extends PayClientConfig&gt; implemen
111 public final PayOrderRespDTO getOrder(String outTradeNo) { 115 public final PayOrderRespDTO getOrder(String outTradeNo) {
112 try { 116 try {
113 return doGetOrder(outTradeNo); 117 return doGetOrder(outTradeNo);
  118 + } catch (ServiceException ex) { // 业务异常,都是实现类已经翻译,所以直接抛出即可
  119 + throw ex;
114 } catch (Throwable ex) { 120 } catch (Throwable ex) {
115 log.error("[getOrder][客户端({}) outTradeNo({}) 查询支付单异常]", 121 log.error("[getOrder][客户端({}) outTradeNo({}) 查询支付单异常]",
116 getId(), outTradeNo, ex); 122 getId(), outTradeNo, ex);
@@ -130,8 +136,7 @@ public abstract class AbstractPayClient&lt;Config extends PayClientConfig&gt; implemen @@ -130,8 +136,7 @@ public abstract class AbstractPayClient&lt;Config extends PayClientConfig&gt; implemen
130 PayRefundRespDTO resp; 136 PayRefundRespDTO resp;
131 try { 137 try {
132 resp = doUnifiedRefund(reqDTO); 138 resp = doUnifiedRefund(reqDTO);
133 - } catch (ServiceException ex) {  
134 - // 业务异常,都是实现类已经翻译,所以直接抛出即可 139 + } catch (ServiceException ex) { // 业务异常,都是实现类已经翻译,所以直接抛出即可
135 throw ex; 140 throw ex;
136 } catch (Throwable ex) { 141 } catch (Throwable ex) {
137 // 系统异常,则包装成 PayException 异常抛出 142 // 系统异常,则包装成 PayException 异常抛出
@@ -148,6 +153,8 @@ public abstract class AbstractPayClient&lt;Config extends PayClientConfig&gt; implemen @@ -148,6 +153,8 @@ public abstract class AbstractPayClient&lt;Config extends PayClientConfig&gt; implemen
148 public final PayRefundRespDTO parseRefundNotify(Map<String, String> params, String body) { 153 public final PayRefundRespDTO parseRefundNotify(Map<String, String> params, String body) {
149 try { 154 try {
150 return doParseRefundNotify(params, body); 155 return doParseRefundNotify(params, body);
  156 + } catch (ServiceException ex) { // 业务异常,都是实现类已经翻译,所以直接抛出即可
  157 + throw ex;
151 } catch (Throwable ex) { 158 } catch (Throwable ex) {
152 log.error("[parseRefundNotify][客户端({}) params({}) body({}) 解析失败]", 159 log.error("[parseRefundNotify][客户端({}) params({}) body({}) 解析失败]",
153 getId(), params, body, ex); 160 getId(), params, body, ex);
@@ -162,6 +169,8 @@ public abstract class AbstractPayClient&lt;Config extends PayClientConfig&gt; implemen @@ -162,6 +169,8 @@ public abstract class AbstractPayClient&lt;Config extends PayClientConfig&gt; implemen
162 public final PayRefundRespDTO getRefund(String outTradeNo, String outRefundNo) { 169 public final PayRefundRespDTO getRefund(String outTradeNo, String outRefundNo) {
163 try { 170 try {
164 return doGetRefund(outTradeNo, outRefundNo); 171 return doGetRefund(outTradeNo, outRefundNo);
  172 + } catch (ServiceException ex) { // 业务异常,都是实现类已经翻译,所以直接抛出即可
  173 + throw ex;
165 } catch (Throwable ex) { 174 } catch (Throwable ex) {
166 log.error("[getRefund][客户端({}) outTradeNo({}) outRefundNo({}) 查询退款单异常]", 175 log.error("[getRefund][客户端({}) outTradeNo({}) outRefundNo({}) 查询退款单异常]",
167 getId(), outTradeNo, outRefundNo, ex); 176 getId(), outTradeNo, outRefundNo, ex);
yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/alipay/AlipayBarPayClient.java
1 package cn.iocoder.yudao.framework.pay.core.client.impl.alipay; 1 package cn.iocoder.yudao.framework.pay.core.client.impl.alipay;
2 2
  3 +import cn.hutool.core.date.LocalDateTimeUtil;
3 import cn.hutool.core.map.MapUtil; 4 import cn.hutool.core.map.MapUtil;
4 import cn.hutool.core.util.StrUtil; 5 import cn.hutool.core.util.StrUtil;
5 import cn.iocoder.yudao.framework.pay.core.client.dto.order.PayOrderRespDTO; 6 import cn.iocoder.yudao.framework.pay.core.client.dto.order.PayOrderRespDTO;
@@ -55,13 +56,17 @@ public class AlipayBarPayClient extends AbstractAlipayPayClient { @@ -55,13 +56,17 @@ public class AlipayBarPayClient extends AbstractAlipayPayClient {
55 request.setNotifyUrl(reqDTO.getNotifyUrl()); 56 request.setNotifyUrl(reqDTO.getNotifyUrl());
56 request.setReturnUrl(reqDTO.getReturnUrl()); 57 request.setReturnUrl(reqDTO.getReturnUrl());
57 58
58 - // TODO 芋艿:各种边界的处理  
59 // 2.1 执行请求 59 // 2.1 执行请求
60 AlipayTradePayResponse response = client.execute(request); 60 AlipayTradePayResponse response = client.execute(request);
61 // 2.2 处理结果 61 // 2.2 处理结果
62 if (!response.isSuccess()) { 62 if (!response.isSuccess()) {
63 return buildClosedPayOrderRespDTO(reqDTO, response); 63 return buildClosedPayOrderRespDTO(reqDTO, response);
64 } 64 }
  65 + if ("10000".equals(response.getCode())) { // 免密支付
  66 + return PayOrderRespDTO.successOf(response.getTradeNo(), response.getBuyerUserId(), LocalDateTimeUtil.of(response.getGmtPayment()),
  67 + response.getOutTradeNo(), response);
  68 + }
  69 + // 大额支付,需要用户输入密码,所以返回 waiting。此时,前端一般会进行轮询
65 return PayOrderRespDTO.waitingOf(displayMode, "", 70 return PayOrderRespDTO.waitingOf(displayMode, "",
66 reqDTO.getOutTradeNo(), response); 71 reqDTO.getOutTradeNo(), response);
67 } 72 }