今天上午客戶提出問題,看了一下報錯截圖,應該是我更新版本時少傳了一個參數,導致后續報錯,
心里想着小問題,直接生產環境添加一下就行了,於是就為了我這一上午的悲劇埋下了伏筆
十分自信的把頁面中的代碼添加了以后,直接登錄客戶系統,測試一筆交易
非常意外的,突然報錯了,報錯頁面提示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重復的原因有很多,如果你是正常穩定的系統突然發現的,請把程序中回調的頁面直接拉起看看,是不是報錯了