收藏
回答

获取对私银行卡号开户银行API,返回平台私钥解密失败?

https://pay.weixin.qq.com/wiki/doc/apiv3_partner/Offline/apis/chapter11_2_1.shtml

为什么这个接口会返回平台私钥解密失败?

https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_1_1.shtml

二级商户进件接口没有问题,说明平台的公钥和序列号是正确的

https://pay.weixin.qq.com/wiki/doc/apiv3_partner/Offline/apis/chapter11_2_2.shtml

这个接口也没问题

为什么获取对私银行卡号开户银行API就会返回平台私钥解密失败?

是不是电商平台不支持调用这个api接口,还是这个API的签名生成规则不一样?

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

4 个回答

  • 北望沣渭
    北望沣渭
    2022-08-01

    https://pay.weixin.qq.com/wiki/doc/apiv3_partner/Offline/apis/chapter11_2_1.shtml 这个接口传参是GET方式,而银行卡是密文base64字符串,传输时需要处理特殊字符(一般SDK都会处理)。

    PHP参考代码如下:

    <?php
    use WeChatPay\Builder;
    use WeChatPay\Crypto\Rsa;
    
    Builder::factory([
        'mchid'      => $mchid,
        'privateKey' => $privateKey = Rsa::fromPkcs8($merchantPrivateKeyString),
        'serial'     => $merchantCerificateSerial,
        'certs'      => [$platformCertificateSerial => $publicKey = Rsa::fromSpki($platformPublicKeyString)],
    ])
    ->chain('v3/capital/capitallhh/banks/search-banks-by-bank-account')
    ->getAsync([
        'headers' => [
            'Wechatpay-Serial' => $platformCertificateSerial,
        ],
        'query' => [
            'account_number' => Rsa::encrypt('6228481831910000000', $publicKey)
        ],
    ])
    ->then(fn ($res) => (string)$res->getBody())
    ->otherwise(fn ($err) => (string)$err->getResponse()->getBody())
    ->then(fn ($str) => fwrite(STDERR, $str))
    ->wait();
    


    打印的json如下:

    {
      "data": [
        {
          "account_bank": "农业银行",
          "account_bank_code": 1005,
          "bank_alias": "农业银行",
          "bank_alias_code": "1000009548",
          "need_bank_branch": false
        }
      ],
      "total_count": 1
    }
    
    
    2022-08-01
    有用 1
    回复 3
    • Rua!
      Rua!
      2022-10-10
      你好,这个“传输时需要处理特殊字符(一般SDK都会处理)”是怎么处理的,能解答下吗
      2022-10-10
      回复
    • 北望沣渭
      北望沣渭
      2022-10-11回复Rua!
      base64字符串,在URL上get传参的时候,等号(=)及斜杠(/) 需要按照RFC3986规范,转译成对应的utf64编码格式,即%3D及%2F
      2022-10-11
      1
      回复
    • Leo ᯤ⁵ᴳ
      Leo ᯤ⁵ᴳ
      2023-11-13
      大哥威武,就是这个接口坑在参数是path方式的,把+ =拼接在url上,没有做urlEncode的话,微信传过来就是解密错误
      2023-11-13
      回复
  • 自律
    自律
    2022-08-04

    你好问题解决了吗

    2022-08-04
    有用
    回复 1
    • 自律
      自律
      2022-08-05
      已解决
      2022-08-05
      回复
  • 刘聪杰
    刘聪杰
    发表于移动端
    2022-07-31
    很好
    2022-07-31
    有用
    回复
  • 慎独
    慎独
    2022-07-31

    1、加密敏感数据用的公钥信息不正确

    2、使用的平台证书不正确,可以查看对应的证书序列号与“平台证书接口”返回的是否一致

    3、加密方式不正确,详情可以参考https://wechatpay-api.gitbook.io/wechatpay-api-v3/qian-ming-zhi-nan-1/min-gan-xin-xi-jia-mi

    4、公钥信息获取请使用对应语种的函数进行,详情可以参考https://wechatpay-api.gitbook.io/wechatpay-api-v3/qian-ming-zhi-nan-1/min-gan-xin-xi-jia-mi


    2022-07-31
    有用
    回复 1
    • 自律
      自律
      2022-08-04
      平台证书接口的序列号 和商户平台下载的序列号不一致要怎么解决 我已经废除重新申请了 一直不一致  使用下载的证书序列号报序列号错误 使用平台证书接口的序列号 就报平台私钥解密失败
      2022-08-04
      回复
登录 后发表内容