diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/config/WxPayConfig.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/config/WxPayConfig.java index dedbc6413..7a14ea152 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/config/WxPayConfig.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/config/WxPayConfig.java @@ -347,10 +347,14 @@ public class WxPayConfig { } private Verifier getVerifier(PrivateKey merchantPrivateKey, WxPayHttpProxy wxPayHttpProxy, PublicKey publicKey) { - Verifier certificatesVerifier = new AutoUpdateCertificatesVerifier( - new WxPayCredentials(mchId, new PrivateKeySigner(certSerialNo, merchantPrivateKey)), - this.getApiV3Key().getBytes(StandardCharsets.UTF_8), this.getCertAutoUpdateTime(), - this.getPayBaseUrl(), wxPayHttpProxy); + Verifier certificatesVerifier = null; + // 如果配置了平台证书,则初始化验证器以备v2版本接口验签(公钥灰度实现) + if (this.getPrivateCertPath() != null && this.getPrivateKeyPath() != null) { + 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); diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/v3/auth/PublicCertificateVerifier.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/v3/auth/PublicCertificateVerifier.java index 45f76818c..8c9c4f356 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/v3/auth/PublicCertificateVerifier.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/v3/auth/PublicCertificateVerifier.java @@ -24,7 +24,7 @@ public class PublicCertificateVerifier implements Verifier{ @Override public boolean verify(String serialNumber, byte[] message, String signature) { - if (!serialNumber.contains("PUB_KEY_ID")) { + if (!serialNumber.contains("PUB_KEY_ID") && this.certificateVerifier != null) { return this.certificateVerifier.verify(serialNumber, message, signature); } try {