1. 程式人生 > >微信開發中遇到的access_token坑 ,access_token失效和重新整理

微信開發中遇到的access_token坑 ,access_token失效和重新整理

這真是一個巨大的坑,為了避免以後踩到同樣的坑和幫助剛接觸這塊的同學快速脫坑,我花了些時間研究問題的來龍去脈,提供了一個不太完美的解決方案,以及未來規劃的完美解決方案。

問題現象

在開發微信jssdk的影象介面功能時,測試環境和迴歸環境都ok。但是更新到預釋出環境後,功能就異常了,一直報圖片下載失敗。最後快到釋出時間時,功能又恢復正常了。於是按照常規流程進行了釋出。過了兩天,收到線上反饋的問題:使用者剛開始還能正常傳圖,用著用著就突然報錯說傳圖失敗,然後就一直不能用了。我們在測試環境模擬測試,功能又是正常的:(

查詢原因

這種偶現的問題一般都很難迅速定位到具體原因,而且本地和測試環境正常,預釋出環境和線上異常,但是又不能進行除錯。於是只能根據程式碼邏輯進行猜測性判斷和嘗試修復,中間走了大量的彎路,最後發現,刪除儲存access_token的redis值,再使用時功能正常。

技術分析

問題暫時解決了,但這不是長久之計。於是我花了點時間閱讀官方文件,發現這果真是個大坑啊!官方文件原文如下:


第一個紅色框裡的內容,我測試了三次,第一次連續請求13遍,access_token發生了變化;第二次連續請求12遍,access_token發生了變化;第三次連續請求19遍,access_token發生了變化。(坑一)

第二個紅色框裡的內容,我們有開發環境,測試環境,迴歸環境,預釋出環境,正式環境,都是同一套程式碼,同一個微訊號,相當於每個環境都是單獨的中控伺服器。(坑二)

現場還原

搞清楚問題後,我們通過一些手段嘗試性的觸發問題現象:

1、測試環境下,清空access_token的redis資料。

2、正常測試,功能ok,檢視access_token的redis內容,這裡假設值為A。

3、手動呼叫介面重新整理access_token,大概十幾次後,值變化為B。

4、再次正常測試,發現功能異常(因為此時儲存在redis的access_token已經過期)。

5、清空access_token的redis資料,再次測試,功能又恢復正常。

現在問題終於變成必現的了:)

解決方案

現在我們搞清楚問題的原因是儲存在redis的access_token可能在很短的時間內過期(因為有太多中控伺服器啦),但是我們一般設定的有效期都接近或等於7200s,這就導致一旦出現問題的話,如果不清理redis,問題就會持續2小時左右,這簡直就是災難!

目前想到的比較理想的解決方案就是:伺服器發現功能異常時,重新整理access_token並更新redis,然後再次呼叫介面。這種容錯機制本來是微信的事-_-!

未來規劃

正如開頭所說,這的確是個巨坑,未來只能期望微信獲取access_token的介面能夠完善:

1、說好的2小時過期時間,就得保證2小時內不過期

2、返回的過期時間欄位為還剩多少秒過期,而不是每次都返回7200s

然而微信並沒有

相關推薦

開發遇到的access_token ,access_token失效重新整理

這真是一個巨大的坑,為了避免以後踩到同樣的坑和幫助剛接觸這塊的同學快速脫坑,我花了些時間研究問題的來龍去脈,提供了一個不太完美的解決方案,以及未來規劃的完美解決方案。問題現象在開發微信jssdk的影象介面功能時,測試環境和迴歸環境都ok。但是更新到預釋出環境後,功能就異常了,

開發網頁授權access_token與基礎支持的access_token異同

amp api ken 獲取 use 有效期 公眾號 分享 什麽 問題1:網頁授權access_token與分享的jssdk中的access_token一樣嗎?答:不一樣。網頁授權access_token 是一次性的,而基礎支持的access_token的是有時間限制的:7

開發access_token,js_ticket,時間戳,簽名生成工具

移動開發 微信開發 1. Access_token生成工具工具地址:https://mp.weixin.qq.com/debug這個工具主要用來驗證和生成微信公眾號access_token,主要有正確的app_id和app_secret就可以生成access_token,界面比較簡單,如下圖:其實這個

開發踩過的

