收藏
回答

【已解决】JSAPI支付 微信内H5调起支付 签名验证失败

后端返回的参数:

{

  "timeStamp": "1615466808",

  "package": "prepay_id=wx1120464888989129d021ad173b11bd0000",

  "appId": "wx81dbeaf5cdebab02",

  "sign": "603C901CBDAA9D7484BD9BF4BDE7FD99",

  "nonceStr": "0df69c99116e474282440ebe8861a0db"

}

前端代码:

function onBridgeReady(){
  WeixinJSBridge.invoke(
     'getBrandWCPayRequest', {
        "appId":"wx81dbeaf5cdebab02"//公众号名称,由商户传入     
        "timeStamp":"1615466808",      //时间戳,自1970年以来的秒数     
        "nonceStr":"e61463f8efa94090b1f366cccfbbb444", //随机串     
        "package":"prepay_id=wx1120464888989129d021ad173b11bd0000",     
        "signType":"MD5",       //微信签名方式:     
        "paySign":"603C901CBDAA9D7484BD9BF4BDE7FD99" //微信签名 
       },
      function(res){     
         if(res.err_msg == "get_brand_wcpay_request:ok" ) {}    // 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回    ok,但并不保证它绝对可靠。 
       }
   ); 
}
if (typeof WeixinJSBridge == "undefined"){
   if( document.addEventListener ){
       document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
   }else if (document.attachEvent){
       document.attachEvent('WeixinJSBridgeReady', onBridgeReady); 
       document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
   }
}else{
   onBridgeReady();
} 

1. 已经在微信签名工具上验证签名无误
2. 商户私钥其他支付如H5扫码支付都无问题,密钥无误,且确认没有变更(就一个商户接了支付)
3. 接入的是JSAPI支付,H5的接入顺利且无异常,JSAPI一直卡在最后这个签名
还是会出现下方的错误,求求了救救孩子吧,看了一天没发现啥问题。


问题已解决,见回复。

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

1 个回答

  • transient field
    transient field
    2021-03-12

    问题已解决。

    1. 首先已经确认自己的算法跟微信算法验签工具的结果是一致的,微信验签地址:https://pay.weixin.qq.com/wiki/doc/api/wxpay_v2/jiekouguize/tool.shtml
    2. 二次签名(即paySign)的算法必须跟统一下单的签名算法保持一致,我用的都是MD5算法。
    3. 看社区的回答有官方人员说下单的nonce_str和参与paySign签名的nonceStr要保持一致。
    4. 参与签名的字段写法以前端的传参为主,即用的是驼峰标识,即用下方这些字段参与签名。
    5. signType字段也是参与签名的。(我就是因为没把这个字段算入签名导致错误)

    完整的流程可以参考下在网上看到的这篇博客,也有错误总结:https://blog.csdn.net/qq_38371367/article/details/87195489

    另外,希望微信官方能够提供签名的demo,哪怕只有Java版本呢。

    啊,被困扰两天了,终于解放了~~~

    2021-03-12
    有用 3
    回复 3
    • 徐涛
      徐涛
      2023-07-05
      上面五点都核对过,还是不行,请问一下,时间戳这个一签没有这个参数,是统一下单返回结果后,才加上的时间戳,然后再返回前台,这块有问题吗?
      2023-07-05
      回复
    • 千夜大人
      千夜大人
      2023-10-04
      有几点疑问,关于你说的第二点:统一下单的签名算法。jsapi我看文档根本没找到jsapi统一下单有什么签名算法,至于说第三点,jsapi下单根本不需要这个参数啊nonce_str
      2023-10-04
      回复
    • 与时尔
      与时尔
      2023-12-07
      nonceStr 是调起支付的参数
      2023-12-07
      回复
登录 后发表内容
问题标签