
做微信相关开发时,需要用到 access_token ,而从微信服务器获取的 access_token ,有效期只有一段时间(目前为 7200 秒)。 access_token 过期后就无法使用,需要重新获取。而每次获取新的 access_token 之后,老的 access_token 自动失效。
这种情况下如果在 web 应用的各个逻辑点对 token 进行刷新,很容易出现冲突。所以最好在一个单独的服务里面处理定时刷新 token 的工作。
TokenBoy 就是为了解决这个问题而存在。
TokenBoy 每隔一段时间自动去微信服务器刷新 Token ,保存在内存中,再通过一个 web 接口提供 token 给本地其他程序。
1 kslr 2015-11-07 17:31:27 +08:00 上午的时候我也在想做一个,没想到下午已经有了,好赞 |
2 AlexaZhou OP ,希望这东西能对其他人有用~ :doge: |
3 TangMonk 2015-11-07 17:35:58 +08:00 有用!多谢 |
4 qinxi 2015-11-07 17:36:35 +08:00 我用 dubbo 写了个分布式服务.... |
6 Phant0m 2015-11-07 17:43:22 +08:00 放到 redis 里设置过期时间,从 redis 里取,取不到再重新获取 |
7 orFish 2015-11-07 17:45:50 +08:00 :doge: :octocat: |
9 kslr 2015-11-07 17:48:54 +08:00 |
10 hzm0318hzm 2015-11-07 19:36:11 +08:00 好东西,前几天想写个练手,现在有的参考了 |
11 Sumkor 2015-11-07 19:43:25 +08:00 之前是写一个工具类,定时读取或写入 xml 文件实现定时刷新 access_token 的 https://github.com/Sumkor/WeixinDemo/blob/master/src/com/util/TokenUtil.java |
12 bazingaterry 2015-11-07 19:48:46 +08:00 |
14 exploitcat 2015-11-07 21:17:52 +08:00 :doge: |
15 20150517 2015-11-08 07:22:37 +08:00 我就是放在了 redis 里,然后设置 expire 就可以了,不是满简单的么, 不用这么造轮子 |
16 restran 2015-11-08 10:51:01 +08:00 好像没有检查获取 access_token 时返回的 expire_in > 目前 access_token 的有效期通过返回的 expire_in 来传达,目前是 7200 秒之内的值。中控服务器需要根据这个有效时间提前去刷新新 access_token 。 参考文档 https://mp.weixin.qq.com/wiki/11/0e4b294685f817b95cbed85ba5e82b8f.html |
17 AlexaZhou OP @restran 呃,你说的对,赞眼力~ 我写的时候是一方面是考虑了通用性,比如我们现在有用到其他类似的接口,但是并没有返回 expire_in ,另外一方面是微信接口这种使用广泛的东西,不太可能会突然修改,所以就先按照固定时间刷新了。 后面想办法给这个地方处理一下 |
18 AlexaZhou OP @20150517 你的方法是不是把 Token 放在 redis 里面,然后在业务逻辑中,先尝试从 redis 获取 token ,获取不到则从微信服务器刷新 token 再存入 redis 并设置有效期。 这样一般没事,只是如果有多台 web 服务器,有可能在 token 过期的时候,同时都去刷新了 token ,就混乱了。 可能比较难测试出来,但一定有这样的可能 |
19 aprikyblue 2015-11-08 14:09:02 +08:00 |
20 FingerLiu 2015-11-09 09:33:30 +08:00 200k00k3y9.jpg redis + 1 |
21 zhangxiaoman 2015-11-09 09:44:11 +08:00 :doge: redis + 1 |