1. 程式人生 > 其它 >記一次微信支付前端的bug: 商戶傳入的appid 引數不正確,請聯絡商戶處理

記一次微信支付前端的bug: 商戶傳入的appid 引數不正確,請聯絡商戶處理

源於一次分公眾號支付的需求:

專案預設有一個appidA用來強制授權,如果url上存在另一個appidB,則用appidB再次去靜默授權獲取使用者openid,這個openid是用來區分使用者在哪一個公眾號支付的

需求做好之後,去測試,發現支付的時候(就是前端呼叫微信jssdk支付api)微信報錯:商戶傳入的appid 引數不正確,請聯絡商戶處理

去官網查詢說可能兩個原因導致的:
1、統一下單介面中上傳的appid與調起微信客戶端進行支付的appid不一致
2、調起微信客戶端進行支付的必要引數prepayid有誤或者prepayid已經過期(有效期2小時)

首先經過前後端排查,排除了第二個原因,因為下發預訂單之後接著支付,肯定沒有過期,而且後端查日誌prepayid也是正確的木有問題
第一個原因先排查了前半部分 "統一下單介面中上傳的appid" 後端查日誌確認沒問題,然後下一句 "與調起微信客戶端進行支付的appid不一致", 我先想到的是前端呼叫微信支付的sdk:wx.chooseWXPay 但是傳給微信的引數裡面並沒有用到appid呀,並且後端生成預訂單也成功了,說明前端wx.chooseWXPay裡面傳給微信的引數也是沒問題的
最後檢查到一個地方,之前沒有想到 是因為這個地方如果有錯後面的支付就不會執行了,結果真是這個原因, 什麼原因呢,我們知道呼叫微信jssdk是需要後端生成一些校驗的引數的,前端通過config介面注入許可權驗證配置,這個地方前端需要傳入appid和這些引數,沒錯,就是這個appid的問題,我是用的是appidA,應該使用appidB,即統一下單介面中上傳的appid與調起微信客戶端進行支付的appid不一致,這個微信客戶端進行支付的appid指的不是呼叫前端呼叫微信支付sdk的appid,指的是前端初始化微信jssdk的appid!!

--------------------------分割線-------------------------------------
結論: 上面寫的可能只有本人能看懂----- 所以總結一下遇到這個報錯的排查方案吧:
1.前端檢查初始化微信jssdk的appid是否對應,以及是否可以正常初始化微信jssdk
2.前端檢查呼叫微信支付sdk傳參是否正確
2.後端檢查下單介面中上傳的appid是否對應
3.後端檢查prepayid是否有誤或者prepayid是否已經過期