收藏
回答

V2 V3要等7天吗,这是不是要等换好?

  1. code1001
  2. data: []
  3. msg"生成二维码失败:Cannot found the serial(`7173A3FBEA1682E8BC9AFE373C146C4F7A4B0AXX`)'s configuration, which's from the response(header:Wechatpay-Serial), your's PUB_KEY_ID_01171796126320251015001920440016XX."
  4. ret0

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

3 个回答

  • 微信支付质量运营助手
    微信支付质量运营助手
    10-20

    1、验签失败

    微信接口更换没有时间限制,上面报错也跟接口版本无关。是你初始化时只配置了公钥来验签,而微信返回时用了平台证书的签名,所以验签失败。

    你商户号目前在平台证书切换公钥的灰度过程中,期间调v3接口时,如果在请求头的wechatpay-serial传了公钥ID,那你接收到的应答就需要用公钥验签。不传wechatpay-serial或者传平台证书序列号,则需要用平台证书验签。

    另外请注意下,灰度期间微信给你回调是随机用证书或者公私钥的,请以微信返回的wechatpay-serial值为准,具体请了解下https://pay.weixin.qq.com/doc/v3/merchant/4012154180

    2、签名失败

    v2接口签名用APIv2密钥。v3接口签名用的是API证书中的私钥,并且需要在请求头中传对应的证书序列号。请注意不同版本各自的签名方式

    10-20
    有用
    回复
  • 星光
    星光
    10-17

    下载微信支付公钥

    也不行,要转?

    10-17
    有用
    回复
  • Memory (私信不回复)
    Memory (私信不回复)
    10-17

    你需要在自己系统中同时兼容两种模式

    10-17
    有用
    回复 11
    • 星光
      星光
      10-17
      怎么兼容 我现在换过微信支付公钥就会出错
      10-17
      回复
    • Memory (私信不回复)
      Memory (私信不回复)
      10-17回复星光
      根据请求头的Wechatpay-Serial 判断使用公钥还是平台证书去验证签名
      10-17
      回复
    • 星光
      星光
      10-17
      那是不是要用V3要等7天?
      10-17
      回复
    • 星光
      星光
      10-17
      现在是用平台的
      10-17
      回复
    • 星光
      星光
      10-17
      private function loadPlatformCertificates($instance) {
              try {
                  $resp = $instance->chain('v3/certificates')->get();
                  $response = json_decode((string) $resp->getBody(), true);
                  echo json_encode($response, JSON_UNESCAPED_UNICODE);
                  error_log('设置平台证书: ' . json_encode($response, JSON_UNESCAPED_UNICODE));
                  if (isset($response['data']) && is_array($response['data'])) {
                      foreach ($response['data'] as $cert) {
                          // 解密证书
                          $decryptedCert = $this->decryptCertificate($cert['encrypt_certificate']);
                          // 设置到实例中
                          echo json_encode($decryptedCert, JSON_UNESCAPED_UNICODE);
                          error_log('设置平台证书: ' . $cert['serial_no'] . ' ' . $decryptedCert);
                          $instance->setCert($cert['serial_no'], $decryptedCert);
                      }
                  }
              } catch (\Exception $e) {
                  error_log('获取平台证书失败: ' . $e->getMessage());
              }
          }
      平台的证书也下不了
      10-17
      回复
    查看更多(6)
登录 后发表内容