微信服务号/企业号防止AccessToken过期的操作指南深入浅出

今天有好多小伙伴问到了我关于微信AccessToekn怎么避免失效的问题,前段时间也有人问过,那今天就一起讲了吧,首先我们要了解AccessToken在API中的作用

AccessToken时效:7200s

获取AccessToekn的参数:公众号(appid,secret)2000次/每日、企业号(corpid,corpsecret)次数限制API没说明

当中企业号API有这样一说:

AccessToken是企业号的全局唯一票据,调用接口时需携带AccessToken。

AccessToken需要用CorpIDSecret来换取,不同的Secret会返回不同的AccessToken。正常情况下AccessToken有效期为7200秒,有效期内重复获取返回相同结果,并自动续期

似乎企业号是自动续期的,今天先不管这个,反正不影响程序使用,首先说说具体思想,因为AccessToekn的时效性是

7200s,所以我们只需要给定两个写死的获取凭证的参数,

之后判断这2个参数是否有取到,没有值就需要自行配置,之后启动一个线程,传参(初始值)给新起的线程,之后写一个死循

环,执行一次获取,对获取到的对象实例进行一次判断

如果值为null,那就调用线程休眠,具体休眠时间看自己情况并且结合API计算,因为是死循环,所以当第二次取到值的时

候,就又一次进行了判断,当然这次不可能为null,除非

你的参数有问题,这时候我们就不需要在次继续执行下去了,我们需要休眠线程,因为值已经取到了,根据API说明,7200s

的时效性,每天2000次调用频率,其实2000次数足够

我们调用了,7200/3600=2h, 24/2h=12 ,每天12次就OK了,更何况是2000次呢?那我们就让线程休眠7000+s,之后的时间

(7200-7000)剩下200+s左右,这200+s里我们重新唤

醒线程开始对值判断,然后200+s我们又可以合理管理调用时间间隔,以自己的情况为准,这样就完全可以避免

AccessToekn的失效了

接下来说说参数配置的问题,我们在web.xml里需要配置如下几个参数,作为线程启动且获取凭证的映射

<servlet>  
	
        <servlet-name>InitAccessTokenServlet</servlet-name>  
        <servlet-class>  
            engineerjsp.accesstoken.util.InitAccessTokenServlet  
        </servlet-class>  
        <init-param>  
            <param-name>appid</param-name>  
            <param-value>你的appid</param-value>  
        </init-param>  
        <init-param>  
            <param-name>appsecret</param-name>  
            <param-value>你的appsecret</param-value>  
        </init-param>  
        <load-on-startup>0</load-on-startup>  
    </servlet>  

Servlet-name ,Servlet-class就不说了,分别在你的init-param 属性下配置好appid,appsecret,load-on-startup 为0 就是当这个服务启动时,InitAccessTokenServlet就自动

启动,并且同时启动线程服务

    1)通过配置<init-param>向Servlet中传入参数
    2)通过配置<load-on-startup>使得Web服务器启动时就加载该Servlet
    3)没有配置<servlet-mapping>因为InitServlet并不对外提供访问

以上就是大致的思想,具体代码稍后附上地址,有需要的朋友自行下载,不懂得及时在本博留言,不要QQ找我,因为基本上不会回,白天要上班,希望大家理解下

下面看看测试效果,线程效果本地检测图(故意给了错误逻辑,看执行效果):


服务器(本地)测试,服务开启之后,log打印日志:



正常测试值,我这里是6s执行一次,当且仅当休眠时间过了7000s之后,唤醒线程,且剩余的200+s,每间隔6s,执行一次凭证获取,大致思想就这么多,我附上Dome,

下载地址:http://download.csdn.net/detail/jspping/8249643

还是那句话:不懂得及时在本博留言,不要QQ找我,因为基本上不会回,白天要上班,希望大家理解下~

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jspping/article/details/41873391
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