本来不打算写的,好像是16年我也遇到了同样的问题,然后在不知道哪里留了我的QQ,现在经常有人加QQ问我,也收集了大家常犯的错误,总结起来分享如下:
(在此也特别感谢那些解决问题并分享给我的网友)
一、签名生成问题
这个原因主要是对微信文档理解不深,加上支付宝、银联等给出的DEMO及文档比微信的傻瓜很多,所以引发的错误,其中有一半都是这个问题。
先看看微信官方的原话
设【所有 】 发送或者接收到的数据为集合M,,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。
请注意我特意括起来的词【所有】,对的,微信要的是所有参数,而很多人就是传递了微信DEMO给的几个参数或者漏掉了某一个参数,这个需要大家在写代码的时候细心排查,而往往微信给的签名验证工具验证的跟你本地生成的是一样的,但是,发起请求后报参数错误,就是因为你生成签名的参数跟你传输的参数是不一致的,所以造成这个错误
二、参数排序问题
也有很大一部分分没有犯第一个错误,就说,我的参数都参与生成签名了,为什么还是报签名错误呢?
其实还是看别人的文档原话
将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序)
需要所有 非空参数值的参数的参数名按照【ASCII码从小到大排序】,很多人忽略了这一点就是copy改,从别的地方copy了类似参数拼接,然后直接用了,忘记了排序,所以造成了签名校验的时候签名错误,至于不明白什么是ASCII码从小到大排序的请自行 百度 || Google
三、参数校验问题
相对于前两个,这个的人比较少,但是也占了相当一部分,这个问题还是没有仔细研读别人的文档,比如下面的这个
交易金额默认为人民币交易,接口中参数支付金额单位为【分】,参数值不能带小数。对账单中的交易金额单位为【元】。
外币交易的支付金额精确到币种的最小单位,参数值不能带小数点。
别人文档上说了,我们只支持【分】不能【带小数】,有些人的库表设计是decimal的,然而没有检查,直接拿来拼接了,结果造成了参数错误,延后一直参数校验错误,却找不到原因是什么。所以请在出错的时候仔细研读别人文档,并对照自己的参数
以上总结都是我在这段时间遇到最多的关于微信开发的问题,还有很多可能没有总结到的,希望大家能留言分享,写的比较匆忙,可能有漏洞,也希望大家多多批评指正。
网友评论