您的位置:首页 > 移动开发 > 微信开发

微信开发定时刷新accessToken

2015-07-01 11:46 627 查看
根据appid和appsecret可以调用接口得到通用的accessToken,有效时间是2个小时,重复调用接口上次的值将失效,每次业务逻辑都调用接口会造成服务不稳定,所以需要一个方法每隔两个小时自动刷新accessToken。可以定义一个全局的map实现缓存,时间到了自动清除缓存中的数据

/**
* 获取AccessToken并缓存
*/
public static String getAccessToken(String appid, String appsecret) {
String accessToken = "";
AccessToken token = new AccessToken();

if (HashMapUtil.tokenMap.size() > 0) {
token = HashMapUtil.tokenMap.get("access_token");
// 当前时间
Calendar nowTime = Calendar.getInstance();
nowTime.setTime(new Date());
// 通用接口凭证申请时间加过期时间
// 特殊处理:过期时间减60秒
Calendar applyTime = Calendar.getInstance();
applyTime.setTime(token.getApplyTime());
applyTime.add(Calendar.SECOND, token.getExpiresIn() - 60);
// 比较时间
if (nowTime.compareTo(applyTime) >= 0) {
// Token失效,删除内存中的数据
HashMapUtil.tokenMap.remove("access_token");
token=getAccessTokenFromWX(appid,appsecret);
token.setApplyTime(new Date());
HashMapUtil.tokenMap.put("access_token",token);
accessToken = token.getToken();
} else {
// Token有效
accessToken = token.getToken();
}
}else{
token=getAccessTokenFromWX(appid,appsecret);
token.setApplyTime(new Date());
HashMapUtil.tokenMap.put("access_token",token);
accessToken = token.getToken();
}

return accessToken;
}
/**
* 微信服务器获取access_Token
*/
public static AccessToken getAccessTokenFromWX(String appid, String appsecret) {
AccessToken accessToken=null;
String requestUrl = WechatInterfacesUrl.ACCESS_TOKEN_URL.replace("APPID", appid).replace("APPSECRET", appsecret);
JSONObject jsonObject = HttpUtils.httpsRequest(requestUrl, "GET", null);
// 如果请求成功
if (null != jsonObject) {
try {
accessToken = new AccessToken();
accessToken.setToken(jsonObject.getString("access_token"));
accessToken.setExpiresIn(jsonObject.getInt("expires_in"));
} catch (JSONException e) {
accessToken = null;
// 获取token失败
log.error("获取access_token失败 errcode:" + jsonObject.getInt("errcode") + ",errmsg:" + jsonObject.getString("errmsg"));
}
}
return accessToken;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: