Commit 4390e28eea6b7dbe6867048c61bdede14f944bfd

Authored by YunaiV
1 parent 2093c3bd

pay: 新增支付宝 App 支付的接入

yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/PayClientFactoryImpl.java
... ... @@ -66,7 +66,7 @@ public class PayClientFactoryImpl implements PayClientFactory {
66 66 case WX_NATIVE: return (AbstractPayClient<Config>) new WXNativePayClient(channelId, (WXPayClientConfig) config);
67 67 case ALIPAY_WAP: return (AbstractPayClient<Config>) new AlipayWapPayClient(channelId, (AlipayPayClientConfig) config);
68 68 case ALIPAY_QR: return (AbstractPayClient<Config>) new AlipayQrPayClient(channelId, (AlipayPayClientConfig) config);
69   - case ALIPAY_APP: return (AbstractPayClient<Config>) new AlipayQrPayClient(channelId, (AlipayPayClientConfig) config);
  69 + case ALIPAY_APP: return (AbstractPayClient<Config>) new AlipayAppPayClient(channelId, (AlipayPayClientConfig) config);
70 70 case ALIPAY_PC: return (AbstractPayClient<Config>) new AlipayPcPayClient(channelId, (AlipayPayClientConfig) config);
71 71 case ALIPAY_BAR: return (AbstractPayClient<Config>) new AlipayBarPayClient(channelId, (AlipayPayClientConfig) config);
72 72 }
... ...
yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/alipay/AlipayAppPayClient.java
1 1 package cn.iocoder.yudao.framework.pay.core.client.impl.alipay;
2 2  
3   -// TODO 芋艿:待实现
4   -public class AlipayAppPayClient {
  3 +import cn.iocoder.yudao.framework.pay.core.client.dto.order.PayOrderUnifiedReqDTO;
  4 +import cn.iocoder.yudao.framework.pay.core.client.dto.order.PayOrderUnifiedRespDTO;
  5 +import cn.iocoder.yudao.framework.pay.core.enums.PayChannelEnum;
  6 +import cn.iocoder.yudao.framework.pay.core.enums.PayDisplayModeEnum;
  7 +import com.alipay.api.AlipayApiException;
  8 +import com.alipay.api.domain.AlipayTradeAppPayModel;
  9 +import com.alipay.api.request.AlipayTradeAppPayRequest;
  10 +import com.alipay.api.response.AlipayTradeAppPayResponse;
  11 +import lombok.extern.slf4j.Slf4j;
  12 +
  13 +/**
  14 + * 支付宝【App 支付】的 PayClient 实现类
  15 + *
  16 + * 文档:<a href="https://opendocs.alipay.com/open/02e7gq">App 支付</a>
  17 + *
  18 + * // TODO 芋艿:未详细测试,因为手头没 App
  19 + *
  20 + * @author 芋道源码
  21 + */
  22 +@Slf4j
  23 +public class AlipayAppPayClient extends AbstractAlipayClient {
  24 +
  25 + public AlipayAppPayClient(Long channelId, AlipayPayClientConfig config) {
  26 + super(channelId, PayChannelEnum.ALIPAY_APP.getCode(), config);
  27 + }
  28 +
  29 + @Override
  30 + public PayOrderUnifiedRespDTO doUnifiedOrder(PayOrderUnifiedReqDTO reqDTO) throws AlipayApiException {
  31 + // 1.1 构建 AlipayTradeAppPayModel 请求
  32 + AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
  33 + // ① 通用的参数
  34 + model.setOutTradeNo(reqDTO.getMerchantOrderId());
  35 + model.setSubject(reqDTO.getSubject());
  36 + model.setBody(reqDTO.getBody());
  37 + model.setTotalAmount(formatAmount(reqDTO.getAmount()));
  38 + model.setProductCode(" QUICK_MSECURITY_PAY"); // 销售产品码:无线快捷支付产品
  39 + // ② 个性化的参数【无】
  40 + // ③ 支付宝扫码支付只有一种展示
  41 + String displayMode = PayDisplayModeEnum.APP.getMode();
  42 +
  43 + // 1.2 构建 AlipayTradePrecreateRequest 请求
  44 + AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
  45 + request.setBizModel(model);
  46 + request.setNotifyUrl(reqDTO.getNotifyUrl());
  47 + request.setReturnUrl(reqDTO.getReturnUrl());
  48 +
  49 + // 2.1 执行请求
  50 + AlipayTradeAppPayResponse response = client.execute(request);
  51 + // 2.2 处理结果
  52 + validateSuccess(response);
  53 + return new PayOrderUnifiedRespDTO()
  54 + .setDisplayMode(displayMode).setDisplayContent("");
  55 + }
  56 +
5 57 }
... ...
yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/enums/PayDisplayModeEnum.java
... ... @@ -18,6 +18,7 @@ public enum PayDisplayModeEnum {
18 18 QR_CODE("qr_code"), // 二维码的文字内容
19 19 QR_CODE_URL("qr_code_url"), // 二维码的图片链接
20 20 BAR_CODE("bar_code"), // 条形码
  21 + APP("app"), // 应用
21 22 ;
22 23  
23 24 /**
... ...
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/demo/PayDemoOrderServiceImpl.java
... ... @@ -71,8 +71,8 @@ public class PayDemoOrderServiceImpl implements PayDemoOrderService {
71 71 spuNames.put(1L, new Object[]{"华为手机", 1});
72 72 spuNames.put(2L, new Object[]{"小米电视", 10});
73 73 spuNames.put(3L, new Object[]{"苹果手表", 100});
74   - spuNames.put(4L, new Object[]{"华硕笔记本", 200});
75   - spuNames.put(5L, new Object[]{"蔚来汽车", 300});
  74 + spuNames.put(4L, new Object[]{"华硕笔记本", 1000});
  75 + spuNames.put(5L, new Object[]{"蔚来汽车", 200000});
76 76 }
77 77  
78 78 @Override
... ...
yudao-ui-admin/src/views/pay/demo/index.vue
... ... @@ -126,11 +126,11 @@ export default {
126 126 }, {
127 127 id: 4,
128 128 name: '华硕笔记本',
129   - price: 200,
  129 + price: 1000,
130 130 }, {
131 131 id: 5,
132 132 name: '蔚来汽车',
133   - price: 300,
  133 + price: 200000,
134 134 }]
135 135 };
136 136 },
... ...