收藏
回答

微信公众号h5支付,二次签名总提示支付验证签名失败。

统一下单正常返回了预支付id。进行二次签名。加密前的原文为:appId=wx0b****13&nonceStr=QxY****a&package=prepay_id=wx2117***00&signType=MD5&timeStamp=1587461482

返回给前端调起支付:

{ appId: 'wx****13',

  nonceStr: 'Q****z8a',

  package: 'prepay_id=wx2****00',

  signType: 'MD5',

  timeStamp: 1587461482,

  paySign: 'D9*****31DB' }

前端直接用返回json串调起支付:

window.WeixinJSBridge.invoke('getBrandWCPayRequest', wxJson, function(res){}

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

3 个回答

  • 微信支付技术助手8
    微信支付技术助手8
    2020-04-22

    一般这种报错,是你的调起支付时候的签名类型和之前统一下单的不一致造成的。仔细核对检查一下。

    2020-04-22
    有用
    回复 3
    • Fischer
      Fischer
      2020-04-22
      有没有这种可能,统一下单传的参数都是错的,也返回了预支付id,前端调起支付的时候再返回一个签名错误?
      2020-04-22
      回复
    • Fischer
      Fischer
      2020-04-22
      两次签名方式都是md5,这个是很容易确定的。不确定的有以下几点:
      1.统一下单spbill_create_ip是用发起http请求的服务器ip还是终端用户的ip,而且这个参数我统一下单的时候没有传也成功返回了预支付id。
      2.二次签名用的nonceStr既然只是为了让签名不容易破解,我直接用的统一下单返回的nonce_str。这会不会引起签名错误?也就是说贵方在调起支付的环节有没有判断这个nonce_str跟统一下单时传的是同一个。
      3.二次签名时,参与签名的参数:appId,nonceStr,package,signType,timeStamp。以键排序再拼接成以&连接的url参数字符串用做明文进行md5加密前,要不要在这个字符串后面拼上 '&key=' + MCH_KEY再进行md5加密。
      4.前端调起支付的时候可以直接将后端返回的json串直接作为参数发起支付吗?像这样:window.WeixinJSBridge.invoke(‘getBrandWCPayRequest’, wxJson, function(res){}
      2020-04-22
      回复
    • 雅
      2020-06-29回复Fischer
      我这边微信支付一直提示支付验证签名失败,我想问你一下,你的二次签名用的是 package?它的值是什么?能告诉一下吗
      2020-06-29
      回复
  • Fischer
    Fischer
    2020-04-22

    终于成功了。

    1.spbill_create_ip 一定要用终端用户的ip,不要用服务器ip;

    2.二次签名:官方文档给的5个参数appId,nonceStr,package,signType,timeStamp按key排序拼串后一定要再拼上商户平台的key。

    强烈建议微信官方文档再仔细一点,把细节标注一下。网上很多人趟雷,造成不必要的时间浪费。建议把大家普遍遇到的问题和最终的解决方案统一收集起来。修改官方文档,尽量明确细节。

    2020-04-22
    有用
    回复 4
    • wangyuancun
      wangyuancun
      2020-06-11
      能加个微信或者qq嘛,一直报这个二次签名有问题
      2020-06-11
      回复
    • 依依
      依依
      2020-09-11
      第二次签名例如qppId大小写问题已经更改,但是依旧报错支付签名错误,现在的问题是安卓手机可以正常吊起支付成功,苹果却依旧显示签名失败
      2020-09-11
      回复
    • 天天朝阳
      天天朝阳
      2020-11-04
      官方文档一如三年前一样的烂。写文档的也就高中水平。。。真是无语至极!!!!!!
      2020-11-04
      回复
    • 变化在高处
      变化在高处
      02-25
      请问是怎么解决的,我也是用的这个node库,统一下单成功,工具校验都是通过的。就是支付提示:支付验证签名错误
      02-25
      回复
  • Javen
    Javen
    2020-04-22

    二次签名的签名方式要与统一下单的签名方式保持一致,你检查一下这个

    2020-04-22
    有用
    回复 3
    • Fischer
      Fischer
      2020-04-22
      签名方式都是md5。只是有一点,统一下单我图省事用的wxpay-nodejs。链接地址:https://github.com/ynl/wxpay-nodejs,这个库里面也是用的md5。另外spbill_create_ip我用的服务端ip而不是请求支付的终端客户ip
      2020-04-22
      回复
    • Fischer
      Fischer
      2020-04-22
      据说统一下单接口只会验证签名。我在想虽然统一下单成功返回预支付id,但参数不一定是对的,前端发起支付的时候再给你来个签名错误
      2020-04-22
      回复
    • 。。。。。。
      。。。。。。
      2020-05-16回复Fischer
      请求支付的终端客户ip是啥,手机的ip吗,公众号内的一个h5使用的
      2020-05-16
      回复
登录 后发表内容
问题标签