收藏
回答

微信小程序支付验签为什么一直报“下载平台证书返回状态码异常,状态码为:401”?

@Bean
public Verifier getVerifier() {
    //获取商户私钥
    PrivateKey privateKey = getPrivateKey(properties.getPrivateKeyPath());

    //微信证书校验器
    Verifier verifier;


        //获取证书管理器实例
        CertificatesManager certificatesManager = CertificatesManager.getInstance();

        //私钥签名对象(加密)
        PrivateKeySigner privateKeySigner = new PrivateKeySigner(properties.getSerialNumber(), privateKey);

        //身份认证对象(解密)
        WechatPay2Credentials wechatPay2Credentials = new WechatPay2Credentials(properties.getMchId(), privateKeySigner);
    try {
        //向证书管理器增加需要自动更新平台证书的商户信息(默认时间间隔:24小时)
        certificatesManager.putMerchant(
                properties.getMchId(),
                wechatPay2Credentials,
                properties.getApiV3Key().getBytes(StandardCharsets.UTF_8));
    } catch (IOException | GeneralSecurityException | HttpCodeException e) {
        e.printStackTrace();
        throw new ServiceException( "获取签名验证器失败"+e.getMessage());
    }

    //从证书管理器中获取verifier
    try {
        verifier = certificatesManager.getVerifier(properties.getMchId());
    } catch (NotFoundException e) {
        throw new RuntimeException(e);
    }

    return verifier;
}


CertificatesManager - [downloadAndUpdateCert,276] - Auto update cert failed, statusCode = 401, body = {"code":"SIGN_ERROR","detail":{"detail":{"issue":"sign not match"},"field":"signature","location":"authorization","sign_information":{"method":"GET","sign_message_length":66,"truncated_sign_message":"GET\n/v3/certificates\n1766990288\n3fF4gBvk4oc50LmlDzTAUzOkLrD2eP8d\n\n","url":"/v3/certificates"}},"message":"错误的签名,验签失败"}


com.wechat.pay.contrib.apache.httpclient.exception.HttpCodeException: 下载平台证书返回状态码异常,状态码为:401

at com.wechat.pay.contrib.apache.httpclient.cert.CertificatesManager.downloadAndUpdateCert(CertificatesManager.java:277)

at com.wechat.pay.contrib.apache.httpclient.cert.CertificatesManager.initCertificates(CertificatesManager.java:295)

at com.wechat.pay.contrib.apache.httpclient.cert.CertificatesManager.putMerchant(CertificatesManager.java:152)

at com.yooyi.pay.config.WxPayConfig.getVerifier(WxPayConfig.java:65)

at com.yooyi.pay.config.WxPayConfig$$EnhancerBySpringCGLIB$$2f872708.CGLIB$getVerifier$5(<generated>)

at com.yooyi.pay.config.WxPayConfig$$EnhancerBySpringCGLIB$$2f872708$$FastClassBySpringCGLIB$$52c97284.invoke(<generated>)

at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244)

at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331)


按照AI开发助手,检查了相关的证书,密钥,都是正确的

最后一次编辑于  2025-12-29
回答关注问题邀请回答
收藏

2 个回答

  • Memory (私信不回复)
    Memory (私信不回复)
    2025-12-29

    这个接口报错只有两种原因,一个是私钥不对,一个是签名计算不对

    2025-12-29
    有用 1
    回复
  • 诸神无名
    诸神无名
    2025-12-29

    为什么支付还要证书吗,我记得是不需要证书的啊,退款才要证书

    2025-12-29
    有用
    回复 1
    • 支付社区运营
      支付社区运营
      2025-12-30
      /v3/certificates因为他使用的sdk会自动去下载平台证书
      2025-12-30
      回复
登录 后发表内容