最近在开发微信服务号,写了一个程序定时刷新 access_token 和 jsapi_ticket

2015-06-06 05:02:39 +08:00
 goofansu

Wechat-Token

根据微信文档,建议定时刷新access_token,逻辑服务器去取这个access_token,从而保证access_token调用不超过限制,并且总是有效。

安装

必要条件

可选条件

源码安装

$ make install
$ _rel/wt/bin/wt start

从release中下载(当前仅支持linux和osx)

$ mkdir wechat-token
$ tar zxf linux-amd64.tar.gz -C wechat-token
$ cd wechat-token
$ ./bin/wt start

原理

数据保存格式

$ redis-cli
127.0.0.1:6379> HMGET access_token value expire_time
1) "Z47I_cG9bgNm6Z44rStZd3nO6G5-c0kpBpJGdHoCfaf3Ct8R4WkuVy79FvkOgXr2CYTniDFLsmincjGtfEF7JQZU4y3ZCPDnjMmVMWLTStg"
2) "1433506616"

127.0.0.1:6379> HMGET jsapi_ticket value expire_time
1) "sM4AOVdWfPE4DxkXGEs8VCdT_ZNcLoZWDBSBEduHE1WNupuOm2yNNmmRimx8u7lQCuD_5QpQhVSNNQ0vbRdoZw"
2) "1433506616"

项目地址: https://github.com/goofansu/wechat-token

欢迎star, fork和pull request

这个项目本身没难度,就是为了省去维护access_token的步骤。你的应用在调用微信api时,只需要从redis中读取access_token就行了。

接下来考虑提供一个docker的镜像,做到传入appid和secret就能使用服务。

说到docker就有一个问题:在阿里云上根据docker的官方文档安装docker,docker -d报错Could not find a free IP address range for interface 'docker0',这个问题有同学遇到过吗?

6575 次点击
所在节点    分享创造
12 条回复
cevincheung
2015-06-06 05:45:48 +08:00
为啥一个小daemon就可以解决的问题非得要搞这么复杂……- -#
goofansu
2015-06-06 06:24:25 +08:00
@cevincheung 感谢回复。

对,这是一个很简单的事情,实现方式很多,我只是想把这个封装得好一点,尽量做到开箱即用,现在安装还不算方便,所以我想如果做成docker可能会更好用。
ETiV
2015-06-06 06:40:26 +08:00
我大nodejs写个setInterval 就搞定了
cevincheung
2015-06-06 06:43:30 +08:00
@goofansu

一个python脚本就好了。sh也很简单,调用一下curl就可以完成的事。没必要。
deben
2015-06-06 07:08:57 +08:00
随时用随时从数据库里面读出来,发现过期再请求一个并存入数据库,难道大家不这样做?
goofansu
2015-06-06 07:17:05 +08:00
@deben 并发或者有多台逻辑服务器,都会导致重复刷新过期的access_token,单台服务器单线程肯定没问题
deben
2015-06-06 09:03:45 +08:00
@goofansu 额,有道理……
qiayue
2015-06-06 09:32:44 +08:00
@deben 我就是这么做的
Dongdong36
2015-06-06 09:56:45 +08:00
文档说有效时间是7200s左右,所以每隔(7200 - 10)刷新一次access_token就可以了
goofansu
2015-06-06 10:02:18 +08:00
@Dongdong36 对,我给的那个链接里建议1小时,所以我就定了1小时
Culm
2015-06-07 19:12:17 +08:00
看到必要条件,整个人都斯巴达了
herold519
2015-06-09 10:53:00 +08:00
过度设计了。。

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

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

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

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

© 2021 V2EX