package com.artfess.integrate.util; import com.fasterxml.jackson.databind.JsonNode; import com.artfess.base.util.BeanUtils; import com.artfess.base.util.HttpUtil; import com.artfess.base.util.JsonUtil; import com.artfess.integrate.consts.WeChatOffAccConsts; import com.artfess.integrate.model.TokenModel; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; /** *
* 描述:微信公众号accessToken工具类 * 构建组:x7 * 作者:pangq * 邮箱:pangq@jee-soft.cn * 日期:2020-05-07 14:25:01 * 版权:广州宏天软件有限公司 **/ public class WechatOffAccTokenUtil { protected static Logger log = LoggerFactory.getLogger(WechatOffAccTokenUtil.class); private static TokenModel model = new TokenModel(); /** * 获取微信公众号accessToken。 *
* 1.如果没有初始化则远程请求获取。
* 2.如果已经初始化并且未过期,直接获取。
* 1.如果已经过期则重新获取。
*
*
* @return
*/
public static synchronized String getToken() throws IOException {
//没有初始化直接获取。
if (!model.isInit()) {
String token = requestToken();
return token;
} else {
//如果token要过期则重新获取。
if (model.isExpire(model.getLastUpdTime(), model.getExprieIn())) {
String token = requestToken();
return token;
} else {
//从缓存中获取。
return model.getToken();
}
}
}
/**
* https请求微信公众号api获取token。
*
* @return
*/
private static String requestToken() throws IOException {
String url = WeChatOffAccConsts.getTokenUrl();
String rtn = HttpUtil.sendHttpsRequest(url, "", "GET");
JsonNode jsonObj = JsonUtil.toJsonNode(rtn);
System.out.println(rtn);
//取到了
if (BeanUtils.isNotEmpty(jsonObj.get("access_token"))) {
String token = jsonObj.get("access_token").asText();
int expireIn = jsonObj.get("expires_in").asInt();
model.setCorpToken(token, expireIn);
return token;
}
//获取失败
else {
model.setInit(false);
String errMsg = jsonObj.get("errmsg").asText();
log.error(errMsg);
throw new RuntimeException("获取accessToken失败: