做微信相关开发时,需要用到 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 1
|
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 1
好像没有检查获取 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
|