業務場景:
h5頁面生成二維碼,用戶使用微信掃描二維碼進行支付
代碼流程:
a.前端點擊支付調用後端下單接口 =>
b.下單接口生成訂單並返回訂單號 =>
c.下單接口裏面直接使用訂單號去調用自己業務的統一下單接口(本來應該是返回前端,下單成功前端再回調統一支付接口) =>
d.判斷是微信支付(我的所有支付都放一個接口,使用types區分支付類型),調起微信的統一下單 =>
e.調用成功之後(返回的 result.result_code !== 'FAIL')調用簽名方法,返回前端調起微信支付需要的參數
坑:
1、openid與商戶appid不匹配
我的解決方案:appid錯誤,更換商戶對應正確的appid
2、調用支付JSAPI缺少參數:total_fee
我的解決方案:AppID或者AppSecret不對,這個報錯比較坑,檢查一下訂單編號是不是重複或者沒有
3、最大的坑:::簽名錯誤問題
首先說說微信有兩個地方需要進行簽名生成(sign),
(1) 微信統一下單的時候 d (微信統一下單接口文檔)
統一下單的時候會根據傳入的參數進行sign生成,這個把所有參數按照文檔寫好就行,唯一要注意的中文編碼問題
(2) 調用統一下單之後給前端返回微信支付需要的參數的時候 e (微信內H5調起支付)
在這裏也會調用你傳入的參數進行sign生成,,但是一定一定一定要注意,,這裏的參數是大小寫和參數寫入的順序都是固定的,一定要嚴格的看着這些參數從傳入到json對象轉爲字符串連接之後大小寫都是按照文檔來的(我的坑就在這裏,轉成字符串的時候把大寫都變爲了小寫,導致最後生成的sign錯誤,這裏有微信支付接口簽名校驗工具可以使用。如果這裏面生成的sign和程序生成的不一樣,那就去檢查一下大小寫和參數順序)
這裏提供一個解決方案比較詳細鏈接進行參考: