公众号开发,你们的 Access Token 和 Jsapi Ticket 多久更新一次?

2017-11-04 21:28:53 +08:00
 oh
是按响应的到期时间( 7200 秒)呢?
还是定时 X 分钟就刷新一次?
还是基于 memcached 或 redis 一类的自动缓存失效就去获取新的?
2936 次点击
所在节点    问与答
14 条回复
blessyou
2017-11-04 21:33:25 +08:00
存一个过期时间。 如果请求时间超过过期时间 ,就取新的并覆盖原来的值和过期时间,如果请求时间没超过过期时间,就取历史值
qiayue
2017-11-04 21:33:44 +08:00
存数据库( MySQL、memcached、redis 皆可),同时保存过期时间
每次获取的时候,查看过期时间
如果某次使用发现剩余时间小于 600 秒(或 1000 秒),则去获取最新,并保存,更新过期时间
oh
2017-11-04 21:49:36 +08:00
@blessyou @qiayue

这两种方法都要注意高并发的情况,假设与微信服务器通讯时间为 1s,这 1s 以内同时访问的人就有可能出现重复获取的情况。不过要解决也很容易… 加锁啊 之类的都行…

我现在的做法是暴露一个更新接口,给外部的定时器(例如 crontab )定时访问,如果在临近过期时间就获取新的,而访客那边实时拿到的都是最后一个。不知道这个方法有没有啥问题,所以想来 V2 上看看大家怎么玩的。
shiny
2017-11-04 21:51:52 +08:00
另外提醒下:如果 Token 没有统一管理,会出现 7200s 没有到的情况下就已经过期了。需要注意处理异常。
oh
2017-11-04 21:56:54 +08:00
@shiny 卧槽?还有这种操作?是不是因为原有 token 被刷新了,导致老 token 没到 7200s 就失效?
shiny
2017-11-04 21:58:41 +08:00
@oh 是的。翻了下微信的文档,描述的应该是比较详细了。https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183
oh
2017-11-04 22:00:20 +08:00
@shiny 那还好,我以为无缘无故的 提前过期… 这玩意果然一定要统一管理啊…
pubby
2017-11-04 22:02:14 +08:00
@oh 是的,所以我们是专门跑一个服务主动更新各个公众号的 token。 然后各业务访问这个服务获取 token
alex321
2017-11-04 22:03:39 +08:00
7000s,所有服务共享。
oh
2017-11-04 22:09:10 +08:00
@alex321 所有服务共享是肯定的… 好奇的是哪种刷新方式…

@pubby 有木有出过什么异常的时候?我这边用这个方式两个月,倒是没出什么问题,不知道有啥隐藏的坑没
wdlth
2017-11-04 22:13:18 +08:00
用的单独服务进行刷新,用消息系统来获取。
carlclone
2017-11-04 22:18:23 +08:00
用的 easywechat 之后没管过这些问题, 内部就有实现,有兴趣可以看看
carlclone
2017-11-04 22:20:02 +08:00
好像默认是文件缓存,可以实现 Redis driver
iyaozhen
2017-11-05 10:24:23 +08:00
并发不高存文件都行,发现过期了再去获取。重复获取问题也不大,值又不会变。

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

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

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

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

© 2021 V2EX