今天上午客戶提出問題,看了一下報錯截圖,應該是我更新版本時少傳了一個參數,導致後續報錯, 心裡想著小問題,直接生產環境添加一下就行了,於是就為了我這一上午的悲劇埋下了伏筆 十分自信的把頁面中的代碼添加了以後,直接登錄客戶系統,測試一筆交易 非常意外的,突然報錯了,報錯頁面提示openid獲取失敗,第 ...
今天上午客戶提出問題,看了一下報錯截圖,應該是我更新版本時少傳了一個參數,導致後續報錯,
心裡想著小問題,直接生產環境添加一下就行了,於是就為了我這一上午的悲劇埋下了伏筆
十分自信的把頁面中的代碼添加了以後,直接登錄客戶系統,測試一筆交易
非常意外的,突然報錯了,報錯頁面提示openid獲取失敗,第一時間反應是否是客戶修改了公眾號的設置,
排查過以後客戶說並沒有,這就奇怪了,明明之前穩定運行的系統為什麼突然報錯了
直接在伺服器列印微信獲取openid的返回值
發現是errcode = 40163; errmsg = "code been used",一頭霧水????
百度後發現好多遇到這種問題的,基本核心思路都是由於回調的code重覆使用導致的,可是我這確實沒有重覆使用啊
各種打斷點LOG發現確實函數被調用了多次,這就奇怪了,難道是微信出問題了?? 自己的水平肯定不如騰訊的啊
於是開始了我漫長的排查之路,緩存code ,寫入文件,寫判斷函數,能想到都嘗試了,就是不行,都想恢覆上一版本代碼了
這時候突然發現一個兄弟寫的文章,他說他設置斷點後,由於程式未即使回覆,導致微信的回調地址回調兩次
這突然提醒了我,難道是因為頁面訪問過慢麽? 找到之前寫的測試用例一跑,發現問題了
原來是拉起支付的頁面報錯了,就是最開始我十分自信更新的代碼,拉起頁面報錯後,回導致微信的回調code不成功,微信就會多次回調,
多次回調後code重覆提交,就會導致errcode = 40163; errmsg = "code been used"
劃重點:errcode = 40163; errmsg = "code been used",這個錯誤原因是code重覆導致,導致code重覆的原因有很多,如果你是正常穩定的系統突然發現的,請把程式中回調的頁面直接拉起看看,是不是報錯了