V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
oh
V2EX  ›  问与答

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

  •  1
     
  •   oh · 2017-11-04 21:28:53 +08:00 · 2937 次点击
    这是一个创建于 2605 天前的主题,其中的信息可能已经有所发展或是发生改变。
    是按响应的到期时间( 7200 秒)呢?
    还是定时 X 分钟就刷新一次?
    还是基于 memcached 或 redis 一类的自动缓存失效就去获取新的?
    14 条回复    2017-11-05 10:24:23 +08:00
    blessyou
        1
    blessyou  
       2017-11-04 21:33:25 +08:00 via Android
    存一个过期时间。 如果请求时间超过过期时间 ,就取新的并覆盖原来的值和过期时间,如果请求时间没超过过期时间,就取历史值
    qiayue
        2
    qiayue  
       2017-11-04 21:33:44 +08:00
    存数据库( MySQL、memcached、redis 皆可),同时保存过期时间
    每次获取的时候,查看过期时间
    如果某次使用发现剩余时间小于 600 秒(或 1000 秒),则去获取最新,并保存,更新过期时间
    oh
        3
    oh  
    OP
       2017-11-04 21:49:36 +08:00
    @blessyou @qiayue

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

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

    @pubby 有木有出过什么异常的时候?我这边用这个方式两个月,倒是没出什么问题,不知道有啥隐藏的坑没
    wdlth
        11
    wdlth  
       2017-11-04 22:13:18 +08:00
    用的单独服务进行刷新,用消息系统来获取。
    carlclone
        12
    carlclone  
       2017-11-04 22:18:23 +08:00 via Android
    用的 easywechat 之后没管过这些问题, 内部就有实现,有兴趣可以看看
    carlclone
        13
    carlclone  
       2017-11-04 22:20:02 +08:00 via Android
    好像默认是文件缓存,可以实现 Redis driver
    iyaozhen
        14
    iyaozhen  
       2017-11-05 10:24:23 +08:00 via Android
    并发不高存文件都行,发现过期了再去获取。重复获取问题也不大,值又不会变。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1175 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 17:50 · PVG 01:50 · LAX 09:50 · JFK 12:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.