微信支付报错“支付签名验证失败”

微信支付有几个地方需要注意的

  • sign 签名时需要在末尾增加key参数 key 参数在商户后台进行设置 sign签名验证
  • wx.config 签名验证工具url 参数必须是当前js运行所在的url(包括参数) 如果签名失败可能跟支付的授权目录有关
  • 微信创建统一订单时返回的数据格式中只有prepay_id参数有用,其他返回的参数无用
  • wx.chooseWXpay 在调起微信支付时需要二次签名(sign签名),其中有个地方需要注意(巨坑)。具体二次签名如下
       
       
    1. $appid = 'appid'; //appid
    2. $randstr = '123123213213'; //随机字符串
    3. $time = '123456789'; //时间戳
    4. $key = 'keyyyyyyyy'; //商户后台设置的key
    5. $prepayid = 'wx2017060115493564b5a926a10145685802';//假设统一订单返回的prepayid
    6. $prepayid = 'prepay_id='.$prepayid;//这里要组装(我是坑)
    7. $signstr = "appId={$appid}&nonceStr={$randstr}&package={$prepayid}&signType=MD5&timeStamp={$time}&key={$key}";
    8. //生成需要签名的字符串为
    9. //appId=appid&nonceStr=123123213213&package=prepay_id=wx2017060115493564b5a926a10145685802&signType=MD5&timeStamp=123456789&key=keyyyyyyyy";
    10. $paysign = strtoupper(md5($signstr));
    11. //data 为返回为前台数据
    12. $data = [
    13. 'nonceStr' => $randstr,
    14. 'timestamp' => $time,
    15. 'signType' => 'MD5',
    16. 'paySign' => $paysign,
    17. 'package' => $prepayid,
    18. ];
      • wx.chooseWXpay 中有个参数timestamp 不是timeStamp 需要签名的时间戳都是timeStamp js里的都是小写的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值