微信支付-公眾號支付-choosewxpay:fail
是司機都要翻船的.
公眾號支付涉及微信平臺兩個大類的介面,要在客戶端最後調用出成功的微信支付介面真是一件不容易的事情.
JSAPI類介面:
1.wx.config
2.wx.chooseWXPay
支付類介面:
1.unifiedorder
2.notify
網上一堆的碼工朋友被騰訊坑得不要不要地.現在想總結一下.
1.後臺的配置一定要配置好:
1.1.公眾號平臺:配置好域名,IP白名單.
1.2.商戶平臺:授權目錄配置,API-Key.一定要配置準確.
比如:呼叫以上JSSDK的頁面地址為 http://.com/payaeixin/c.html
那麼測試授權目錄配置為 http://a.com/pay/weixin/,如果只是配置成 http://a.com/pay/將報以上錯誤.
1.3.手機微信端:微信程式需要擁有[懸浮窗許可權].
2.API的簽名一定要準確.引數數量,名稱,順序和加密演算法,金鑰都要準確.多使用簽名工具校驗一下.
2.1.引數的數量數一數就可以比較出來的.
2.2.引數的名稱就要跟緊API文件了.
最典型的一個錯誤是:
使用wx.chooseWXPay,需要後臺返回的引數列表中有timestamp,而後臺生成該引數的值後,要簽名,而簽名用的名稱是timeStamp.注意紅色字元s和S.加上中間程式碼中的名稱,那最起碼要4個類似的名稱了,一定要注意.
2.3.引數的順序,耐心檢查,或跟校驗工具對比一下.
2.4.加密演算法,我使用的是最新官方JAVA-SDK,預設使用的是HMACSHA256,而前臺JSAPI要使用的是MD5,而如果配置useSandBox,則會有一堆奇怪的URL出來,這個我沒空地追究了,想用一般的URL,又要用MD5,只能去改原始碼了.順便再吐槽一下神奇的IWXPayDomain介面.config.getWXPayDomain().getDomain(config)-->自己使用自己作為引數呼叫自己的方法.
2.5.加密金鑰,使用微信支付一定要使用商戶平臺的API-KEY,而不是公眾號上的APP-SECRET.
2.6校驗工具:
3.API的引數理解要準確:
統一下單介面中:
終端IP | spbill_create_ip | 是 | String(16) | 123.12.12.123 | APP和網頁支付提交使用者端ip,Native支付填呼叫微信支付API的機器IP。 |
這個IP指的是使用者端的IP.不是指伺服器的IP,也不是指代理IP(如果你使用代理IP).理論上這是一個公網的IP地址,微信可用於二次驗證,防止用一個IP請求下單,用另一個IP支付.
4.像騰訊鄙視安卓一樣鄙視騰訊.最好是可以先用iphone手機進行除錯,蘋果手機對錯誤的提示是很友好的,一下就能看出具體錯誤了.
如果以上4點看一遍都沒辦法幫忙解決問題,最好看多兩遍.還不行.我覺得最佳的選擇是仔細地重寫一次.