收藏
回答

商家转账报错:平台私钥解密失败?

const publicKeyID = "******"  // https://pay.weixin.qq.com/index.php/core/cert/api_cert#/replace-key-step 复制的公钥ID
const publicKey = fs.readFileSync("pub_key.pem")  // 从 https://pay.weixin.qq.com/index.php/core/cert/api_cert#/replace-key-step 下载的

if (user_name) {
  headers["Wechatpay-Serial"] = publicKeyID
  body.user_name = crypto.publicEncrypt(
    {
      key: publicKey,
      padding: crypto.constants.RSA_PKCS1_OAEP_PADDING,
      oaepHash: "sha256"
    },
    Buffer.from(user_name, "utf8")
  ).toString("base64")
}

 

我在对 "POST/v3/fund-app/mch-transfer/transfer-bills" 发起请求时,报错:{ code: 'PARAM_ERROR', message: '平台私钥解密失败' }。

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

4 个回答

  • ;
    ;
    11-12

    首先我对您说的2~3点表示肯定,我确定这些都不存在任何问题。

    其次,我对您说的第1点,“是否正确使用APIv3密钥进行公钥加密”表示疑惑?

    按照官方代码示例https://pay.weixin.qq.com/doc/v3/merchant/4013053257来看,应该直接使用微信支付公钥下载下来的 pub_key.pem 文件来进行加密吧?

    11-12
    有用 1
    回复 1
    • 支付社区运营
      支付社区运营
      11-13
      是的 你的理解是正确的。敏感信息加密需要用平台证书/微信支付公钥加密,和v3密钥没有关系
      11-13
      回复
  • 北望沣渭
    北望沣渭
    11-12

    使用微信支付钥加密字段后,需要把公钥ID显式声明在请求头上,代码可参考 https://wechatpay.js.org/openapi/v3/fund-app/mch-transfer/transfer-bills

    11-12
    有用
    回复 5
    • ;
      ;
      11-12
      您好,我的确做过该处理,但依旧报解密失败
      11-12
      回复
    • 北望沣渭
      北望沣渭
      11-12回复;
      rsa加密的oaepHash值错了,得用sha1
      11-12
      1
      回复
    • ;
      ;
      11-12回复北望沣渭
      用改成 sha1 后依旧报相同的错
      11-12
      回复
    • 北望沣渭
      北望沣渭
      11-12回复;
      如遇到问题,请拿响应头上的Request-ID点击 https://support.pay.weixin.qq.com/online-service 联系官方在线技术支持;
      11-12
      1
      回复
    • ;
      ;
      11-12回复北望沣渭
      不好意思,刚刚改错地方了,将 "sha256" 改成 "sha1" 的确成功了,感谢
      11-12
      回复
  • Memory (私信不回复)
    Memory (私信不回复)
    11-12

    这类一般是用错了加密的平台证书/公钥导致的,如果是平台证书需要通过接口获取,如果是微信公钥要从后台下载单独的公钥而不是使用商户 API 证书

    11-12
    有用
    回复 9
    • ;
      ;
      11-12
      您好,我是用的是微信支付公钥,公钥是直接下下来的,并未使用商户API证书
      11-12
      回复
    • ;
      ;
      11-12
      是不是因为公钥状态为”切换中“导致的呢
      11-12
      回复
    • Memory (私信不回复)
      Memory (私信不回复)
      11-12回复;
      平台证书当前有没有失效?
      11-12
      回复
    • ;
      ;
      11-12回复Memory (私信不回复)
      还没失效
      11-12
      回复
    • Memory (私信不回复)
      Memory (私信不回复)
      11-12回复;
      还没失效就先使用平台证书
      11-12
      回复
    查看更多(4)
  • 智能回答 智能回答 本次回答由AI生成
    11-12
    有用
登录 后发表内容