Commit 5ae43a238ddf947992185764bbdae96314631366

Authored by YunaiV
1 parent 73e11588

1. 修复支付宝 App 发起报错的问题

2. 移除微信 H5 支付,基本没人使用,减少复杂性
yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/AbstractPayClient.java
@@ -83,7 +83,7 @@ public abstract class AbstractPayClient<Config extends PayClientConfig> implemen @@ -83,7 +83,7 @@ public abstract class AbstractPayClient<Config extends PayClientConfig> implemen
83 resp = doUnifiedOrder(reqDTO); 83 resp = doUnifiedOrder(reqDTO);
84 } catch (Throwable ex) { 84 } catch (Throwable ex) {
85 // 系统异常,则包装成 PayException 异常抛出 85 // 系统异常,则包装成 PayException 异常抛出
86 - log.error("[unifiedRefund][客户端({}) request({}) 发起支付异常]", 86 + log.error("[unifiedOrder][客户端({}) request({}) 发起支付异常]",
87 getId(), toJsonString(reqDTO), ex); 87 getId(), toJsonString(reqDTO), ex);
88 throw buildPayException(ex); 88 throw buildPayException(ex);
89 } 89 }
yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/PayClientFactoryImpl.java
@@ -62,7 +62,6 @@ public class PayClientFactoryImpl implements PayClientFactory { @@ -62,7 +62,6 @@ public class PayClientFactoryImpl implements PayClientFactory {
62 case WX_APP: return (AbstractPayClient<Config>) new WxAppPayClient(channelId, (WxPayClientConfig) config); 62 case WX_APP: return (AbstractPayClient<Config>) new WxAppPayClient(channelId, (WxPayClientConfig) config);
63 case WX_BAR: return (AbstractPayClient<Config>) new WxBarPayClient(channelId, (WxPayClientConfig) config); 63 case WX_BAR: return (AbstractPayClient<Config>) new WxBarPayClient(channelId, (WxPayClientConfig) config);
64 case WX_NATIVE: return (AbstractPayClient<Config>) new WxNativePayClient(channelId, (WxPayClientConfig) config); 64 case WX_NATIVE: return (AbstractPayClient<Config>) new WxNativePayClient(channelId, (WxPayClientConfig) config);
65 - case WX_H5: return (AbstractPayClient<Config>) new WxH5PayClient(channelId, (WxPayClientConfig) config);  
66 // 支付宝支付 65 // 支付宝支付
67 case ALIPAY_WAP: return (AbstractPayClient<Config>) new AlipayWapPayClient(channelId, (AlipayPayClientConfig) config); 66 case ALIPAY_WAP: return (AbstractPayClient<Config>) new AlipayWapPayClient(channelId, (AlipayPayClientConfig) config);
68 case ALIPAY_QR: return (AbstractPayClient<Config>) new AlipayQrPayClient(channelId, (AlipayPayClientConfig) config); 67 case ALIPAY_QR: return (AbstractPayClient<Config>) new AlipayQrPayClient(channelId, (AlipayPayClientConfig) config);
yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/alipay/AlipayAppPayClient.java
@@ -33,9 +33,10 @@ public class AlipayAppPayClient extends AbstractAlipayPayClient { @@ -33,9 +33,10 @@ public class AlipayAppPayClient extends AbstractAlipayPayClient {
33 // ① 通用的参数 33 // ① 通用的参数
34 model.setOutTradeNo(reqDTO.getOutTradeNo()); 34 model.setOutTradeNo(reqDTO.getOutTradeNo());
35 model.setSubject(reqDTO.getSubject()); 35 model.setSubject(reqDTO.getSubject());
36 - model.setBody(reqDTO.getBody()); 36 + model.setBody(reqDTO.getBody() + "test");
37 model.setTotalAmount(formatAmount(reqDTO.getPrice())); 37 model.setTotalAmount(formatAmount(reqDTO.getPrice()));
38 - model.setProductCode(" QUICK_MSECURITY_PAY"); // 销售产品码:无线快捷支付产品 38 + model.setTimeExpire(formatTime(reqDTO.getExpireTime()));
  39 + model.setProductCode("QUICK_MSECURITY_PAY"); // 销售产品码:无线快捷支付产品
39 // ② 个性化的参数【无】 40 // ② 个性化的参数【无】
40 // ③ 支付宝扫码支付只有一种展示 41 // ③ 支付宝扫码支付只有一种展示
41 String displayMode = PayOrderDisplayModeEnum.APP.getMode(); 42 String displayMode = PayOrderDisplayModeEnum.APP.getMode();
@@ -47,12 +48,12 @@ public class AlipayAppPayClient extends AbstractAlipayPayClient { @@ -47,12 +48,12 @@ public class AlipayAppPayClient extends AbstractAlipayPayClient {
47 request.setReturnUrl(reqDTO.getReturnUrl()); 48 request.setReturnUrl(reqDTO.getReturnUrl());
48 49
49 // 2.1 执行请求 50 // 2.1 执行请求
50 - AlipayTradeAppPayResponse response = client.execute(request); 51 + AlipayTradeAppPayResponse response = client.sdkExecute(request);
51 // 2.2 处理结果 52 // 2.2 处理结果
52 if (!response.isSuccess()) { 53 if (!response.isSuccess()) {
53 return buildClosedPayOrderRespDTO(reqDTO, response); 54 return buildClosedPayOrderRespDTO(reqDTO, response);
54 } 55 }
55 - return PayOrderRespDTO.waitingOf(displayMode, "", 56 + return PayOrderRespDTO.waitingOf(displayMode, response.getBody(),
56 reqDTO.getOutTradeNo(), response); 57 reqDTO.getOutTradeNo(), response);
57 } 58 }
58 59
yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/weixin/WxH5PayClient.java deleted
1 -package cn.iocoder.yudao.framework.pay.core.client.impl.weixin;  
2 -  
3 -import cn.iocoder.yudao.framework.pay.core.client.dto.order.PayOrderRespDTO;  
4 -import cn.iocoder.yudao.framework.pay.core.client.dto.order.PayOrderUnifiedReqDTO;  
5 -import cn.iocoder.yudao.framework.pay.core.enums.channel.PayChannelEnum;  
6 -import com.github.binarywang.wxpay.constant.WxPayConstants;  
7 -import com.github.binarywang.wxpay.exception.WxPayException;  
8 -  
9 -// TODO 芋艿:未实现  
10 -public class WxH5PayClient extends AbstractWxPayClient {  
11 -  
12 - public WxH5PayClient(Long channelId, WxPayClientConfig config) {  
13 - super(channelId, PayChannelEnum.WX_H5.getCode(), config);  
14 - }  
15 -  
16 - @Override  
17 - protected void doInit() {  
18 - super.doInit(WxPayConstants.TradeType.MWEB);  
19 - }  
20 -  
21 - @Override  
22 - protected PayOrderRespDTO doUnifiedOrderV2(PayOrderUnifiedReqDTO reqDTO) throws WxPayException {  
23 - return null;  
24 - }  
25 -  
26 - @Override  
27 - protected PayOrderRespDTO doUnifiedOrderV3(PayOrderUnifiedReqDTO reqDTO) throws WxPayException {  
28 - return null;  
29 - }  
30 -  
31 -}  
yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/enums/channel/PayChannelEnum.java
@@ -21,7 +21,6 @@ public enum PayChannelEnum { @@ -21,7 +21,6 @@ public enum PayChannelEnum {
21 WX_APP("wx_app", "微信 App 支付", WxPayClientConfig.class), 21 WX_APP("wx_app", "微信 App 支付", WxPayClientConfig.class),
22 WX_NATIVE("wx_native", "微信 Native 支付", WxPayClientConfig.class), 22 WX_NATIVE("wx_native", "微信 Native 支付", WxPayClientConfig.class),
23 WX_BAR("wx_bar", "微信付款码支付", WxPayClientConfig.class), 23 WX_BAR("wx_bar", "微信付款码支付", WxPayClientConfig.class),
24 - WX_H5("wx_h5", "微信 H5 支付", WxPayClientConfig.class),  
25 24
26 ALIPAY_PC("alipay_pc", "支付宝 PC 网站支付", AlipayPayClientConfig.class), 25 ALIPAY_PC("alipay_pc", "支付宝 PC 网站支付", AlipayPayClientConfig.class),
27 ALIPAY_WAP("alipay_wap", "支付宝 Wap 网站支付", AlipayPayClientConfig.class), 26 ALIPAY_WAP("alipay_wap", "支付宝 Wap 网站支付", AlipayPayClientConfig.class),
yudao-ui-admin/src/utils/constants.js
@@ -177,6 +177,9 @@ export const PayDisplayModeEnum = { @@ -177,6 +177,9 @@ export const PayDisplayModeEnum = {
177 }, 177 },
178 QR_CODE: { 178 QR_CODE: {
179 "mode": "qr_code" 179 "mode": "qr_code"
  180 + },
  181 + APP: {
  182 + "mode": "app"
180 } 183 }
181 } 184 }
182 185
yudao-ui-admin/src/views/pay/cashier/index.vue
@@ -106,7 +106,7 @@ export default { @@ -106,7 +106,7 @@ export default {
106 code: "alipay_app" 106 code: "alipay_app"
107 }, { 107 }, {
108 name: '支付宝扫码支付', 108 name: '支付宝扫码支付',
109 - icon: require("@/assets/images/pay/icon/alipay_app.svg"), 109 + icon: require("@/assets/images/pay/icon/alipay_qr.svg"),
110 code: "alipay_qr" 110 code: "alipay_qr"
111 }, { 111 }, {
112 name: '支付宝条码支付', 112 name: '支付宝条码支付',
@@ -237,6 +237,8 @@ export default { @@ -237,6 +237,8 @@ export default {
237 this.displayUrl(channelCode, data) 237 this.displayUrl(channelCode, data)
238 } else if (data.displayMode === PayDisplayModeEnum.QR_CODE.mode) { 238 } else if (data.displayMode === PayDisplayModeEnum.QR_CODE.mode) {
239 this.displayQrCode(channelCode, data) 239 this.displayQrCode(channelCode, data)
  240 + } else if (data.displayMode === PayDisplayModeEnum.APP.mode) {
  241 + this.displayApp(channelCode, data)
240 } 242 }
241 243
242 // 打开轮询任务 244 // 打开轮询任务
@@ -270,7 +272,7 @@ export default { @@ -270,7 +272,7 @@ export default {
270 location.href = data.displayContent 272 location.href = data.displayContent
271 this.submitLoading = false 273 this.submitLoading = false
272 }, 274 },
273 - /** 提交支付后(支付宝扫码支付) */ 275 + /** 提交支付后(扫码支付) */
274 displayQrCode(channelCode, data) { 276 displayQrCode(channelCode, data) {
275 let title = '请使用手机浏览器“扫一扫”'; 277 let title = '请使用手机浏览器“扫一扫”';
276 if (channelCode === PayChannelEnum.ALIPAY_WAP.code) { 278 if (channelCode === PayChannelEnum.ALIPAY_WAP.code) {
@@ -287,6 +289,14 @@ export default { @@ -287,6 +289,14 @@ export default {
287 } 289 }
288 this.submitLoading = false 290 this.submitLoading = false
289 }, 291 },
  292 + /** 提交支付后(App) */
  293 + displayApp(channelCode, data) {
  294 + if (channelCode === PayChannelEnum.ALIPAY_APP.code) {
  295 + this.$message.error('支付宝 App 无法在网页支付!');
  296 + }
  297 + this.submitLoading = false
  298 + },
  299 +
290 /** 轮询查询任务 */ 300 /** 轮询查询任务 */
291 createQueryInterval() { 301 createQueryInterval() {
292 if (this.interval) { 302 if (this.interval) {