1、spa單頁模式不適合微信開發         所有需要使用JS-SDK的頁面必須先注入配置資訊,否則將無法呼叫(同一個url僅需呼叫一次,對於變化url的SPA的web app可在每次url變化時進行呼叫,目前Android微信客戶端不支援pushState的H5新特性

開發的一些神

code AS valid pro 開發 也不會 但是 菜單 book 微信自定義菜單接口權限問題 最近在開發一個微信第三方平臺,在開發自定義菜單接口的時候遇到一個坑。發送的json數據明明是正確的,因為已經與官方文檔的示例一一對比過了。但是依舊返回40119錯誤,意思是b

PHP實現開發提現功能(企業付款到使用者零錢)

一.實現該功能目的     這幾天在小程式裡要實現使用者從系統中提現到零錢的功能,查了一下文件可以使用 企業付款到使用者零錢 來實現;  官方文件:https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapt

企業開發建立人員失敗 no privilege to...

最近在企業微信開發過程中 建立人員時發現 no privilege to access/modify contact/party/agent 失敗 , 原因是沒有通訊錄編輯許可權. 操作如下: 在管理工具—進入通訊錄同步 在許可權裡 點選編輯裡選編輯通

開發引起的跨域問題

什麼是跨域請求 跨域是瀏覽器的一個同源策略的問題而衍生的需求,跨域請求是指伺服器A的頁面去請求伺服器B的資源,而伺服器A.B之間只要域名、埠號、IP不同都屬於跨域 而瀏覽器沒有對SCRIPT,IMG等包含SRC屬性的標籤做同源策略的限制,因此有了一個JSONP的非

Java公眾平臺開發(六)--開發的token獲取

轉自:http://www.cuiyongzhi.com/post/44.html (一)token的介紹 引用:access_token是公眾號的全域性唯一票據,公眾號呼叫各介面時都需使用access_token。開發者需要進行妥善儲存。access_token的儲存至少要保留512個字元空間。acce

開發訪問介面限制次數的問題

最近在做的一個專案,微信開發過程中遇到了一個問題 專案描述:微信公眾號中玩遊戲送紅包,分享給自己的好友,可以額外贏取一次機會 問題:最開始寫程式時沒有考慮到微信介面的一個限制,就是單日微信公眾號獲得分享token的驗籤次數是2000次,而我為了保持session的長連線

開發form表單提交引數為空

今天在做微信公眾號開發時,發現有一個form表單的資料傳到後臺總是空,使用pc端的chrome除錯卻可以將引數傳到後臺,最後懷疑是微信瀏覽器的問題。上網找答案,果然大家都在吐槽這個坑。出現問題的程式碼片

Java公眾平臺開發(六)——開發的token獲取

(一)token的介紹 引用:access_token是公眾號的全域性唯一票據,公眾號呼叫各介面時都需使用access_token。開發者需要進行妥善儲存。access_token的儲存至少要保留512個字元空間。access_token的有效期目前為2個小時,需定時重新整理,重複獲取將導致

開發使用curl忽略https證書

http://blog.csdn.net/ljh504429906/article/details/51103519 微信開發中需要使用http及https的post與get請求實現api的呼叫。 每次要使用curl的時候,總要查一堆資料。   現在將常用的幾句儲存下

開發使用JSSDK使用URL.createObjectURL上傳預覽圖片的不同處理對比

在做微信公眾號或者企業微信開發業務應用的時候,我們常常會涉及到圖片預覽、上傳等的處理,往往業務需求不止一張圖片,因此相對來說,需要考慮的全面一些,使用者還需要對圖片進行預覽和相應的處理,在開始的時候我使用JSSDK方式,使用微信的SDK介面進行圖片的上傳、預覽操作,後來發現通過URL.createObject

開發使用通用函式處理,以重定向的方式實現使用者身份資訊的獲取並轉回原來頁面

在開發微信應用的時候,我們往往需要確認使用者的身份,一般公眾號唯一區別使用者的身份是openid資訊,但是這個資訊並不是可以直接獲取到,需要通過code進行獲取,而code的獲取則需要使用者進行一個授權的處理才能獲得,本篇隨筆通過結合Session的方式,自動判斷使用者狀態,如果使用者首次訪問頁面,則以重定向

java 開發 常用工具類(xml傳輸解析 json轉換物件)

與微信通訊常用工具(xml傳輸和解析) package com.lownsun.wechatOauth.utl; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; impo

瀏覽器做分享到朋友圈分享到好友

最近一直看到有關做微信朋友圈分享的,下面我也總結一份: 如何在微信公眾平臺前端網頁上新增分享到朋友圈,關注微訊號等按鈕: 在微信內嵌瀏覽器定義了一個私有 JavaScript 物件:WeixinJSB

開發 access_token 數量限制問題

微信對access_token的請求有數量限制, 如果使用者量特別多的話, access_token  可能會不夠用 兩種方案:     1.  access_token 加入快取並設定2小時的失效時間,每次從快取中取,如果失效再繼續生成 access_token,

公眾號H5(vue)開發遇到的

首先引入微信js......等等就不說了 看文件就好了 wx.config({ debug: true, // appId: response.result.appId, // 必填,公眾號的唯一標識 timestamp: response.result.tim

開發事件---未來元素點選事件

相信不少人在微信裡開發過網頁,在非a/button標籤時,頁面沒重新整理生成的新元素我們一般都用$(document).unbind('click',".preview_imag").on('click',".preview_imag",function(){