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

关于微信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) {//无效

					//走线程重新获取accessToken
					accessToken = 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值