微信開發筆記之快取access_token
阿新 • • 發佈:2019-02-03
官方解釋:access_token是公眾號的全域性唯一票據,公眾號呼叫各介面時都需使用access_token。開發者需要進行妥善儲存。access_token的儲存至少要保留512個字元空間。access_token的有效期目前為2個小時,需定時重新整理,重複獲取將導致上次獲取的access_token失效。
使用redis快取access_token、定時任務採用spring quartz。
邏輯見程式碼
更新access_token程式碼
/**
*
* @Title: updateAccessToken
* @Description: 供 定時任務更新 AccessToken,同時更新 JsAPITicket
* @return
* @throws
* @author
*/
public synchronized boolean updateAccessToken() throws Exception{
boolean updateRes = Boolean.FALSE;
try {
for (int i = 0; i < WeiXinConstants.WEIXIN_CACHE_RETRY; i++) {
String accessTokenFromWeixin = getAccessTokenFromWeiXin();
String jsApiTicketFromWeiXin = this .getJsApiTicketFromWeiXin(accessTokenFromWeixin);
//放入快取 cacheManager.set(WeiXinConstants.WEIXIN_CACHE_KEY_ACCESS_TOKEN, accessTokenFromWeixin);
cacheManager.set(WeiXinConstants.WEIXIN_CACHE_KEY_JS_API_TICKET, jsApiTicketFromWeiXin);
updateRes = Boolean.TRUE;
if (updateRes){
break;
}
}
} catch (Exception e) {
logger.error("定時任務更新 微信 端 access token 和 js api ticket 異常:",e);
throw e;
}
return updateRes;
}
從快取中獲取access_token
/**
* @Title: getAccessToken
* @Description: 獲取 微信 AccessToken
* @return
* @throws
* @author
*/
public String getAccessToken() throws Exception{
String accessToken = "";
try {
accessToken = cacheManager.getString(WeiXinConstants.WEIXIN_CACHE_KEY_ACCESS_TOKEN);
if(StringUtils.isBlank(accessToken)){
this.updateAccessToken();
accessToken = cacheManager.getString(WeiXinConstants.WEIXIN_CACHE_KEY_ACCESS_TOKEN);
}
} catch (Exception e) {
logger.error(" 獲取 微信 AccessToken 異常:",e);
throw e;
}
return accessToken;
}
Spring quartz 的頻率剛開始定為1小時一次,後代碼中出現access_token 超時現象,最後檢查程式碼未發現其他地方直接去微信伺服器拿token的【因為只有從微信伺服器端拿過後,快取中token就會失效】,後又把定時頻率調整為半小時一次,24X2=48,每天才48次,未出現access_token超時現象。。。。