記一次微信h5支付前端的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傳參是否正確
3.后端檢查下單接口中上傳的appid是否對應
4.后端檢查prepayid是否有誤或者prepayid是否已經過期
5.后面發現的一個bug,前端傳入的數據類型一定要和微信文檔上說的對應起來,否則會調用jssdk會報錯

--------------------------分割線-------------------------------------
一般h5支付流程:
1.調用后端接口“發起預訂單”,接口返回當前支付的appid,還有客戶端微信支付所需的簽名等信息
2.調用后端接口獲取前端jssdk驗簽參數,init sdk傳入appid的為1返回的appid
3.客戶端調用微信支付api,傳入1返回的簽名等信息
4.客戶端在支付成功回調中調用后端接口“查詢訂單”,獲取最終支付結果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM