用 tornado 写了个定时刷新微信 access_token 的玩意儿

2015-11-07 17:30:36 +08:00
 AlexaZhou

做微信相关开发时,需要用到 access_token ,而从微信服务器获取的 access_token ,有效期只有一段时间(目前为 7200 秒)。 access_token 过期后就无法使用,需要重新获取。而每次获取新的 access_token 之后,老的 access_token 自动失效。

这种情况下如果在 web 应用的各个逻辑点对 token 进行刷新,很容易出现冲突。所以最好在一个单独的服务里面处理定时刷新 token 的工作。

TokenBoy 就是为了解决这个问题而存在。

TokenBoy 每隔一段时间自动去微信服务器刷新 Token ,保存在内存中,再通过一个 web 接口提供 token 给本地其他程序。

传送门: https://github.com/alexazhou/TokenBoy

4610 次点击
所在节点    程序员
21 条回复
kslr
2015-11-07 17:31:27 +08:00
上午的时候我也在想做一个,没想到下午已经有了,好赞
AlexaZhou
2015-11-07 17:33:26 +08:00
😄,希望这东西能对其他人有用~
:doge:
TangMonk
2015-11-07 17:35:58 +08:00
有用!多谢
qinxi
2015-11-07 17:36:35 +08:00
我用 dubbo 写了个分布式服务....
AlexaZhou
2015-11-07 17:40:33 +08:00
@TangMonk 哈哈,好开森~ 话说那个 doge 怎么打出来有人知道么?
Phant0m
2015-11-07 17:43:22 +08:00
放到 redis 里设置过期时间,从 redis 里取,取不到再重新获取
orFish
2015-11-07 17:45:50 +08:00
:doge:
:octocat:
kslr
2015-11-07 17:48:18 +08:00
@AlexaZhou " " 删掉双引号
kslr
2015-11-07 17:48:54 +08:00
hzm0318hzm
2015-11-07 19:36:11 +08:00
好东西,前几天想写个练手,现在有的参考了
Sumkor
2015-11-07 19:43:25 +08:00
之前是写一个工具类,定时读取或写入 xml 文件实现定时刷新 access_token 的

https://github.com/Sumkor/WeixinDemo/blob/master/src/com/util/TokenUtil.java
bazingaterry
2015-11-07 19:48:46 +08:00
AlexaZhou
2015-11-07 20:36:08 +08:00
@Sumkor 嗯这样也可以,就是保存在文件系统里面的话,适合只有一台服务器,不适用于有多台服务器的情况
exploitcat
2015-11-07 21:17:52 +08:00
:doge:
20150517
2015-11-08 07:22:37 +08:00
我就是放在了 redis 里,然后设置 expire 就可以了,不是满简单的么, 不用这么造轮子
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
AlexaZhou
2015-11-08 12:56:57 +08:00
@restran 呃,你说的对,赞眼力~
我写的时候是一方面是考虑了通用性,比如我们现在有用到其他类似的接口,但是并没有返回 expire_in ,另外一方面是微信接口这种使用广泛的东西,不太可能会突然修改,所以就先按照固定时间刷新了。

后面想办法给这个地方处理一下
AlexaZhou
2015-11-08 13:10:21 +08:00
@20150517
你的方法是不是把 Token 放在 redis 里面,然后在业务逻辑中,先尝试从 redis 获取 token ,获取不到则从微信服务器刷新 token 再存入 redis 并设置有效期。

这样一般没事,只是如果有多台 web 服务器,有可能在 token 过期的时候,同时都去刷新了 token ,就混乱了。

可能比较难测试出来,但一定有这样的可能
aprikyblue
2015-11-08 14:09:02 +08:00
FingerLiu
2015-11-09 09:33:30 +08:00
200k00k3y9.jpg redis + 1

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/234431

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX