diff --git a/src/main/java/com/ynxbd/push/controller/TestController.java b/src/main/java/com/ynxbd/push/controller/TestController.java index 248994c..db7dbb6 100644 --- a/src/main/java/com/ynxbd/push/controller/TestController.java +++ b/src/main/java/com/ynxbd/push/controller/TestController.java @@ -1,6 +1,6 @@ package com.ynxbd.push.controller; -import com.ynxbd.push.config.IniConfig; +import com.ynxbd.push.httpRequest.xbd.wx.WxCacheRequest; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -11,8 +11,8 @@ public class TestController { @GetMapping("test01") public String test01() { - String id = IniConfig.test(); - System.out.println(id); + String accessToken = WxCacheRequest.getAccessToken(); + System.out.println(accessToken); return "success"; } } diff --git a/src/main/java/com/ynxbd/push/entity/xbd/wx/RespAccessToken.java b/src/main/java/com/ynxbd/push/entity/xbd/wx/AccessToken.java similarity index 71% rename from src/main/java/com/ynxbd/push/entity/xbd/wx/RespAccessToken.java rename to src/main/java/com/ynxbd/push/entity/xbd/wx/AccessToken.java index 7476bca..c4fb370 100644 --- a/src/main/java/com/ynxbd/push/entity/xbd/wx/RespAccessToken.java +++ b/src/main/java/com/ynxbd/push/entity/xbd/wx/AccessToken.java @@ -1,16 +1,16 @@ package com.ynxbd.push.entity.xbd.wx; import lombok.Data; +import lombok.NoArgsConstructor; import java.io.Serializable; @Data -public class RespAccessToken implements Serializable { +@NoArgsConstructor +public class AccessToken implements Serializable { private static final long serialVersionUID = 36888886677781604L; // 授权token private String accessToken; - // 有效时间(s) - private Integer expiresIn; // 创建时间 private String createTime; } diff --git a/src/main/java/com/ynxbd/push/httpRequest/xbd/wx/WxCacheRequest.java b/src/main/java/com/ynxbd/push/httpRequest/xbd/wx/WxCacheRequest.java index 8055bec..3ff8b45 100644 --- a/src/main/java/com/ynxbd/push/httpRequest/xbd/wx/WxCacheRequest.java +++ b/src/main/java/com/ynxbd/push/httpRequest/xbd/wx/WxCacheRequest.java @@ -4,7 +4,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.ynxbd.push.config.EhCacheConfig; import com.ynxbd.push.config.IniConfig; -import com.ynxbd.push.entity.xbd.wx.RespAccessToken; +import com.ynxbd.push.entity.xbd.wx.AccessToken; import com.ynxbd.push.helper.DateHelper; import com.ynxbd.push.helper.DesEncryptHelper; import com.ynxbd.push.helper.RequestHelper; @@ -14,18 +14,17 @@ import org.ehcache.Cache; @Slf4j public class WxCacheRequest { private static final String SERVICE_URL = "http://127.0.0.1:8080/wx/api/getWxAccessToken.do"; - private static final String LOCALHOST_URL = "http://wx.mzsrmyy.net/wx/api/getWxAccessToken.do"; + private static final String LOCALHOST_URL = "http://wx.hhzyy.com/wx/api/getWxAccessToken.do"; private static final int MAX_RETRY = 3; - static { createAccessTokenCache(); } // 缓存 - private static Cache ACCESS_TOKEN_CACHE; + private static Cache ACCESS_TOKEN_CACHE; private static final String CACHE_NAME = "access_token"; private static final long CACHE_TIME = 7100; @@ -33,39 +32,51 @@ public class WxCacheRequest { private synchronized static void createAccessTokenCache() { if (ACCESS_TOKEN_CACHE == null) { - ACCESS_TOKEN_CACHE = EhCacheConfig.createCacheTTL(String.class, RespAccessToken.class, "wx_access_token_cache", (CACHE_TIME)); // 一个半小时 + ACCESS_TOKEN_CACHE = EhCacheConfig.createCacheTTL(String.class, AccessToken.class, "wx_access_token_cache", (CACHE_TIME)); // 一个半小时 } } public static String getAccessToken() { - RespAccessToken respAccessToken = getWxAccessToken(); - if (respAccessToken == null) { + AccessToken accessToken = getWxAccessToken(); + if (accessToken == null) { return null; } - return respAccessToken.getAccessToken(); + return accessToken.getAccessToken(); } /** * 获取微信token */ - private synchronized static RespAccessToken getWxAccessToken() { + private synchronized static AccessToken getWxAccessToken() { if (ACCESS_TOKEN_CACHE == null) { createAccessTokenCache(); } log.info("启动医院为:{}", IniConfig.getInstance("name")); try { - RespAccessToken respAccessToken = ACCESS_TOKEN_CACHE.get(CACHE_NAME); - if (respAccessToken == null) { - respAccessToken = againGetWxAccessToken(); - ACCESS_TOKEN_CACHE.put(CACHE_NAME, respAccessToken); - return respAccessToken; + AccessToken token = new AccessToken(); + AccessToken cacheToken = ACCESS_TOKEN_CACHE.get(CACHE_NAME); + if (cacheToken != null) { + if (7200 > DateHelper.differCurSecond(cacheToken.getCreateTime())) { // 允许100s的旧token存在(5分钟内可以继续使用佬) + AccessToken respToken = againGetWxAccessToken(); + if (respToken != null) { + token.setAccessToken(respToken.getAccessToken()); + token.setCreateTime(respToken.getCreateTime()); + ACCESS_TOKEN_CACHE.put(CACHE_NAME, respToken); + } + } else { + token.setAccessToken(cacheToken.getAccessToken()); + token.setCreateTime(cacheToken.getCreateTime()); + } + return token; } - if (7200 > DateHelper.differCurSecond(respAccessToken.getCreateTime())) { // 允许100s的旧token存在(5分钟内可以继续使用佬) - respAccessToken = againGetWxAccessToken(); - ACCESS_TOKEN_CACHE.put(CACHE_NAME, respAccessToken); - return respAccessToken; + AccessToken respToken = againGetWxAccessToken(); + if (respToken != null) { + token.setAccessToken(respToken.getAccessToken()); + token.setCreateTime(respToken.getCreateTime()); + ACCESS_TOKEN_CACHE.put(CACHE_NAME, respToken); } + return token; } catch (Exception e) { log.error("请求微信获取Token错误:{}", e.getMessage()); } @@ -75,15 +86,15 @@ public class WxCacheRequest { /** * 根据次数循环获取 */ - private static RespAccessToken againGetWxAccessToken() { - RespAccessToken respAccessToken = null; + private static AccessToken againGetWxAccessToken() { + AccessToken accessToken; for (int i = 0; i < MAX_RETRY; i++) { - respAccessToken = requestWxAccessToken(); + accessToken = requestWxAccessToken(); if (i != 0) { log.error("重试请求第{}次", (i + 1)); } - if (respAccessToken != null) { - return respAccessToken; + if (accessToken != null) { + return accessToken; } if ((i + 1) == MAX_RETRY) { log.error("{} 次请求后未获取到正确token", MAX_RETRY); @@ -96,9 +107,10 @@ public class WxCacheRequest { /** * 请求微信token */ - private static RespAccessToken requestWxAccessToken() { + private static AccessToken requestWxAccessToken() { try { - JSONObject respJson = RequestHelper.getJsonObj(SERVICE_URL, null); + JSONObject respJson = RequestHelper.getJsonObj(LOCALHOST_URL, null); + log.info("[token请求]resp={}", respJson); String code = respJson.getString("code"); if (!"200".equals(code)) { log.info("请求token失败 code={}, message={}", code, respJson.getString("message")); @@ -108,7 +120,8 @@ public class WxCacheRequest { if (data == null || "".equals(data)) { return null; } - RespAccessToken resp = JSON.parseObject(data, RespAccessToken.class); + AccessToken resp = JSON.parseObject(data, AccessToken.class); + System.out.println(resp); if (resp == null) { return null; }