From 5d17b343ee1de961db8f2a06b1ee812851fdea90 Mon Sep 17 00:00:00 2001 From: qp_fss <1625265831@qq.com> Date: Wed, 30 Apr 2025 02:02:33 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E6=94=AF=E4=BB=98v3=20api=20=E6=9E=84=E5=BB=BA=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E6=8A=A5=E2=80=9C=E6=97=A0=E5=8F=AF=E7=94=A8=E7=9A=84?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E8=AF=81=E4=B9=A6...=E2=80=9D=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../binarywang/wxpay/config/WxPayConfig.java | 33 ++++++++++++------- .../config/WechatPayConfigService.java | 1 + 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/daxpay-open-channel/daxpay-open-channel-wechat/src/main/java/com/github/binarywang/wxpay/config/WxPayConfig.java b/daxpay-open-channel/daxpay-open-channel-wechat/src/main/java/com/github/binarywang/wxpay/config/WxPayConfig.java index 0f16ac31..6bef9f54 100644 --- a/daxpay-open-channel/daxpay-open-channel-wechat/src/main/java/com/github/binarywang/wxpay/config/WxPayConfig.java +++ b/daxpay-open-channel/daxpay-open-channel-wechat/src/main/java/com/github/binarywang/wxpay/config/WxPayConfig.java @@ -15,6 +15,7 @@ import org.apache.commons.lang3.RegExUtils; import org.apache.commons.lang3.StringUtils; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.ssl.SSLContexts; +import org.dromara.daxpay.channel.wechat.code.WechatPayCode; import javax.net.ssl.SSLContext; import java.io.*; @@ -42,6 +43,12 @@ public class WxPayConfig { private static final String PROBLEM_MSG = "证书文件【%s】有问题,请核实!"; private static final String NOT_FOUND_MSG = "证书文件【%s】不存在,请核实!"; + /** + * 接口版本, 使用v2还是v3接口 + * @see WechatPayCode#API_V2 + */ + private String apiVersion; + /** * 微信支付接口请求地址域名部分. */ @@ -277,7 +284,6 @@ public class WxPayConfig { * 初始化api v3请求头 自动签名验签 * 方法参照 微信支付官方api项目 * - * @return org.apache.http.impl.client.CloseableHttpClient * @author doger.wang **/ public CloseableHttpClient initApiV3HttpClient() throws WxPayException { @@ -353,16 +359,19 @@ public class WxPayConfig { boolean pathC = this.getPrivateCertContent() != null && this.getPrivateKeyContent() != null; boolean pathS = this.getPrivateCertString() != null && this.getPrivateKeyString() != null; - if (pathB || pathC || pathS) { - certificatesVerifier = new AutoUpdateCertificatesVerifier( - new WxPayCredentials(mchId, new PrivateKeySigner(certSerialNo, merchantPrivateKey)), - this.getApiV3Key().getBytes(StandardCharsets.UTF_8), this.getCertAutoUpdateTime(), - this.getPayBaseUrl(), wxPayHttpProxy); - } - if (publicKey != null) { - Verifier publicCertificatesVerifier = new PublicCertificateVerifier(publicKey, publicKeyId); - publicCertificatesVerifier.setOtherVerifier(certificatesVerifier); - certificatesVerifier = publicCertificatesVerifier; + if(WechatPayCode.API_V2.equals(this.getApiVersion())){ + if (pathB || pathC || pathS) { + certificatesVerifier = new AutoUpdateCertificatesVerifier( + new WxPayCredentials(mchId, new PrivateKeySigner(certSerialNo, merchantPrivateKey)), + this.getApiV3Key().getBytes(StandardCharsets.UTF_8), this.getCertAutoUpdateTime(), + this.getPayBaseUrl(), wxPayHttpProxy); + } + }else{ + if (publicKey != null) { + Verifier publicCertificatesVerifier = new PublicCertificateVerifier(publicKey, publicKeyId); + publicCertificatesVerifier.setOtherVerifier(certificatesVerifier); + certificatesVerifier = publicCertificatesVerifier; + } } return certificatesVerifier; } @@ -493,4 +502,4 @@ public class WxPayConfig { return null; } -} +} \ No newline at end of file diff --git a/daxpay-open-channel/daxpay-open-channel-wechat/src/main/java/org/dromara/daxpay/channel/wechat/service/payment/config/WechatPayConfigService.java b/daxpay-open-channel/daxpay-open-channel-wechat/src/main/java/org/dromara/daxpay/channel/wechat/service/payment/config/WechatPayConfigService.java index d51578f6..275c65e3 100644 --- a/daxpay-open-channel/daxpay-open-channel-wechat/src/main/java/org/dromara/daxpay/channel/wechat/service/payment/config/WechatPayConfigService.java +++ b/daxpay-open-channel/daxpay-open-channel-wechat/src/main/java/org/dromara/daxpay/channel/wechat/service/payment/config/WechatPayConfigService.java @@ -168,6 +168,7 @@ public class WechatPayConfigService { payConfig.setSubAppId(wechatPayConfig.getSubAppId()); payConfig.setMchKey(wechatPayConfig.getApiKeyV2()); payConfig.setApiV3Key(wechatPayConfig.getApiKeyV3()); + payConfig.setApiVersion(wechatPayConfig.getApiVersion()); // 注意不要使用base64的方式进行配置, 因为wxjava 是直接读取文本并不会进行解码, 会导致证书异常 if (StrUtil.isNotBlank(wechatPayConfig.getPublicKey())){ payConfig.setPublicKeyContent(Base64.decode(wechatPayConfig.getPublicKey()));