p2227.github.io
p2227.github.io copied to clipboard
微信公众号支付开发:签名的那些事儿
本文写于2016.6.1儿童节 :-)
一般使用者如果第一次进入公众号并且进行一笔支付,公众号系统总共需要三次签名。其中有两次的签名需要前台Web知道结果。
- 第一次(告知前台)是wx.config签名。 这个签名需要当前url,并且是sha1算法 这个接口需要很多先决条件,慢慢看文档不会有问题 参考网址 https://mp.weixin.qq.com/wiki?action=doc&id=mp1421141115&t=0.026192156120719012&token=&lang=zh_CN#fl1
- 第二次(不需要告知前台)是服务端调用统一下单接口时的签名。 把所有非空参数排序后加上商户key,再MD5, 这个接口比较常见,其中的数据交换是服务端与平台的 参考 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
- 第三次(告知前台)是客户端再调用 js-sdk 提示用户输入支付凭证的. 这里面有两套前台js的API,一个是 wx.chooseWXPay, 一个是 WeixinJSBridge.invoke('getBrandWCPayRequest') 这里面前后台要统一一个方法调用,因为前者参数是timestamp,后者是timeStamp。所以签名肯定不一样 后台根据参数生成签名后,前台也要一致地调用它,才OK,不然会提示“支付验证签名失败”。本人用的是第二套方案 参考 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6
关于签名:这个是一个web安全的问题。由于签名中需要用到商户key(实质上是一个密钥)进行摘要算法,这就保证了请求的发起方一定是该商户,而不是其他人伪造的。
诶嘛。我已经被这个微信折腾了一晚上。遇到同样的坑了。微信jssdk两个接口参数大小写不一样。一直报支付验证签名失败。
诶嘛。我已经被这个微信折腾了一晚上。遇到同样的坑了。微信jssdk两个接口参数大小写不一样。一直报支付验证签名失败。
那这篇文章对您有帮助吗?
嗯,搞定了。 @p2227
这个坑了不少人啊
被这个大小坑了一下午,timestamp,后台返回的是大写,我却写成小写~这微信真心坑啊
有没有遇到过签名结果与微信的签名校验工具一致,但是微信支付还是提示签名失败的情况?
有没有遇到过签名结果与微信的签名校验工具一致,但是微信支付还是提示签名失败的情况? 折腾两天了... WeixinJSBridge.invoke( 'getBrandWCPayRequest' 接口始终报 签名失败....... 大小写检查、商户key修改 都试过了
微信支付那批人我已经骂了不止一两天了
微信支付 v3 版,出现了签名验证错误。需要注意的几点:1.html 中的 timestamp s 是小写,在后台中生成 paySign 加密字符串中的 timeStamp S是大写。 2. html 中的 ‘时间戳’ 随机字符串任意,跟后台获取 prepay_id 的参数没有任何关系。 3.html 中只需要后台收到的一个参数 prepay_id 需要加入 paySign 的加密字符串中。4.最重要要的一点 最重要的一点 paySign 还要拼接API密钥,这个密钥需要加入商户在商户平台上设置的 KEY !
我去,好多隐藏坑
前端是不是只需要写wx.config和WeixinJSBridge.invoke('getBrandWCPayRequest')方法,后台返回appid timestamp nonceStr package signType paySign。到那时用后台的这些数据 一直报支付签名验证失败
微信支付文档可能有毒,搞了一上午解决了。总结了一篇文章:https://www.jianshu.com/p/3ffa105b280e。
.net 环境下遇到 支付验证签名失败,并且使用 微信签名工具 校验无误的情况下,参考下 https://www.yesdotnet.com/archive/post/1626184818.html 所描述的问题