众所周知,在微信公众平台开发中,其实就是一系列的API请求和自身业务系统的集成,而在API请求中,AccessToken是优势一个必不可少的参数。
注:
在企业微信开发文档中有这样一段:
需要注意的点:
原始方案: V0.1 定时器(schedule) 描述:在SpringBoot项目中,使用@Scheduled注解,每一小时获取一次AccessToken。 问题:在运行一段时间后,因网络波动导致某次请求失败,程序出错,定时器没有继续执行。 影响:程序无法进行任何微信相关的API请求。 改进:V0.2 定时器+异常捕获 V0.2 定时器+异常捕获 描述:在上述版本的情况下,增加异常捕获。 问题:运行一段时间再次出现异常,程序在获取AccessToken过程中出现阻塞,后续代码均未执行,定时器也无法执行。
总结:
此方案的优点在于,程序无需通过定时器或线程去处理AccessToken,通过Redis的缓存,并设置过期时间,实现动态的管理,并能和其他程序共享AccessToken(对于多个程序需要使用同一个应用时,会存在此需求)。在过期也能自动获取,并不影响程序正常运行。 即使某次请求出现问题,不会影响之后的请求。
图中设计的几个类实现如下:
注:代码使用String.format进行占位符替换,使用时需注意参数的顺序,以免因替换出错导致的传参错误。
注:因代码过长,此处只引入部门函数。
核心方法为:wxRequest
其中StringRedisTemplate在主函数中注入
Controller中调用如下: