微信官方参考文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183
基本说明:
access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。
调用方式:
公众号可以使用AppID和AppSecret调用本接口来获取access_token。AppID和AppSecret可在“微信公众平台-开发-基本配置”页中获得(需要已经成为开发者,且帐号没有异常状态)。调用接口时,请登录“微信公众平台-开发-基本配置”提前将服务器IP地址添加到IP白名单中,点击查看设置方法,否则将无法调用成功。
特别说明:建议公众号开发者使用中控服务器统一获取和刷新Access_token,其他业务逻辑服务器所使用的access_token均来自于该中控服务器,不应该各自去刷新,否则容易造成冲突,导致access_token覆盖而影响业务;
了解这些信息后,我们需要理解确定如下几点:
1、统一token调用方法,其他地方需用到token均采用本方法获取;
2、请求获取token信息接口的实现;
3、token数据存储至本地数据库;
4、判断是否需要重新获取token还是直接从本地数据库中查询;
下面来进行具体的实现:
首先看一下整体的类图:
那么在获取token时,可以根据appid和appsecret来获取,其中判断是否需要更新的方法为:
能否获取到当前仍有效的token:查询SQL如下:
对应表结构参考如下:
对应的java代码如下: 如果能获取到,那么直接返回:
1 /** 2 * 通过参数获取Token信息 3 * @param appID 4 * @param appSceret 5 * @return 6 */ 7 public Token getToken(String appID, String appSceret) 8 { 9 mAppID = appID; 10 mAppSceret = appSceret; 11 12 // 1.确定是否要更新token,无需更新则直接直接返回获取的token 13 if (updateToken()) 14 { 15 return mToken; 16 } 17 18 // 2. 如需更新 19 if (!getTokenbyhttps(mAppID, mAppSceret)) 20 { 21 System.out.println("获取失败!"); 22 return null; 23 } 24 25 return mToken; 26 }
其中明细方法实现为: