【功能优化】PAY:微信支付使用 certSerialNo 替代 privateCertContent
This commit is contained in:
parent
f877a24eaa
commit
f0d680b2b8
|
@ -36,6 +36,7 @@ import java.util.Objects;
|
||||||
|
|
||||||
import static cn.hutool.core.date.DatePattern.*;
|
import static cn.hutool.core.date.DatePattern.*;
|
||||||
import static cn.iocoder.yudao.framework.pay.core.client.impl.weixin.WxPayClientConfig.API_VERSION_V2;
|
import static cn.iocoder.yudao.framework.pay.core.client.impl.weixin.WxPayClientConfig.API_VERSION_V2;
|
||||||
|
import static cn.iocoder.yudao.framework.pay.core.client.impl.weixin.WxPayClientConfig.API_VERSION_V3;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 微信支付抽象类,实现微信统一的接口、以及部分实现(退款)
|
* 微信支付抽象类,实现微信统一的接口、以及部分实现(退款)
|
||||||
|
@ -59,19 +60,14 @@ public abstract class AbstractWxPayClient extends AbstractPayClient<WxPayClientC
|
||||||
protected void doInit(String tradeType) {
|
protected void doInit(String tradeType) {
|
||||||
// 创建 config 配置
|
// 创建 config 配置
|
||||||
WxPayConfig payConfig = new WxPayConfig();
|
WxPayConfig payConfig = new WxPayConfig();
|
||||||
BeanUtil.copyProperties(config, payConfig, "keyContent", "privateKeyContent", "privateCertContent");
|
BeanUtil.copyProperties(config, payConfig, "keyContent", "privateKeyContent");
|
||||||
payConfig.setTradeType(tradeType);
|
payConfig.setTradeType(tradeType);
|
||||||
// weixin-pay-java 无法设置内容,只允许读取文件,所以这里要创建临时文件来解决
|
// weixin-pay-java 无法设置内容,只允许读取文件,所以这里要创建临时文件来解决
|
||||||
if (Base64.isBase64(config.getKeyContent())) {
|
if (Objects.equals(config.getApiVersion(), API_VERSION_V2)) {
|
||||||
payConfig.setKeyPath(FileUtils.createTempFile(Base64.decode(config.getKeyContent())).getPath());
|
payConfig.setKeyPath(FileUtils.createTempFile(Base64.decode(config.getKeyContent())).getPath());
|
||||||
}
|
} else if (Objects.equals(config.getApiVersion(), API_VERSION_V3)) {
|
||||||
if (StrUtil.isNotEmpty(config.getPrivateKeyContent())) {
|
|
||||||
payConfig.setPrivateKeyPath(FileUtils.createTempFile(config.getPrivateKeyContent()).getPath());
|
payConfig.setPrivateKeyPath(FileUtils.createTempFile(config.getPrivateKeyContent()).getPath());
|
||||||
}
|
}
|
||||||
if (StrUtil.isNotEmpty(config.getPrivateCertContent())) {
|
|
||||||
payConfig.setPrivateCertPath(FileUtils.createTempFile(config.getPrivateCertContent()).getPath());
|
|
||||||
}
|
|
||||||
// payConfig.setCertSerialNo();
|
|
||||||
|
|
||||||
// 创建 client 客户端
|
// 创建 client 客户端
|
||||||
client = new WxPayServiceImpl();
|
client = new WxPayServiceImpl();
|
||||||
|
@ -86,7 +82,7 @@ public abstract class AbstractWxPayClient extends AbstractPayClient<WxPayClientC
|
||||||
switch (config.getApiVersion()) {
|
switch (config.getApiVersion()) {
|
||||||
case API_VERSION_V2:
|
case API_VERSION_V2:
|
||||||
return doUnifiedOrderV2(reqDTO);
|
return doUnifiedOrderV2(reqDTO);
|
||||||
case WxPayClientConfig.API_VERSION_V3:
|
case API_VERSION_V3:
|
||||||
return doUnifiedOrderV3(reqDTO);
|
return doUnifiedOrderV3(reqDTO);
|
||||||
default:
|
default:
|
||||||
throw new IllegalArgumentException(String.format("未知的 API 版本(%s)", config.getApiVersion()));
|
throw new IllegalArgumentException(String.format("未知的 API 版本(%s)", config.getApiVersion()));
|
||||||
|
@ -157,7 +153,7 @@ public abstract class AbstractWxPayClient extends AbstractPayClient<WxPayClientC
|
||||||
switch (config.getApiVersion()) {
|
switch (config.getApiVersion()) {
|
||||||
case API_VERSION_V2:
|
case API_VERSION_V2:
|
||||||
return doParseOrderNotifyV2(body);
|
return doParseOrderNotifyV2(body);
|
||||||
case WxPayClientConfig.API_VERSION_V3:
|
case API_VERSION_V3:
|
||||||
return doParseOrderNotifyV3(body);
|
return doParseOrderNotifyV3(body);
|
||||||
default:
|
default:
|
||||||
throw new IllegalArgumentException(String.format("未知的 API 版本(%s)", config.getApiVersion()));
|
throw new IllegalArgumentException(String.format("未知的 API 版本(%s)", config.getApiVersion()));
|
||||||
|
@ -192,7 +188,7 @@ public abstract class AbstractWxPayClient extends AbstractPayClient<WxPayClientC
|
||||||
switch (config.getApiVersion()) {
|
switch (config.getApiVersion()) {
|
||||||
case API_VERSION_V2:
|
case API_VERSION_V2:
|
||||||
return doGetOrderV2(outTradeNo);
|
return doGetOrderV2(outTradeNo);
|
||||||
case WxPayClientConfig.API_VERSION_V3:
|
case API_VERSION_V3:
|
||||||
return doGetOrderV3(outTradeNo);
|
return doGetOrderV3(outTradeNo);
|
||||||
default:
|
default:
|
||||||
throw new IllegalArgumentException(String.format("未知的 API 版本(%s)", config.getApiVersion()));
|
throw new IllegalArgumentException(String.format("未知的 API 版本(%s)", config.getApiVersion()));
|
||||||
|
@ -261,7 +257,7 @@ public abstract class AbstractWxPayClient extends AbstractPayClient<WxPayClientC
|
||||||
switch (config.getApiVersion()) {
|
switch (config.getApiVersion()) {
|
||||||
case API_VERSION_V2:
|
case API_VERSION_V2:
|
||||||
return doUnifiedRefundV2(reqDTO);
|
return doUnifiedRefundV2(reqDTO);
|
||||||
case WxPayClientConfig.API_VERSION_V3:
|
case API_VERSION_V3:
|
||||||
return doUnifiedRefundV3(reqDTO);
|
return doUnifiedRefundV3(reqDTO);
|
||||||
default:
|
default:
|
||||||
throw new IllegalArgumentException(String.format("未知的 API 版本(%s)", config.getApiVersion()));
|
throw new IllegalArgumentException(String.format("未知的 API 版本(%s)", config.getApiVersion()));
|
||||||
|
@ -321,7 +317,7 @@ public abstract class AbstractWxPayClient extends AbstractPayClient<WxPayClientC
|
||||||
switch (config.getApiVersion()) {
|
switch (config.getApiVersion()) {
|
||||||
case API_VERSION_V2:
|
case API_VERSION_V2:
|
||||||
return doParseRefundNotifyV2(body);
|
return doParseRefundNotifyV2(body);
|
||||||
case WxPayClientConfig.API_VERSION_V3:
|
case API_VERSION_V3:
|
||||||
return parseRefundNotifyV3(body);
|
return parseRefundNotifyV3(body);
|
||||||
default:
|
default:
|
||||||
throw new IllegalArgumentException(String.format("未知的 API 版本(%s)", config.getApiVersion()));
|
throw new IllegalArgumentException(String.format("未知的 API 版本(%s)", config.getApiVersion()));
|
||||||
|
@ -358,7 +354,7 @@ public abstract class AbstractWxPayClient extends AbstractPayClient<WxPayClientC
|
||||||
switch (config.getApiVersion()) {
|
switch (config.getApiVersion()) {
|
||||||
case API_VERSION_V2:
|
case API_VERSION_V2:
|
||||||
return doGetRefundV2(outTradeNo, outRefundNo);
|
return doGetRefundV2(outTradeNo, outRefundNo);
|
||||||
case WxPayClientConfig.API_VERSION_V3:
|
case API_VERSION_V3:
|
||||||
return doGetRefundV3(outTradeNo, outRefundNo);
|
return doGetRefundV3(outTradeNo, outRefundNo);
|
||||||
default:
|
default:
|
||||||
throw new IllegalArgumentException(String.format("未知的 API 版本(%s)", config.getApiVersion()));
|
throw new IllegalArgumentException(String.format("未知的 API 版本(%s)", config.getApiVersion()));
|
||||||
|
|
|
@ -1,14 +1,10 @@
|
||||||
package cn.iocoder.yudao.framework.pay.core.client.impl.weixin;
|
package cn.iocoder.yudao.framework.pay.core.client.impl.weixin;
|
||||||
|
|
||||||
import cn.hutool.core.io.IoUtil;
|
|
||||||
import cn.iocoder.yudao.framework.common.util.validation.ValidationUtils;
|
import cn.iocoder.yudao.framework.common.util.validation.ValidationUtils;
|
||||||
import cn.iocoder.yudao.framework.pay.core.client.PayClientConfig;
|
import cn.iocoder.yudao.framework.pay.core.client.PayClientConfig;
|
||||||
import lombok.Data;
|
|
||||||
|
|
||||||
import jakarta.validation.Validator;
|
import jakarta.validation.Validator;
|
||||||
import jakarta.validation.constraints.NotBlank;
|
import jakarta.validation.constraints.NotBlank;
|
||||||
import java.io.FileInputStream;
|
import lombok.Data;
|
||||||
import java.io.FileNotFoundException;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 微信支付的 PayClientConfig 实现类
|
* 微信支付的 PayClientConfig 实现类
|
||||||
|
@ -71,16 +67,19 @@ public class WxPayClientConfig implements PayClientConfig {
|
||||||
*/
|
*/
|
||||||
@NotBlank(message = "apiclient_key 不能为空", groups = V3.class)
|
@NotBlank(message = "apiclient_key 不能为空", groups = V3.class)
|
||||||
private String privateKeyContent;
|
private String privateKeyContent;
|
||||||
/**
|
|
||||||
* apiclient_cert.pem 证书文件的对应的字符串
|
|
||||||
*/
|
|
||||||
@NotBlank(message = "apiclient_cert 不能为空", groups = V3.class)
|
|
||||||
private String privateCertContent;
|
|
||||||
/**
|
/**
|
||||||
* apiV3 密钥值
|
* apiV3 密钥值
|
||||||
*/
|
*/
|
||||||
@NotBlank(message = "apiV3 密钥值不能为空", groups = V3.class)
|
@NotBlank(message = "apiV3 密钥值不能为空", groups = V3.class)
|
||||||
private String apiV3Key;
|
private String apiV3Key;
|
||||||
|
/**
|
||||||
|
* 证书序列号
|
||||||
|
*/
|
||||||
|
@NotBlank(message = "证书序列号不能为空", groups = V3.class)
|
||||||
|
private String certSerialNo;
|
||||||
|
|
||||||
|
@Deprecated // TODO 芋艿:V2.3.0 进行移除
|
||||||
|
private String privateCertContent;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分组校验 v2版本
|
* 分组校验 v2版本
|
||||||
|
@ -100,11 +99,4 @@ public class WxPayClientConfig implements PayClientConfig {
|
||||||
API_VERSION_V2.equals(this.getApiVersion()) ? V2.class : V3.class);
|
API_VERSION_V2.equals(this.getApiVersion()) ? V2.class : V3.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) throws FileNotFoundException {
|
|
||||||
String path = "/Users/yunai/Downloads/wx_pay/apiclient_cert.p12";
|
|
||||||
/// String path = "/Users/yunai/Downloads/wx_pay/apiclient_key.pem";
|
|
||||||
/// String path = "/Users/yunai/Downloads/wx_pay/apiclient_cert.pem";
|
|
||||||
System.out.println(IoUtil.readUtf8(new FileInputStream(path)));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue