這個(gè)問題是微信開發(fā)常見問題之一,根據(jù)報(bào)錯(cuò)信息查詢是access_token失效了。
根據(jù)微信官方文檔:access_token的有效期是7200s,且一天獲取access_token不得超過10000次。
列舉各種情況下可能導(dǎo)致的失效:
1.本地緩存access_token:在開發(fā)環(huán)境下,多人同時(shí)開發(fā)且程序員各自啟動(dòng)自己應(yīng)用服務(wù),就會(huì)彼此導(dǎo)致失效;在生產(chǎn)環(huán)境下,采用分布式部署應(yīng)用服務(wù),也會(huì)導(dǎo)致各自失效。
2.集中式緩存(如redis)access_token,理論上該種緩存下應(yīng)該沒問題,但由于環(huán)境或使用問題會(huì)有以下集中情況導(dǎo)致失效發(fā)生:
2.1 開發(fā)環(huán)境、測(cè)試環(huán)境、生產(chǎn)環(huán)境各自集中式緩存服務(wù)器均是獨(dú)立的,針對(duì)同一個(gè)APPID取access_token就會(huì)相互導(dǎo)致失效。
2.2 多個(gè)團(tuán)隊(duì)開發(fā)多個(gè)項(xiàng)目,用到都是同一個(gè)APPID,各自的集中式緩存是獨(dú)立的,會(huì)導(dǎo)致access_token失效
2.3 批量發(fā)模板消息(類似耗時(shí)長(zhǎng)的批量處理任務(wù)同樣),采用先取access_token,再逐一發(fā)送,由于執(zhí)行時(shí)間較長(zhǎng),后期發(fā)送的可能是access_token真正過期了導(dǎo)致。正確姿勢(shì)應(yīng)該是從緩存去一次發(fā)一條。
2.4 微信內(nèi)部原因?qū)е挛吹狡诰褪А?/p>
在本項(xiàng)目中多數(shù)情況是在多個(gè)環(huán)境中使用的是同一個(gè)公眾號(hào),這種情況下需要把各個(gè)環(huán)境分開,其次將項(xiàng)目停止,清除redis在重啟項(xiàng)目