Commit 7ca756a2344f16dff39977bfd7479f3361e0dfac

Authored by YunaiV
1 parent 24f4fd4f

引入支付宝的支付功能

Showing 14 changed files with 173 additions and 59 deletions
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/sms/impl/SysSmsTemplateServiceImpl.java
@@ -33,7 +33,7 @@ import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeCons @@ -33,7 +33,7 @@ import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeCons
33 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; 33 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
34 34
35 /** 35 /**
36 - * 短信模板Service实现类 36 + * 短信模板 Service 实现类
37 * 37 *
38 * @author zzf 38 * @author zzf
39 * @date 2021/1/25 9:25 39 * @date 2021/1/25 9:25
yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/PayClient.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.pay.core;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.CommonResult;
  4 +
  5 +/**
  6 + * 支付客户端,用于对接各支付渠道的 SDK,实现发起支付、退款等功能
  7 + *
  8 + * @author 芋道源码
  9 + */
  10 +public interface PayClient {
  11 +
  12 + CommonResult<String> unifiedOrder();
  13 +
  14 +}
yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/PayClientConfig.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.pay.core;
  2 +
  3 +/**
  4 + * 支付客户端的配置,本质是支付渠道的配置
  5 + * 每个不同的渠道,需要不同的配置,通过子类来定义
  6 + *
  7 + * @author 芋道源码
  8 + */
  9 +public interface PayClientConfig {
  10 +}
yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/aop/package-info.java deleted
1 -/**  
2 - * @description  
3 - * @author Qingchen  
4 - * @version 1.0.0  
5 - * @date 2021-09-29 14:59  
6 - * @class cn.iocoder.yudao.framework.pay.core.aop.package-info.java  
7 - */  
8 -package cn.iocoder.yudao.framework.pay.core.aop;  
9 \ No newline at end of file 0 \ No newline at end of file
yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/AbstractPayClient.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.pay.core.client;
  2 +
  3 +import cn.iocoder.yudao.framework.pay.core.PayClient;
  4 +import com.alipay.api.DefaultAlipayClient;
  5 +
  6 +/**
  7 + * 支付客户端的抽象类,提供模板方法,减少子类的冗余代码
  8 + *
  9 + * @author 芋道源码
  10 + */
  11 +public abstract class AbstractPayClient implements PayClient {
  12 +
  13 +
  14 +
  15 +}
yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/alipay/AlipayPayClient.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.pay.core.client.alipay;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.CommonResult;
  4 +import cn.iocoder.yudao.framework.pay.core.client.AbstractPayClient;
  5 +import com.alipay.api.AlipayApiException;
  6 +import com.alipay.api.DefaultAlipayClient;
  7 +import com.alipay.api.domain.AlipayTradePrecreateModel;
  8 +import com.alipay.api.request.AlipayTradePrecreateRequest;
  9 +import com.alipay.api.response.AlipayTradePrecreateResponse;
  10 +
  11 +/**
  12 + * 支付宝的 PayClient 实现类
  13 + */
  14 +public class AlipayPayClient extends AbstractPayClient {
  15 +
  16 + private DefaultAlipayClient client = new DefaultAlipayClient("https://openapi.alipaydev.com/gateway.do","2021000118634035","MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCHsEV1cDupwJv890x84qbppUtRIfhaKSwSVN0thCcsDCaAsGR5MZslDkO8NCT9V4r2SVXjyY7eJUZlZd1M0C8T01Tg4UOx5LUbic0O3A1uJMy6V1n9IyYwbAW3AEZhBd5bSbPgrqvmv3NeWSTQT6Anxnllf+2iDH6zyA2fPl7cYyQtbZoDJQFGqr4F+cGh2R6akzRKNoBkAeMYwoY6es2lX8sJxCVPWUmxNUoL3tScwlSpd7Bxw0q9c/X01jMwuQ0+Va358zgFiGERTE6yD01eu40OBDXOYO3z++y+TAYHlQQ2toMO63trepo88X3xV3R44/1DH+k2pAm2IF5ixiLrAgMBAAECggEAPx3SoXcseaD7rmcGcE0p4SMfbsUDdkUSmBBbtfF0GzwnqNLkWa+mgE0rWt9SmXngTQH97vByAYmLPl1s3G82ht1V7Sk7yQMe74lhFllr8eEyTjeVx3dTK1EEM4TwN+936DTXdFsr4TELJEcJJdD0KaxcCcfBLRDs2wnitEFZ9N+GoZybVmY8w0e0MI7PLObUZ2l0X4RurQnfG9ZxjXjC7PkeMVv7cGGylpNFi3BbvkRhdhLPDC2E6wqnr9e7zk+hiENivAezXrtxtwKovzCtnWJ1r0IO14Rh47H509Ic0wFnj+o5YyUL4LdmpL7yaaH6fM7zcSLFjNZPHvZCKPwYcQKBgQDQFho98QvnL8ex4v6cry4VitGpjSXm1qP3vmMQk4rTsn8iPWtcxPjqGEqOQJjdi4Mi0VZKQOLFwlH0kl95wNrD/isJ4O1yeYfX7YAXApzHqYNINzM79HemO3Yx1qLMW3okRFJ9pPRzbQ9qkTpsaegsmyX316zOBhzGRYjKbutTYwKBgQCm7phr9XdFW5Vh+XR90mVs483nrLmMiDKg7YKxSLJ8amiDjzPejCn7i95Hah08P+2MIZLIPbh2VLacczR6ltRRzN5bg5etFuqSgfkuHyxpoDmpjbe08+Q2h8JBYqcC5Nhv1AKU4iOUhVLHo/FBAQliMcGc/J3eiYTFC7EsNx382QKBgClb20doe7cttgFTXswBvaUmfFm45kmla924B7SpvrQpDD/f+VDtDZRp05fGmxuduSjYdtA3aVtpLiTwWu22OUUvZZqHDGruYOO4Hvdz23mL5b4ayqImCwoNU4bAZIc9v18p/UNf3/55NNE3oGcf/bev9rH2OjCQ4nM+Ktwhg8CFAoGACSgvbkShzUkv0ZcIf9ppu+ZnJh1AdGgINvGwaJ8vQ0nm/8h8NOoFZ4oNoGc+wU5Ubops7dUM6FjPR5e+OjdJ4E7Xp7d5O4J1TaIZlCEbo5OpdhaTDDcQvrkFu+Z4eN0qzj+YAKjDAOOrXc4tbr5q0FsgXscwtcNfaBuzFVTUrUkCgYEAwzPnMNhWG3zOWLUs2QFA2GP4Y+J8cpUYfj6pbKKzeLwyG9qBwF1NJpN8m+q9q7V9P2LY+9Lp9e1mGsGeqt5HMEA3P6vIpcqLJLqE/4PBLLRzfccTcmqb1m71+erxTRhHBRkGS+I7dZEb3olQfnS1Y1tpMBxiwYwR3LW4oXuJwj8=","json","utf-8","MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnq90KnF4dTnlzzmxpujbI05OYqi5WxAS6cL0gnZFv2gK51HExF8v/BaP7P979PhFMgWTqmOOI+Dtno5s+yD09XTY1WkshbLk6i4g2Xlr8fyW9ODnkU88RI2w9UdPhQU4cPPwBNlrsYhKkVK2OxwM3kFqjoBBY0CZoZCsSQ3LDH5WeZqPArlsS6xa2zqJBuuoKjMrdpELl3eXSjP8K54eDJCbeetCZNKWLL3DPahTPB7LZikfYmslb0QUvCgGapD0xkS7eVq70NaL1G57MWABs4tbfWgxike4Daj3EfUrzIVspQxj7w8HEj9WozJPgL88kSJSits0pqD3n5r8HSuseQIDAQAB","RSA2");
  17 +
  18 + @Override
  19 + public CommonResult<String> unifiedOrder() {
  20 + AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();
  21 + AlipayTradePrecreateModel model = new AlipayTradePrecreateModel();
  22 + request.setBizModel(model);
  23 + model.setOutTradeNo(String.valueOf(System.currentTimeMillis()));
  24 + model.setTotalAmount("88.88");
  25 + model.setSubject("Iphone6 16G");
  26 + AlipayTradePrecreateResponse response = null;
  27 + try {
  28 + response = client.execute(request);
  29 + } catch (AlipayApiException e) {
  30 + e.printStackTrace();
  31 + }
  32 + System.out.println(response.getBody());
  33 + System.out.println(response.getQrCode());
  34 + return null;
  35 + }
  36 +
  37 + public static void main(String[] args) {
  38 + AlipayPayClient client = new AlipayPayClient();
  39 + client.unifiedOrder();
  40 + }
  41 +
  42 +}
yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/alipay/AlipayPayConfig.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.pay.core.client.alipay;
  2 +
  3 +import lombok.Data;
  4 +
  5 +// TODO 芋艿:参数校验
  6 +/**
  7 + * 支付宝的 PayClientConfig 实现类
  8 + * 属性主要来自 {@link com.alipay.api.AlipayConfig} 的必要属性
  9 + *
  10 + * @author 芋道源码
  11 + */
  12 +@Data
  13 +public class AlipayPayConfig {
  14 +
  15 + /**
  16 + * 网关地址 - 线上
  17 + */
  18 + private static final String SERVER_URL_PROD = "https://openapi.alipay.com/gateway.do";
  19 + /**
  20 + * 网关地址 - 沙箱
  21 + */
  22 + private static final String SERVER_URL_SANDBOX = "https://openapi.alipay.com/gateway.do";
  23 +
  24 + /**
  25 + * 公钥类型 - 公钥模式
  26 + */
  27 + private static final Integer MODE_PUBLIC_KEY = 1;
  28 + /**
  29 + * 公钥类型 - 证书模式
  30 + */
  31 + private static final Integer MODE_CERTIFICATE = 2;
  32 +
  33 + /**
  34 + * 签名算法类型 - RSA
  35 + */
  36 + private static final String SIGN_TYPE_DEFAULT = "RSA2";
  37 +
  38 + /**
  39 + * 网关地址
  40 + * 1. {@link #SERVER_URL_PROD}
  41 + * 2. {@link #SERVER_URL_SANDBOX}
  42 + */
  43 + private String serverUrl;
  44 +
  45 + /**
  46 + * 开放平台上创建的应用的 ID
  47 + */
  48 + private String appId;
  49 +
  50 + /**
  51 + * 签名算法类型,推荐:RSA2
  52 + *
  53 + * {@link #SIGN_TYPE_DEFAULT}
  54 + */
  55 + private String signType;
  56 +
  57 + /**
  58 + * 公钥类型
  59 + * 1. {@link #MODE_PUBLIC_KEY} 情况,privateKey + alipayPublicKey
  60 + * 2. {@link #MODE_CERTIFICATE} 情况,appCertContent + alipayPublicCertContent + rootCertContent
  61 + */
  62 + private Integer mode;
  63 +
  64 + // ========== 公钥模式 ==========
  65 + /**
  66 + * 商户私钥
  67 + */
  68 + private String privateKey;
  69 + /**
  70 + * 支付宝公钥字符串
  71 + */
  72 + private String alipayPublicKey;
  73 +
  74 + // ========== 证书模式 ==========
  75 + /**
  76 + * 指定商户公钥应用证书内容字符串
  77 + */
  78 + private String appCertContent;
  79 + /**
  80 + * 指定支付宝公钥证书内容字符串
  81 + */
  82 + private String alipayPublicCertContent;
  83 + /**
  84 + * 指定根证书内容字符串
  85 + */
  86 + private String rootCertContent;
  87 +
  88 +}
yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/package-info.java 0 → 100644
  1 +package cn.iocoder.yudao.framework.pay.core.client;
yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/gateway/ChannelNoticeService.java deleted
1 -package cn.iocoder.yudao.framework.pay.core.gateway;  
2 -/**  
3 - * @description 渠道侧的通知网关服务,分为同步跳转(doReturn)和异步回调(doNotify)  
4 - * @author Qingchen  
5 - * @version 1.0.0  
6 - * @date 2021-10-09 14:34  
7 - * @class cn.iocoder.yudao.framework.pay.core.gateway.ChannelNoticeService.java  
8 - */  
9 -public interface ChannelNoticeService {  
10 -  
11 -  
12 -  
13 -  
14 -}  
yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/gateway/RefundService.java deleted
1 -package cn.iocoder.yudao.framework.pay.core.gateway;  
2 -/**  
3 - * @description 退款网关服务  
4 - * @author Qingchen  
5 - * @version 1.0.0  
6 - * @date 2021-10-09 16:07  
7 - * @class cn.iocoder.yudao.framework.pay.core.gateway.RefundService.java  
8 - */  
9 -public interface RefundService {  
10 -  
11 -  
12 -  
13 -}  
yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/gateway/UnifiedOrderService.java deleted
1 -package cn.iocoder.yudao.framework.pay.core.gateway;  
2 -/**  
3 - * @description 统一下单网关服务  
4 - * @author Qingchen  
5 - * @version 1.0.0  
6 - * @date 2021-09-29 16:14  
7 - * @class cn.iocoder.yudao.framework.pay.core.gateway.UnifiedOrderService.java  
8 - */  
9 -public interface UnifiedOrderService {  
10 -  
11 -  
12 -  
13 -}  
yudao-framework/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/package-info.java deleted
1 -/**  
2 - * @description  
3 - * @author Qingchen  
4 - * @version 1.0.0  
5 - * @date 2021-09-29 14:34  
6 - * @class cn.iocoder.yudao.framework.pay.core.package-info.java  
7 - */  
8 -package cn.iocoder.yudao.framework.pay.core;  
9 \ No newline at end of file 0 \ No newline at end of file
yudao-framework/yudao-spring-boot-starter-biz-sms/src/main/java/cn/iocoder/yudao/framework/sms/core/client/SmsClient.java
@@ -8,7 +8,7 @@ import cn.iocoder.yudao.framework.sms.core.client.dto.SmsTemplateRespDTO; @@ -8,7 +8,7 @@ import cn.iocoder.yudao.framework.sms.core.client.dto.SmsTemplateRespDTO;
8 import java.util.List; 8 import java.util.List;
9 9
10 /** 10 /**
11 - * 短信客户端接口 11 + * 短信客户端,用于对接各短信平台的 SDK,实现短信发送等功能
12 * 12 *
13 * @author zzf 13 * @author zzf
14 * @date 2021/1/25 14:14 14 * @date 2021/1/25 14:14
yudao-framework/yudao-spring-boot-starter-biz-sms/src/main/java/cn/iocoder/yudao/framework/sms/core/client/impl/AbstractSmsClient.java
@@ -13,7 +13,7 @@ import lombok.extern.slf4j.Slf4j; @@ -13,7 +13,7 @@ import lombok.extern.slf4j.Slf4j;
13 import java.util.List; 13 import java.util.List;
14 14
15 /** 15 /**
16 - * 短信客户端抽象类 16 + * 短信客户端的抽象类,提供模板方法,减少子类的冗余代码
17 * 17 *
18 * @author zzf 18 * @author zzf
19 * @date 2021/2/1 9:28 19 * @date 2021/2/1 9:28