标签:
根据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 }
标签:
原文地址:http://www.cnblogs.com/wsxj99/p/4612862.html