Browse Source

1、修复微信推送模板消息accessToken缓存问题;

dev
mh 5 months ago
parent
commit
3697e70a3a
  1. 30
      user-service/src/main/java/com/mh/user/service/wechat/impl/WechatServiceImpl.java

30
user-service/src/main/java/com/mh/user/service/wechat/impl/WechatServiceImpl.java

@ -17,6 +17,7 @@ import org.springframework.web.client.RestTemplate;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
/** /**
@ -44,6 +45,18 @@ public class WechatServiceImpl implements WechatService {
return wechatMapper.queryWechatUser(projectId); return wechatMapper.queryWechatUser(projectId);
} }
public String getAccessToken(CacheUtil instance) {
String tokenResult = restTemplate.getForObject(wechatMpConfig.getAccessTokenUrl(),String.class);
JSONObject jsonObj = JSONObject.parseObject(tokenResult);
if (jsonObj == null || !jsonObj.containsKey("access_token")) {
return "";
}
String accessToken = jsonObj.get("access_token").toString();
log.info("获取access_token==>{}", accessToken);
instance.createCache("accessToken", accessToken , 7000, TimeUnit.SECONDS);
return accessToken;
}
@Override @Override
public void PushMsg(PushMsgEntity pushMsgEntity) { public void PushMsg(PushMsgEntity pushMsgEntity) {
// 判断cache中是否存在access_token // 判断cache中是否存在access_token
@ -51,17 +64,24 @@ public class WechatServiceImpl implements WechatService {
Cache<Object, Object> cache = instance.getCache("accessToken"); Cache<Object, Object> cache = instance.getCache("accessToken");
String accessToken = ""; String accessToken = "";
if (cache != null ) { if (cache != null ) {
log.info("cache中存在access_token,直接使用"); log.info("ConcurrentHashMap中存在access_token的cache,直接使用");
accessToken = cache.getIfPresent("accessToken").toString(); // 再次判断是否存在access_token
if (cache.getIfPresent("accessToken") == null) {
log.info("cache中不存在access_token,重新获取");
accessToken = getAccessToken(instance);
} else {
accessToken = Objects.requireNonNull(cache.getIfPresent("accessToken")).toString();
}
} else { } else {
String tokenResult = restTemplate.getForObject(wechatMpConfig.getAccessTokenUrl(),String.class); String tokenResult = restTemplate.getForObject(wechatMpConfig.getAccessTokenUrl(),String.class);
JSONObject jsonObj = JSONObject.parseObject(tokenResult); JSONObject jsonObj = JSONObject.parseObject(tokenResult);
if (jsonObj == null || !jsonObj.containsKey("access_token")) { if (jsonObj == null || !jsonObj.containsKey("access_token")) {
return; return;
} }
accessToken = jsonObj.get("access_token").toString(); accessToken = getAccessToken(instance);
log.info("获取access_token==>{}", accessToken); }
instance.createCache("accessToken", accessToken , 6000, TimeUnit.SECONDS); if (accessToken.isEmpty()) {
return;
} }
// 封装推送内容 // 封装推送内容
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();

Loading…
Cancel
Save