From 095a1e4a4a9695828b7e0d947fe5abae15e84815 Mon Sep 17 00:00:00 2001 From: xucun Date: Thu, 12 Jun 2025 09:43:21 +0800 Subject: [PATCH] =?UTF-8?q?:pencil:=20=20=E4=BF=AE=E6=94=B9=E6=96=87?= =?UTF-8?q?=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 25 ++++++++++++++++++- docs/README.md | 2 +- docs/quick_start.md | 2 +- .../payment/wechat/v3/SignatureProvider.java | 9 +++---- 4 files changed, 29 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 389688c..ee89f61 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ Starter,支持微信优惠券,代金券、商家券、智慧商圈、商家 cn.felord payment-spring-boot-starter - 1.0.20.RELEASE + 1.0.21.RELEASE ``` @@ -73,6 +73,29 @@ Starter,支持微信优惠券,代金券、商家券、智慧商圈、商家 ~~关于集成配置请详细阅读[payment-spring-boot GitHub文档](https://dromara.github.io/payment-spring-boot) 中[快速接入](https://dromara.github.io/payment-spring-boot/#/quick_start)章节 (暂时不可用)~~ +[关于微信支付公钥](https://pay.weixin.qq.com/doc/v3/merchant/4012153196) +微信官方推出了微信支付公钥产品以替代原来的微信平台证书,我们对此进行了适配 +相关配置如下 +```yaml +wechat: + pay: + v3: + # 租户id + : + # 是否使用微信支付公钥验签 默认false + enable-wechat-pay-public: true + # 微信支付公钥id + wechat-pay-public-key-id: PUB_KEY_ID_1111213 + # 微信支付公钥路径 + wechat-pay-public-key-path: 'pub_key.pem' + + wechat-pay-public-key-absolute-path: '' + # 是否启用签名验签方法切换 默认false + switch-verify-sign-method: true +``` +- 对于旧版本商户,若不使用微信支付公钥,则不需要配置上述对应参数,则默认使用微信平台证书验签。 +- 对于新进件的商户,微信官方默认启用支付公钥,需要配置上述参数。其中 `switch-verify-sign-method` 参数不需要配置 +- 若旧版版商户使用微信支付公钥,则需要配置上述参数,并启用 `switch-verify-sign-method : true` [原理参考](https://pay.weixin.qq.com/doc/v3/merchant/4012154180)。当完成从平台证书切换到微信支付公钥后,请务必将`switch-verify-sign-method`参数设置为false 或删除该字段 ### 调用示例 #### 开启支付 diff --git a/docs/README.md b/docs/README.md index df92a5c..3257853 100644 --- a/docs/README.md +++ b/docs/README.md @@ -35,7 +35,7 @@ cn.felord payment-spring-boot-starter - 1.0.20.RELEASE + 1.0.21.RELEASE ``` ## 采用技术 diff --git a/docs/quick_start.md b/docs/quick_start.md index c082f48..04fdbcc 100644 --- a/docs/quick_start.md +++ b/docs/quick_start.md @@ -15,7 +15,7 @@ ```xml - 2.4.0 + 2.7.18 ``` 然后安装使用 diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/SignatureProvider.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/SignatureProvider.java index e0a79d9..05c8367 100644 --- a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/SignatureProvider.java +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/SignatureProvider.java @@ -256,7 +256,7 @@ public class SignatureProvider { private synchronized void refreshCertificate(String tenantId) { WechatMetaBean wechatMetaBean = wechatMetaContainer.getWechatMeta(tenantId); - if (wechatMetaBean.getV3().getEnableWechatPayPublic() && wechatMetaBean.getV3().getSwitchVerifySignMethod()){ + if (wechatMetaBean.getV3().getEnableWechatPayPublic() && !wechatMetaBean.getV3().getSwitchVerifySignMethod()){ return; } String url = WechatPayV3Type.CERT.uri(WeChatServer.CHINA); @@ -485,11 +485,8 @@ public class SignatureProvider { public boolean isSwitchVerifySignMethod(String tenantId) { - String publicKeyId=wechatMetaContainer.getWechatMeta(tenantId).getV3().getWechatPayPublicKeyId(); - - Boolean switchVerifySignMethod = wechatMetaContainer.getWechatMeta(tenantId).getV3().getSwitchVerifySignMethod(); - - return switchVerifySignMethod && StringUtils.hasLength(publicKeyId); + return wechatMetaContainer.getWechatMeta(tenantId).getV3().getSwitchVerifySignMethod() + && wechatMetaContainer.getWechatMeta(tenantId).getV3().getEnableWechatPayPublic(); } public String getWechatPublicKeyId(String tenantId) {