微信开发之access_token之坑
来源:互联网 发布:java的tensorflow 编辑:程序博客网 时间:2024/04/30 00:00
首先不得不提到access_token的分类,一是普通access_token,二是网页授权access_token。其中前者是用于调用微信提供的各种借口,作为开发者的调用凭证,一般有效期为7200S,获取次数受限;另一种是第三方网页若需要使用用户微信账户登录,需要获取该access_token从而来获取用户微信账户信息。这个一定得区分开。
另外获取用户微信账户信息也有两种情况,一是普通的获取用户信息,它只需要调用微信用户信息接口即可获取,因而使用到的是第一种普通access_token,另一种就是上面提到的网页授权时获取用户信息。一旦二者概念混淆,则会报出invalid access_token错误。
对于第一种普通access_token,需要注意到的是,它是全局性的,就是一旦获取到了新的access_token,原有的access_token就会失效,而无法调用相关接口。而这种特性,导致的情况是,多个不同进程相互独立获取access_token时,会直接影响到其他进程调用相关微信接口,这种异常通常对应着 access_token失效异常。
为了解决这种情况,必须独立启动一个线程定时去获取access_token,并由该线程向所有其他线程提供该access_token,从而避免access_token获取混乱导致的失效问题。我实现该想法的方式是采用timer定时器,定时刷新获取access_token,并将其存入到指定property文件中,其他线程通过读取该文件中的access_token值,来调用相关接口。
@Controller@RequestMapping(value = "/timer")public class AcessTokenTimer { private static final String APPID = "*************"; private static final String APPSECRET = "*********"; private Timer timer = new Timer(true); @PostConstruct public void setToken(){ if(null == timer){ timer = new Timer(true); } timer.scheduleAtFixedRate(new TimerTask() { @Override public void run() { try { SystemUtil.setString("token.properties","access_token", UrlGETUtil.GET("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+APPID+"&secret="+APPSECRET).getString("access_token")); }catch (Exception e){ e.printStackTrace(); } } },0,3600*1000); }}
在定时器任务中获取和写入access_token值。该类基于SpringMVC框架,此处用到了@PostConstruct标签,它的作用是,在Spring框架初始化完成之后,及执行对应方法体,直白地说就是开机自启。
- 微信开发之access_token之坑
- 微信开发笔记之缓存access_token
- 微信开发之access_token获取
- 微信公众号开发之获取access_token[java版]
- 微信企业号开发之access_token接口调用示例
- 第五篇 :微信公众平台开发实战Java版之如何获取公众号的access_token以及缓存access_token
- 第五篇 :微信公众平台开发实战Java版之如何获取公众号的access_token以及缓存access_token
- 微信公众平台开发实战Java版之如何获取公众号的access_token以及缓存access_token
- 微信开发-获取access_token
- 微信公众平台开发之access_token自动获取并存储
- 微信测试号开发之四 获取access_token和jsapi_ticket
- 微信测试号开发之四 获取access_token和jsapi_ticket
- 微信支付java版本之获取Access_token
- 微信公众平台之CURL应用access_token
- 微信支付java版本之获取Access_token
- java 微信公众平台之获取access_token
- 微信公众号之access_token获取与管理
- 微信开发中遇到的access_token坑
- Linux管道命令符
- C++ 引用占用内存?
- Android apk重打包
- pthread_cond_wait和pthread_cond_signal 用法详解
- 突破想象力的9个点
- 微信开发之access_token之坑
- UVa 1225 数数字
- Android ActionBar完全解析,使用官方推荐的最佳导航栏(上)
- 【Hibernate】多对多关联映射
- 薛开宇学习笔记一之总结笔记(CIFAR-10 在 在 caffe 上进行训练与学习)--Linux语法总结
- MD5碰撞
- 数据结构——不相交集
- IOException 处理
- Android ActionBar完全解析,使用官方推荐的最佳导航栏(下)