private static final String GRANT_TYPE = "client_credential";
private static final String APPID = "";
private static final String SECRET = "";
// 缓存的令牌
private static WeiXinAccessToken cachedToken;
// 上次获取令牌的时间
private static Date lastFetchTime;
public static WeiXinAccessToken getWeixinToken() {
// 检查是否需要重新获取令牌
if (cachedToken == null || isTokenExpired()) {
fetchNewToken();
}
return cachedToken;
}
private static boolean isTokenExpired() {
// 判断令牌是否过期
// 令牌的有效期为2小时减去一定的安全时间
long expiresIn = cachedToken.getExpires_in();
long safeTime = 10 * 60; // 10分钟的安全时间
long tokenLifetime = expiresIn - safeTime;
// 计算令牌过期时间
Date expirationTime = DateUtils.addSeconds(lastFetchTime, (int) tokenLifetime);
// 检查当前时间是否超过令牌过期时间
return new Date().after(expirationTime);
}
private static void fetchNewToken() {
String tokenStr = HttpUtil.get("https://api.weixin.qq.com/cgi-bin/token?grant_type=" + GRANT_TYPE + "&appid=" + APPID + "&secret=" + SECRET);
cachedToken = JSONUtil.toBean(tokenStr, WeiXinAccessToken.class);
lastFetchTime = new Date();
}
06-23
968
10-04
2536
01-30
3745