微信公众平台开发历程(五)

来源:互联网 发布:apache ant 1.7.1 编辑:程序博客网 时间:2024/06/01 09:07

关于微信accesstoken的有效时间问题


虽然微信官方给的说法是微信accesstoken的有效时间是2小时,重新获取之后原来的accesstoken的有效时间是5分钟,但是最近发现,accesstoken真正的有效时间不是2小时,看了论坛上大家的讨论发现accesstoken的有效时间不定,有的说2小时有用,有的是10分钟就失效了,但是前提是你的accesstoken没有被刷新。


经过查询和讨论,找出了一个方案,就是我们在定时获取accesstoken那边修改,将两小时修改成5分钟校验一次accesstoken的有效性,找到了一个获取用户信息的接口,每天上限50000w次,每五分钟调一次即可。


原来的方法请查看之前的开发历程


private static Logger log = LoggerFactory.getLogger(TokenThread.class);public static String appid = "appid";public static String appsecret = "appserect";public static AccessToken accessToken = null;public static String jsapi_ticket = null;public void run() {accessToken = WeixinUtil.getAccessToken(appid, appsecret);jsapi_ticket = WeixinUtil.getJSAPI(accessToken.getToken());while (true) {try {//判断accessToken是否有效Boolean Check = WeixinUtil.CheckAccessToken(accessToken.getToken(), "一个有效的用户的openId");log.info("判断accessToken是否有效:" + Check);if (!Check) {//无效//走线程重新获取accessTokenaccessToken = WeixinUtil.getAccessToken(appid, appsecret);jsapi_ticket = WeixinUtil.getJSAPI(accessToken.getToken());log.info("重新获取access_token成功,有效时长{}秒 token:{}", accessToken.getExpiresIn(), accessToken.getToken());log.info("重新获取jsapi_ticket成功,有效时长{}秒 jsapi_ticket:{}", accessToken.getExpiresIn(), jsapi_ticket);//重新获取后睡眠线程5分钟Thread.sleep(5 * 60 * 1000);} else {//有效,睡眠线程5分钟log.info("有效获取access_token成功,有效时长{}秒 token:{}", accessToken.getExpiresIn(), accessToken.getToken());log.info("有效获取jsapi_ticket成功,有效时长{}秒 jsapi_ticket:{}", accessToken.getExpiresIn(), jsapi_ticket);Thread.sleep(5 * 60 * 1000);}} catch (InterruptedException e) {try {Thread.sleep(60 * 1000);//睡眠1分钟} catch (InterruptedException e1) {log.error("{}", e1);}log.error("{}", e);}}}

我的校验方法比较傻,直接判断返回字符串有没有错误标识

/**校验accessToken是否有效的接口**/public static boolean CheckAccessToken(String access_token, String openId) {boolean result = false;String url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=" + access_token + "&openid=" + openId + "&lang=zh_CN";JSONObject jsonObject = httpRequest(url, "GET", null);if (null != jsonObject) {String json = jsonObject.toString();log.info("json:" + json);if (json.indexOf("errcode") > -1) {result = false;log.info("accessToken失效");} else {result = true;log.info("accessToken有效");}}return result;}



阅读全文
0 0
原创粉丝点击