转自:https://blog.csdn.net/qq_37552042/article/details/81084008
第1个坑:微信支付的api密钥(签名需要的key参数)
商户中心(https://pay.weixin.qq.com/index.php/extend/employee) – API安全 – API密钥
API密钥是不能查询,只能更新。我直接从公众号的微信支付代码中复制过来的(WxPay.Config.php中的KEY值)。
后来支付开发遇到坑,曾怀疑是API密钥(key参数)不对,就用原密码直接修改了一次,不影响原来的公众号支付系统。
第2个坑:小程序开发文档内没有提供直接可用的demo源码
我是从网上找了一份别人开发用的,小程序源码还是没,自己写了一份
用微信支付的标准demo一样可用的。https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1
只要是里面要有统一下单的源码就可以。一开始没在微信公众号原有的代码里直接添加呢,因为小程序的appid是不一样的,实际上微信支付同一套源码同时开发微信公众号和小程序的支付都没问题。
第3个坑:开发流程(最大的坑)–小程序支付需要使用再次签名
小程序支付接口文档;
https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=3
这么多前期开发者都抱怨微信开发文档不够明了,才容易引起各种坑。的确如此,不仔细看,就得一步一步踩过去。
统一下单没出现什么坑,因为返回的错误比较明白,容易解决。
统一下单后返回prepay_id后要调用小程序支付函数,有最重要的一步,是需要再次签名的,用统一下单返回的sign(签名)是没有用的。在开发文档里,业务流程图里是有说明的,而下方列出再次签名()的api
第4个坑:签名的参数名是区分大小写的,也就是说必须每个参数名都尽量复制。我就是把timeStamp写成了timestamp,即使从log复制出来没用区分大小写查询都没找出这个坑。
第3和第4个坑都会报微信支付支付验证签名失败的错,而且原因也不解释,所以特别让人找不到解决的捷径。
最理想的是利用下方
签名加密工具地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=20_1
把再次签名()代码里生成的加密前字符串(比如php用error_log显示出来后,复制出来)和工具里提供的字符串进行对比,而且一定要作用区分大小写来进行对比。因为每一个订单都可以保持2个小时,所以可以把两次签名()里的参数全写死(跟工具里填一样的),通过验证签名成功后就好找原因了。
请发表评论