收藏
回答

回调时微信平台证书验签失败?但是使用的是相同的证书公钥id

依赖信息:

<dependency>
    <groupId>com.github.wechatpay-apiv3</groupId>
    <artifactId>wechatpay-java</artifactId>
    <version>0.2.17</version>
</dependency>
<dependency>
    <groupId>com.github.wechatpay-apiv3</groupId>
    <artifactId>wechatpay-apache-httpclient</artifactId>
    <version>0.4.9</version> 
</dependency>


在支付回调时,成功跑进了/wechatpay/notify接口,但是验签不通过,目前是处于平台证书与微信支付公钥的切换灰度状态,因此使用了RSACombinedNotificationConfig,但是每次请求过来的请求头都是使用的平台证书,并且RSAAutoCertificateConfig与RSACombinedNotificationConfig这两个构造器都试过了,都验签失败,报错原因贴在了代码片段中



回答关注问题邀请回答
收藏

2 个回答

  • 微信支付质量运营助手
    微信支付质量运营助手
    08-22

    一、每次请求过来的请求头都是使用的平台证书

    ---------

    请求时传了公钥ID,但微信侧返回时仍是用平台证书的,请排查以下几点:

    1、是否开启公钥切换的灰度。截图中这里第三步的状态即是已开启灰度的状态。

    2、接口调用时是否传了正确的公钥ID。如果不确定是否正确,可以在商户平台的公钥界面直接复制

    3、所传公钥ID是否当前商户号。请参考截图方式核对商户号和对应公钥是否匹配

    4、收到平台证书的返回是否是回调场景的。因为回调场景是自动按日增大比例,不受商户调用接口时是否传公钥ID的影响,所以即时商户请求时全部都传了公钥ID,那在回调场景灰度到100%之前,回调场景仍会使用平台证书。

    二、这两个构造器都试过了,都验签失败

    -----

    请参考我们SDK的方法来实现,公钥灰度期间需要兼容证书和公钥两种方案的话,就要用MixVerifier

    08-22
    有用
    回复
  • Memory (私信不回复)
    Memory (私信不回复)
    08-22

    你怎么保证你代码生成的字符串与微信支付服务器发来的原始字符串一模一样?

    public ResponseEntity.BodyBuilder handleWechatPayNotify(
        @RequestBody JsonNode requestBodyJson,
        // ...
    ) {
        // ...
        String requestBody = requestBodyJson.toString();
        // ...
    }
    
    08-22
    有用 1
    回复
登录 后发表内容