概述
前幾天,產品經理緊急打我電話,說後臺好些商品無法生成小程序碼了,這些商品小程序碼是需要緊急推到公衆號文章裏的,讓我趕緊解決。
我立馬登錄到後臺操作了一下,果然報錯了。但是由於報錯信息只是:“操作失敗”。啥都沒有,簡直醉了,只能用tail -f xxxx.log
命令,看看具體的報錯堆棧,發現是空指針錯誤,仔細看了一下代碼,當access_token
爲空的時候,會走入到一段特有的邏輯,但是這段代碼邏輯不嚴謹導致的這個錯誤。
這種情況下,得先知道爲啥access_token
獲取不到了,再次看了一下日誌,發現微信那邊提示:
reach max api daily quota limit hint
意思是說,超過限制了,google
了一把,有兩個解決方案:
- 登錄後微信公衆號後臺,進行手動清0;
- 直接調用微信的清零接口;
第一種辦法做不到,因爲針對小程序的,壓根就沒這個入口。只能用access_token超過限制文章提到的,手動調用:
https://api.weixin.qq.com/cgi-bin/clear_quota
要想訪問這個接口,需要兩個參數,第一個是有效的access_token
,第二個參數是app_id
,還好當時我們有緩存過access_token
,雖然當前獲取不到,但是可以試一下用之前還未失效的access_token
,至於app_id
,這個很好獲取的。
可以使用postman
進行調用。
調用完後,終於又可以生成小程序碼了。
追根問底
處理完這個問題後,仔細觀察了後臺日誌,發現有個定時任務,需要頻繁的直接調用微信接口獲取access_token
,會耗盡access_token
的。趕緊改動代碼,換成先從緩存讀取,獲取不到了,纔到微信那邊獲取。
小結
從處理問題的過程來看,業務系統打印日誌是非常重要的,像這種access_token
獲取不到的場景,一定要記錄日誌,把入參和出參都打印出來,方便定位問題。