Commit f0d680b2b81f9c641116943ac66f969d258bfdd2

Authored by YunaiV
1 parent f877a24e

【功能优化】PAY:微信支付使用 certSerialNo 替代 privateCertContent

yudao-module-pay/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/weixin/AbstractWxPayClient.java
... ... @@ -36,6 +36,7 @@ import java.util.Objects;
36 36  
37 37 import static cn.hutool.core.date.DatePattern.*;
38 38 import static cn.iocoder.yudao.framework.pay.core.client.impl.weixin.WxPayClientConfig.API_VERSION_V2;
  39 +import static cn.iocoder.yudao.framework.pay.core.client.impl.weixin.WxPayClientConfig.API_VERSION_V3;
39 40  
40 41 /**
41 42 * 微信支付抽象类,实现微信统一的接口、以及部分实现(退款)
... ... @@ -59,19 +60,14 @@ public abstract class AbstractWxPayClient extends AbstractPayClient<WxPayClientC
59 60 protected void doInit(String tradeType) {
60 61 // 创建 config 配置
61 62 WxPayConfig payConfig = new WxPayConfig();
62   - BeanUtil.copyProperties(config, payConfig, "keyContent", "privateKeyContent", "privateCertContent");
  63 + BeanUtil.copyProperties(config, payConfig, "keyContent", "privateKeyContent");
63 64 payConfig.setTradeType(tradeType);
64 65 // weixin-pay-java 无法设置内容,只允许读取文件,所以这里要创建临时文件来解决
65   - if (Base64.isBase64(config.getKeyContent())) {
  66 + if (Objects.equals(config.getApiVersion(), API_VERSION_V2)) {
66 67 payConfig.setKeyPath(FileUtils.createTempFile(Base64.decode(config.getKeyContent())).getPath());
67   - }
68   - if (StrUtil.isNotEmpty(config.getPrivateKeyContent())) {
  68 + } else if (Objects.equals(config.getApiVersion(), API_VERSION_V3)) {
69 69 payConfig.setPrivateKeyPath(FileUtils.createTempFile(config.getPrivateKeyContent()).getPath());
70 70 }
71   - if (StrUtil.isNotEmpty(config.getPrivateCertContent())) {
72   - payConfig.setPrivateCertPath(FileUtils.createTempFile(config.getPrivateCertContent()).getPath());
73   - }
74   -// payConfig.setCertSerialNo();
75 71  
76 72 // 创建 client 客户端
77 73 client = new WxPayServiceImpl();
... ... @@ -86,7 +82,7 @@ public abstract class AbstractWxPayClient extends AbstractPayClient<WxPayClientC
86 82 switch (config.getApiVersion()) {
87 83 case API_VERSION_V2:
88 84 return doUnifiedOrderV2(reqDTO);
89   - case WxPayClientConfig.API_VERSION_V3:
  85 + case API_VERSION_V3:
90 86 return doUnifiedOrderV3(reqDTO);
91 87 default:
92 88 throw new IllegalArgumentException(String.format("未知的 API 版本(%s)", config.getApiVersion()));
... ... @@ -157,7 +153,7 @@ public abstract class AbstractWxPayClient extends AbstractPayClient<WxPayClientC
157 153 switch (config.getApiVersion()) {
158 154 case API_VERSION_V2:
159 155 return doParseOrderNotifyV2(body);
160   - case WxPayClientConfig.API_VERSION_V3:
  156 + case API_VERSION_V3:
161 157 return doParseOrderNotifyV3(body);
162 158 default:
163 159 throw new IllegalArgumentException(String.format("未知的 API 版本(%s)", config.getApiVersion()));
... ... @@ -192,7 +188,7 @@ public abstract class AbstractWxPayClient extends AbstractPayClient<WxPayClientC
192 188 switch (config.getApiVersion()) {
193 189 case API_VERSION_V2:
194 190 return doGetOrderV2(outTradeNo);
195   - case WxPayClientConfig.API_VERSION_V3:
  191 + case API_VERSION_V3:
196 192 return doGetOrderV3(outTradeNo);
197 193 default:
198 194 throw new IllegalArgumentException(String.format("未知的 API 版本(%s)", config.getApiVersion()));
... ... @@ -261,7 +257,7 @@ public abstract class AbstractWxPayClient extends AbstractPayClient<WxPayClientC
261 257 switch (config.getApiVersion()) {
262 258 case API_VERSION_V2:
263 259 return doUnifiedRefundV2(reqDTO);
264   - case WxPayClientConfig.API_VERSION_V3:
  260 + case API_VERSION_V3:
265 261 return doUnifiedRefundV3(reqDTO);
266 262 default:
267 263 throw new IllegalArgumentException(String.format("未知的 API 版本(%s)", config.getApiVersion()));
... ... @@ -321,7 +317,7 @@ public abstract class AbstractWxPayClient extends AbstractPayClient<WxPayClientC
321 317 switch (config.getApiVersion()) {
322 318 case API_VERSION_V2:
323 319 return doParseRefundNotifyV2(body);
324   - case WxPayClientConfig.API_VERSION_V3:
  320 + case API_VERSION_V3:
325 321 return parseRefundNotifyV3(body);
326 322 default:
327 323 throw new IllegalArgumentException(String.format("未知的 API 版本(%s)", config.getApiVersion()));
... ... @@ -358,7 +354,7 @@ public abstract class AbstractWxPayClient extends AbstractPayClient<WxPayClientC
358 354 switch (config.getApiVersion()) {
359 355 case API_VERSION_V2:
360 356 return doGetRefundV2(outTradeNo, outRefundNo);
361   - case WxPayClientConfig.API_VERSION_V3:
  357 + case API_VERSION_V3:
362 358 return doGetRefundV3(outTradeNo, outRefundNo);
363 359 default:
364 360 throw new IllegalArgumentException(String.format("未知的 API 版本(%s)", config.getApiVersion()));
... ...
yudao-module-pay/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/weixin/WxPayClientConfig.java
1 1 package cn.iocoder.yudao.framework.pay.core.client.impl.weixin;
2 2  
3   -import cn.hutool.core.io.IoUtil;
4 3 import cn.iocoder.yudao.framework.common.util.validation.ValidationUtils;
5 4 import cn.iocoder.yudao.framework.pay.core.client.PayClientConfig;
6   -import lombok.Data;
7   -
8 5 import jakarta.validation.Validator;
9 6 import jakarta.validation.constraints.NotBlank;
10   -import java.io.FileInputStream;
11   -import java.io.FileNotFoundException;
  7 +import lombok.Data;
12 8  
13 9 /**
14 10 * 微信支付的 PayClientConfig 实现类
... ... @@ -72,15 +68,18 @@ public class WxPayClientConfig implements PayClientConfig {
72 68 @NotBlank(message = "apiclient_key 不能为空", groups = V3.class)
73 69 private String privateKeyContent;
74 70 /**
75   - * apiclient_cert.pem 证书文件的对应的字符串
76   - */
77   - @NotBlank(message = "apiclient_cert 不能为空", groups = V3.class)
78   - private String privateCertContent;
79   - /**
80 71 * apiV3 密钥值
81 72 */
82 73 @NotBlank(message = "apiV3 密钥值不能为空", groups = V3.class)
83 74 private String apiV3Key;
  75 + /**
  76 + * 证书序列号
  77 + */
  78 + @NotBlank(message = "证书序列号不能为空", groups = V3.class)
  79 + private String certSerialNo;
  80 +
  81 + @Deprecated // TODO 芋艿:V2.3.0 进行移除
  82 + private String privateCertContent;
84 83  
85 84 /**
86 85 * 分组校验 v2版本
... ... @@ -100,11 +99,4 @@ public class WxPayClientConfig implements PayClientConfig {
100 99 API_VERSION_V2.equals(this.getApiVersion()) ? V2.class : V3.class);
101 100 }
102 101  
103   - public static void main(String[] args) throws FileNotFoundException {
104   - String path = "/Users/yunai/Downloads/wx_pay/apiclient_cert.p12";
105   - /// String path = "/Users/yunai/Downloads/wx_pay/apiclient_key.pem";
106   - /// String path = "/Users/yunai/Downloads/wx_pay/apiclient_cert.pem";
107   - System.out.println(IoUtil.readUtf8(new FileInputStream(path)));
108   - }
109   -
110 102 }
... ...