本來不打算寫的,好像是16年我也遇到了同樣的問題,然后在不知道哪里留了我的QQ缓苛,現(xiàn)在經(jīng)常有人加QQ問我,也收集了大家常犯的錯誤实胸,總結(jié)起來分享如下:
(在此也特別感謝那些解決問題并分享給我的網(wǎng)友)
一他嫡、簽名生成問題
? ? ? ? 這個原因主要是對微信文檔理解不深,加上支付寶庐完、銀聯(lián)等給出的DEMO及文檔比微信的傻瓜很多钢属,所以引發(fā)的錯誤,其中有一半都是這個問題门躯。
先看看微信官方的原話
設(shè)【所有 】 發(fā)送或者接收到的數(shù)據(jù)為集合M淆党,,使用URL鍵值對的格式(即key1=value1&key2=value2…)拼接成字符串stringA。
請注意我特意括起來的詞【所有】染乌,對的山孔,微信要的是所有參數(shù),而很多人就是傳遞了微信DEMO給的幾個參數(shù)或者漏掉了某一個參數(shù)荷憋,這個需要大家在寫代碼的時候細心排查台颠,而往往微信給的簽名驗證工具驗證的跟你本地生成的是一樣的,但是勒庄,發(fā)起請求后報參數(shù)錯誤串前,就是因為你生成簽名的參數(shù)跟你傳輸?shù)膮?shù)是不一致的,所以造成這個錯誤
二实蔽、參數(shù)排序問題????
? ? ? ? 也有很大一部分分沒有犯第一個錯誤荡碾,就說,我的參數(shù)都參與生成簽名了局装,為什么還是報簽名錯誤呢坛吁?
其實還是看別人的文檔原話
將集合M內(nèi)非空參數(shù)值的參數(shù)按照參數(shù)名ASCII碼從小到大排序(字典序)
需要所有 非空參數(shù)值的參數(shù)的參數(shù)名按照【ASCII碼從小到大排序】,很多人忽略了這一點就是copy改铐尚,從別的地方copy了類似參數(shù)拼接拨脉,然后直接用了,忘記了排序宣增,所以造成了簽名校驗的時候簽名錯誤女坑,至于不明白什么是ASCII碼從小到大排序的請自行 百度 || Google
三、參數(shù)校驗問題
????????相對于前兩個统舀,這個的人比較少,但是也占了相當一部分劳景,這個問題還是沒有仔細研讀別人的文檔誉简,比如下面的這個
交易金額默認為人民幣交易,接口中參數(shù)支付金額單位為【分】盟广,參數(shù)值不能帶小數(shù)闷串。對賬單中的交易金額單位為【元】。
外幣交易的支付金額精確到幣種的最小單位筋量,參數(shù)值不能帶小數(shù)點烹吵。
別人文檔上說了,我們只支持【分】不能【帶小數(shù)】桨武,有些人的庫表設(shè)計是decimal的肋拔,然而沒有檢查,直接拿來拼接了呀酸,結(jié)果造成了參數(shù)錯誤凉蜂,延后一直參數(shù)校驗錯誤,卻找不到原因是什么。所以請在出錯的時候仔細研讀別人文檔窿吩,并對照自己的參數(shù)
?????????以上總結(jié)都是我在這段時間遇到最多的關(guān)于微信開發(fā)的問題茎杂,還有很多可能沒有總結(jié)到的,希望大家能留言分享纫雁,寫的比較匆忙煌往,可能有漏洞,也希望大家多多批評指正轧邪。