1、现阶段对接微信第三方平台的实现,在 接收验证票据(接收微信服务器推送) 的接口中,会判断 令牌(component_access_token) 在 Redis 中是否存在,如果不存在,则获取令牌(HTTP 请求)。相当于将微信服务器间隔 10分钟 的推送,当做了定时命令使用。具体情况基于时间顺序如下所示:
11:25 获取验证票据(component_verify_ticket) 11:25 获取并生成令牌(component_access_token),存储至 Redis,设置过期时间:13:20 13:15 获取验证票据,不会存储至 Redis 13:20 令牌过期 13:25 获取验证票据,存储至 Redis 结论:在 13:20 - 13:25 之间,这 5 分钟以内,微信的令牌不存在,则微信发布不可用。
2、重新调整后的规则,在保证令牌绝对永久有效的情况下,尽量减少获取令牌的 HTTP 请求次数。具体情况基于时间顺序如下所示:
11:25 获取验证票据(component_verify_ticket) 11:25 获取并生成令牌(component_access_token),添加字段:有效截止时间(13:25),存储至 Redis 13:05 判断规则:有效截止时间(13:25) - 20分钟 < 13:05。结果为假,不会获取令牌,不会存储至 Redis 13:15 判断规则:有效截止时间(13:25) - 20分钟 < 13:15。结果为真,获取令牌,添加字段:有效截止时间(15:15),存储至 Redis。备注:此时令牌数据已变化,只要执行获取令牌的 HTTP 请求,则会生成新的令牌 13:25 判断规则:有效截止时间(15:15) - 20分钟 < 13:25。结果为假,不会获取令牌,不会存储至 Redis 结论: 1、官方建议在 1小时50分 后重新获取令牌。渠道发布在 1小时40分 后就开始判断是否要重新获取令牌。即在2个小时内,以确保在 1小时50分 后重新获取令牌。 2、官方的验证票据(component_verify_ticket)的推送,平均间隔 10分钟,但是实际上存在 30秒 左右的误差。以下是官方的验证票据(component_verify_ticket)的推送的请求参数的时间戳与转换后普通时间: 1625109905 2021-07-01 11:25:05 1625196309 2021-07-02 11:25:09 1625205285 2021-07-02 13:54:45 1625222097 2021-07-02 18:34:57 3、在 13:05、13:15 的时间点,皆有可能重新获取令牌。
3、查看每一次获取令牌的 HTTP 请求的具体时间点。如图1
-rw-r--r-- 1 nginx nginx 231 Jul 2 18:15 frontend-controllers-WxMsgEventController-componentAccessTokenData-1625220904.5864-1284321044.txt -rw-r--r-- 1 nginx nginx 231 Jul 2 20:05 frontend-controllers-WxMsgEventController-componentAccessTokenData-1625227518.8292-2034263273.txt -rw-r--r-- 1 nginx nginx 231 Jul 2 21:54 frontend-controllers-WxMsgEventController-componentAccessTokenData-1625234060.9016-2037842134.txt -rw-r--r-- 1 nginx nginx 231 Jul 2 23:34 frontend-controllers-WxMsgEventController-componentAccessTokenData-1625240074.6086-129234930.txt -rw-r--r-- 1 nginx nginx 231 Jul 3 01:24 frontend-controllers-WxMsgEventController-componentAccessTokenData-1625246642.1858-1357575717.txt -rw-r--r-- 1 nginx nginx 231 Jul 3 03:04 frontend-controllers-WxMsgEventController-componentAccessTokenData-1625252663.3032-96333903.txt -rw-r--r-- 1 nginx nginx 231 Jul 3 04:53 frontend-controllers-WxMsgEventController-componentAccessTokenData-1625259239.382-1358398298.txt -rw-r--r-- 1 nginx nginx 231 Jul 3 06:34 frontend-controllers-WxMsgEventController-componentAccessTokenData-1625265273.2847-949998836.txt -rw-r--r-- 1 nginx nginx 231 Jul 3 08:14 frontend-controllers-WxMsgEventController-componentAccessTokenData-1625271273.5153-1059028888.txt -rw-r--r-- 1 nginx nginx 231 Jul 3 09:54 frontend-controllers-WxMsgEventController-componentAccessTokenData-1625277298.7813-310601964.txt -rw-r--r-- 1 nginx nginx 231 Jul 3 11:44 frontend-controllers-WxMsgEventController-componentAccessTokenData-1625283877.9521-412669108.txt -rw-r--r-- 1 nginx nginx 231 Jul 3 13:24 frontend-controllers-WxMsgEventController-componentAccessTokenData-1625289886.807-2092152976.txt -rw-r--r-- 1 nginx nginx 231 Jul 3 15:14 frontend-controllers-WxMsgEventController-componentAccessTokenData-1625296463.0599-1080955996.txt -rw-r--r-- 1 nginx nginx 231 Jul 3 16:54 frontend-controllers-WxMsgEventController-componentAccessTokenData-1625302484.4032-1651010868.txt -rw-r--r-- 1 nginx nginx 231 Jul 3 18:44 frontend-controllers-WxMsgEventController-componentAccessTokenData-1625309067.7121-1067986815.txt -rw-r--r-- 1 nginx nginx 231 Jul 3 20:24 frontend-controllers-WxMsgEventController-componentAccessTokenData-1625315074.8086-1306110047.txt -rw-r--r-- 1 nginx nginx 231 Jul 3 22:14 frontend-controllers-WxMsgEventController-componentAccessTokenData-1625321659.2166-403019843.txt -rw-r--r-- 1 nginx nginx 231 Jul 4 00:04 frontend-controllers-WxMsgEventController-componentAccessTokenData-1625328259.0217-93337953.txt -rw-r--r-- 1 nginx nginx 231 Jul 4 01:44 frontend-controllers-WxMsgEventController-componentAccessTokenData-1625334265.2403-81093374.txt -rw-r--r-- 1 nginx nginx 231 Jul 4 03:34 frontend-controllers-WxMsgEventController-componentAccessTokenData-1625340861.6377-119559848.txt -rw-r--r-- 1 nginx nginx 231 Jul 4 05:14 frontend-controllers-WxMsgEventController-componentAccessTokenData-1625346863.7426-1003494675.txt -rw-r--r-- 1 nginx nginx 231 Jul 4 06:54 frontend-controllers-WxMsgEventController-componentAccessTokenData-1625352868.7146-1351258397.txt -rw-r--r-- 1 nginx nginx 231 Jul 4 08:34 frontend-controllers-WxMsgEventController-componentAccessTokenData-1625358895.2811-350216025.txt -rw-r--r-- 1 nginx nginx 231 Jul 4 10:15 frontend-controllers-WxMsgEventController-componentAccessTokenData-1625364905.1292-483282692.txt -rw-r--r-- 1 nginx nginx 231 Jul 4 12:05 frontend-controllers-WxMsgEventController-componentAccessTokenData-1625371510.5863-1975502382.txt -rw-r--r-- 1 nginx nginx 231 Jul 4 13:54 frontend-controllers-WxMsgEventController-componentAccessTokenData-1625378081.9596-379002381.txt -rw-r--r-- 1 nginx nginx 231 Jul 4 15:34 frontend-controllers-WxMsgEventController-componentAccessTokenData-1625384084.4452-1094694829.txt -rw-r--r-- 1 nginx nginx 231 Jul 4 17:14 frontend-controllers-WxMsgEventController-componentAccessTokenData-1625390088.3557-588511027.txt -rw-r--r-- 1 nginx nginx 231 Jul 4 19:05 frontend-controllers-WxMsgEventController-componentAccessTokenData-1625396707.8423-1886295111.txt -rw-r--r-- 1 nginx nginx 231 Jul 4 20:54 frontend-controllers-WxMsgEventController-componentAccessTokenData-1625403282.8031-1069721276.txt -rw-r--r-- 1 nginx nginx 231 Jul 4 22:44 frontend-controllers-WxMsgEventController-componentAccessTokenData-1625409877.6077-1660123114.txt -rw-r--r-- 1 nginx nginx 231 Jul 5 00:34 frontend-controllers-WxMsgEventController-componentAccessTokenData-1625416464.5966-45554414.txt -rw-r--r-- 1 nginx nginx 231 Jul 5 02:23 frontend-controllers-WxMsgEventController-componentAccessTokenData-1625423039.146-1550811908.txt -rw-r--r-- 1 nginx nginx 231 Jul 5 04:04 frontend-controllers-WxMsgEventController-componentAccessTokenData-1625429059.9922-66909225.txt -rw-r--r-- 1 nginx nginx 231 Jul 5 05:54 frontend-controllers-WxMsgEventController-componentAccessTokenData-1625435642.6323-187433523.txt -rw-r--r-- 1 nginx nginx 231 Jul 5 07:34 frontend-controllers-WxMsgEventController-componentAccessTokenData-1625441682.8374-716247506.txt
4、在总计 45 次的请求中,大部分的调用平均间隔 1小时50分 左右(28次),小部分的调用平均间隔 1小时40分 左右(17次)。
1小时50分: 18:15 - 20:05 20:05 - 21:54 23:34 - 01:24 03:04 - 04:53 09:54 - 11:44 13:24 - 15:14 16:54 - 18:44 20:24 - 22:14 22:14 - 00:04 01:44 - 03:34 10:15 - 12:05 12:05 - 13:54 17:14 - 19:05 19:05 - 20:54 20:54 - 22:44 22:44 - 00:34 00:34 - 02:23 04:04 - 05:54 1小时40分: 21:54 - 23:34 01:24 - 03:04 04:53 - 06:34 06:34 - 08:14 08:14 - 09:54 11:44 - 13:24 15:14 - 16:54 18:44 - 20:24 00:04 - 01:44 03:34 - 05:14 05:14 - 06:54 06:54 - 08:34 08:34 - 10:15 13:54 - 15:34 15:34 - 17:14 02:23 - 04:04 05:54 - 07:34
5、查看其响应的内容。 抽样:20:05、21:54、23:34。其响应的访问令牌的过期截止时间分别为:2021-07-02 22:05:18、2021-07-02 23:54:20、2021-07-03 01:34:34。符合预期。如图2
[root@api-7f9d76b849-kckxz runtime]# cat frontend-controllers-WxMsgEventController-componentAccessTokenData-1625227518.8292-2034263273.txt Array ( [component_access_token] => 46_yRwzjrgTGzx94RykB9pycN-nlEXnvYQNSbXC0gfWJ9b091k-wLhFgyeZTIovEIVVJpWvBk4em_byyQrNzfxjjMGj6mKfz-tKHWUKJmxGZDA02t5rdWOvcaYez7EmRZYJ6szrAR4qcHDHeXgPZTXjAGAEYC [expires_at] => 1625234718 ) [root@api-7f9d76b849-kckxz runtime]# cat frontend-controllers-WxMsgEventController-componentAccessTokenData-1625234060.9016-2037842134.txt Array ( [component_access_token] => 46_2hBMmx4Ww0pMYSsLCun4EW80WOcNHUMrOE0i-niX0599OTCi5xOHw5yrJ3It7Um9tyXt9x3MiGuazXgPLAXKUP-3WMIO9Du8ECPk4nM8Ls_iKOGGLrn5QAyGlXueXI4d8glGjPexUdFi53iSERYdAFALYF [expires_at] => 1625241260 ) [root@api-7f9d76b849-kckxz runtime]# cat frontend-controllers-WxMsgEventController-componentAccessTokenData-1625240074.6086-129234930.txt Array ( [component_access_token] => 46_FfM2ZagUut2Z33lVf-PZrUzKrauKTrMU4EcDjZ39sIB3B6RmbKKTNqWfioZgpSEubmUkQEF3foT6gUO5JR-ILanvR8zF7eafBgKh22CRFX8yLcGEMlPDw9zVJPiXWt774FVh2H-u5oV1taXJGQVhAHANXC [expires_at] => 1625247274 ) [root@api-7f9d76b849-kckxz runtime]#
6、最终将 20分钟 调整为 25分钟,即在2个小时内,以确保在 1小时40分 后重新获取令牌。如果获取失败,还可以继续在 1小时50分 后重新获取令牌。即总计 2 次机会。容错性更强。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/250675.html