微信開發定時刷新accessToken


根據appid和appsecret可以調用接口得到通用的accessToken,有效時間是2個小時,重復調用接口上次的值將失效,每次業務邏輯都調用接口會造成服務不穩定,所以需要一個方法每隔兩個小時自動刷新accessToken。可以定義一個全局的map實現緩存,時間到了自動清除緩存中的數據

 1  /**
 2      * 獲取AccessToken並緩存
 3      */
 4     public static String getAccessToken(String appid, String appsecret) {
 5         String accessToken = "";
 6         AccessToken token = new AccessToken();
 7 
 8         if (HashMapUtil.tokenMap.size() > 0) {
 9             token = HashMapUtil.tokenMap.get("access_token");
10                 // 當前時間
11                 Calendar nowTime = Calendar.getInstance();
12                 nowTime.setTime(new Date());
13                 // 通用接口憑證申請時間加過期時間
14                 // 特殊處理:過期時間減60秒
15                 Calendar applyTime = Calendar.getInstance();
16                 applyTime.setTime(token.getApplyTime());
17                 applyTime.add(Calendar.SECOND, token.getExpiresIn() - 60);
18                 // 比較時間
19                 if (nowTime.compareTo(applyTime) >= 0) {
20                     // Token失效,刪除內存中的數據
21                     HashMapUtil.tokenMap.remove("access_token");
22                     token=getAccessTokenFromWX(appid,appsecret);
23                     token.setApplyTime(new Date());
24                     HashMapUtil.tokenMap.put("access_token",token);
25                     accessToken = token.getToken();
26                 } else {
27                     // Token有效
28                     accessToken = token.getToken();
29                 }
30             }else{
31                 token=getAccessTokenFromWX(appid,appsecret);
32                 token.setApplyTime(new Date());
33                 HashMapUtil.tokenMap.put("access_token",token);
34                 accessToken = token.getToken();
35             }
36         
37      return accessToken;  
38     }
39     /**
40      * 微信服務器獲取access_Token
41      */
42     public static AccessToken getAccessTokenFromWX(String appid, String appsecret) {
43         AccessToken accessToken=null;
44         String requestUrl = WechatInterfacesUrl.ACCESS_TOKEN_URL.replace("APPID", appid).replace("APPSECRET", appsecret);
45         JSONObject jsonObject = HttpUtils.httpsRequest(requestUrl, "GET", null);
46         // 如果請求成功
47         if (null != jsonObject) {
48             try {
49                 accessToken = new AccessToken();
50                 accessToken.setToken(jsonObject.getString("access_token"));
51                 accessToken.setExpiresIn(jsonObject.getInt("expires_in"));
52             } catch (JSONException e) {
53                 accessToken = null;
54                 // 獲取token失敗
55                 log.error("獲取access_token失敗 errcode:" + jsonObject.getInt("errcode") + ",errmsg:" + jsonObject.getString("errmsg"));
56             }
57         }
58         return accessToken;
59     }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM