微信开发定时刷新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; }
相关文章推荐
- C#的Xamarin开发小米盒子应用并以WCF实现微信通知
- 微信开发 java
- Xcode6集成微信SDK过程出错解决办法
- 微信背后的人性观
- iOS第三方支付-微信支付
- 微信java开发(nat123配制本地环境)
- inux关于readlink函数获取运行路径的小程序
- inux关于readlink函数获取运行路径的小程序
- 微信浏览器轮播图的使用经验
- 微信开放平台之公众号第三方平台开发及全网发布验证
- Android;Share SDK微信分享中遇到的问题以及解决方法
- 微信jssdk已无力吐槽
- 高仿微信实现左滑显示删除按钮功能
- 高仿微信本地图片选择器
- 微信公众号一键关注解决办法
- 微信支付(0923更新)商户支付密钥key的生成与设置
- 在iPhone4的微信,切换效果时背景会闪一下
- 微信业务处理:职责链模式
- css3模拟微信摇一摇
- 微信连WiFi关注公众号流程更新 解决ios微信扫描二维码不关注就能上网的问题