V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
oh
V2EX  ›  问与答

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

  •  1
     
  •   oh · Nov 4, 2017 · 3481 views
    This topic created in 3097 days ago, the information mentioned may be changed or developed.
    是按响应的到期时间( 7200 秒)呢?
    还是定时 X 分钟就刷新一次?
    还是基于 memcached 或 redis 一类的自动缓存失效就去获取新的?
    14 replies    2017-11-05 10:24:23 +08:00
    blessyou
        1
    blessyou  
       Nov 4, 2017 via Android
    存一个过期时间。 如果请求时间超过过期时间 ,就取新的并覆盖原来的值和过期时间,如果请求时间没超过过期时间,就取历史值
    qiayue
        2
    qiayue  
    PRO
       Nov 4, 2017
    存数据库( MySQL、memcached、redis 皆可),同时保存过期时间
    每次获取的时候,查看过期时间
    如果某次使用发现剩余时间小于 600 秒(或 1000 秒),则去获取最新,并保存,更新过期时间
    oh
        3
    oh  
    OP
       Nov 4, 2017
    @blessyou @qiayue

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

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

    @pubby 有木有出过什么异常的时候?我这边用这个方式两个月,倒是没出什么问题,不知道有啥隐藏的坑没
    wdlth
        11
    wdlth  
       Nov 4, 2017
    用的单独服务进行刷新,用消息系统来获取。
    carlclone
        12
    carlclone  
       Nov 4, 2017 via Android
    用的 easywechat 之后没管过这些问题, 内部就有实现,有兴趣可以看看
    carlclone
        13
    carlclone  
       Nov 4, 2017 via Android
    好像默认是文件缓存,可以实现 Redis driver
    iyaozhen
        14
    iyaozhen  
       Nov 5, 2017 via Android
    并发不高存文件都行,发现过期了再去获取。重复获取问题也不大,值又不会变。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   968 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 48ms · UTC 20:41 · PVG 04:41 · LAX 13:41 · JFK 16:41
    ♥ Do have faith in what you're doing.