From 10df7e29b51d6a2efacc83d870856f57d97a9b66 Mon Sep 17 00:00:00 2001 From: yanghui <2536613402@qq.com> Date: 星期一, 24 十月 2022 13:48:24 +0800 Subject: [PATCH] #feat 修改别名 --- springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/WxXCXTempSend.java | 116 ++++++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 96 insertions(+), 20 deletions(-) diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/WxXCXTempSend.java b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/WxXCXTempSend.java index ccfe170..3493479 100644 --- a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/WxXCXTempSend.java +++ b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/WxXCXTempSend.java @@ -5,8 +5,14 @@ import java.net.URL; import java.nio.charset.StandardCharsets; import java.util.Map; +import java.util.concurrent.TimeUnit; +import cn.hutool.core.util.StrUtil; import com.panzhihua.common.controller.BaseController; +import com.panzhihua.common.model.vos.R; +import com.panzhihua.common.model.vos.user.SysAppConfigVO; +import com.panzhihua.common.redis.RedisUtils; +import com.panzhihua.common.service.user.UserService; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileItemFactory; import org.apache.commons.fileupload.disk.DiskFileItemFactory; @@ -37,8 +43,15 @@ private static String ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential"; private static String APP_IMAGE_URL = "https://www.psciio.com//idcard/8fa82cfba258498eab2fa818220fb592.jpg"; private static String APP_IMAGE_NAME = "5.jpg"; + private static String WX_CALL_BACK = "https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token="; + //2小时 + private static final Long EXPIRE_TIME = 2L; @Resource private RedisTemplate redisTemplate; + @Resource + private StringRedisTemplate stringRedisTemplate; + @Resource + private RedisUtils redisUtils; private static WxXCXTempSend wxXCXTempSend; /** @@ -89,32 +102,48 @@ */ public String getAccessToken() throws Exception { String accessToken = ""; - Boolean aBoolean = wxXCXTempSend.redisTemplate.hasKey(SecurityConstants.APPLETS_ACCESS_TOKEN); - ValueOperations<String, String> valueOperations = wxXCXTempSend.redisTemplate.opsForValue(); - if(aBoolean){ - Long expireTime = Long.parseLong(valueOperations.get(SecurityConstants.APPLETS_ACCESS_TOKEN_TIME)); - if(expireTime <= System.currentTimeMillis()){ - wxXCXTempSend.redisTemplate.delete(SecurityConstants.APPLETS_ACCESS_TOKEN);//如果过期则删除 - wxXCXTempSend.redisTemplate.delete(SecurityConstants.APPLETS_ACCESS_TOKEN_TIME);//如果过期则删除 + String appId = this.getAppId(); + accessToken=wxXCXTempSend.stringRedisTemplate.boundValueOps("access_token:access_token:"+ appId).get(); + if (appId.equals(APP_ID)){ + accessToken = validAccessToken(accessToken, appId,APP_SECRET); + } - valueOperations.set(SecurityConstants.APPLETS_ACCESS_TOKEN, accessToken); - valueOperations.set(SecurityConstants.APPLETS_ACCESS_TOKEN_TIME, System.currentTimeMillis() + 1100000 + ""); - }else{ - accessToken = valueOperations.get(SecurityConstants.APPLETS_ACCESS_TOKEN); - } - }else{ - accessToken = getAppAccessToken(); - valueOperations.set(SecurityConstants.APPLETS_ACCESS_TOKEN, accessToken); - valueOperations.set(SecurityConstants.APPLETS_ACCESS_TOKEN_TIME, System.currentTimeMillis() + 1100000 + ""); - } return accessToken; } - public String getAppAccessToken() throws Exception { + + public String getAccessToken(String appId) throws Exception { + String accessToken = ""; + accessToken=wxXCXTempSend.stringRedisTemplate.boundValueOps("access_token:access_token:"+appId).get(); + if (appId.equals(APP_ID)){ + accessToken = validAccessToken(accessToken, appId,APP_SECRET); + } + return accessToken; + } + + private String validAccessToken(String accessToken, String appId,String appSecret) throws Exception { + if (StrUtil.isEmpty(accessToken)) { + //重新获取并设置到缓存 该方法暂时只用在花城 + accessToken = getAppAccessToken(appId, appSecret); + wxXCXTempSend.stringRedisTemplate.opsForValue().set("access_token:access_token:" + appId, accessToken, EXPIRE_TIME,TimeUnit.HOURS); + } else { + String accessTokenUrl = WX_CALL_BACK + accessToken; + String result = HttpClientUtil.httpGet(accessTokenUrl, null, null); + Map<String, Object> resultMap = JSON.parseObject(result, Map.class); + //如果Access_token过期也重新获取 + if (resultMap.containsKey("errcode")) { + accessToken = getAppAccessToken(appId, appSecret); + wxXCXTempSend.stringRedisTemplate.opsForValue().set("access_token:access_token:" + appId, accessToken, EXPIRE_TIME,TimeUnit.HOURS); + } + } + return accessToken; + } + + public String getAppAccessToken(String appId,String appSecret) throws Exception { String accessToken = "0"; try { - log.info("获取微信token参数:appid=" + APP_ID + ",appSecret=" + APP_SECRET); - String accessTokenUrl = ACCESS_TOKEN_URL + "&appid=" + APP_ID + "&secret=" + APP_SECRET; + log.info("获取微信token参数:appid=" + appId + ",appSecret=" + appSecret); + String accessTokenUrl = ACCESS_TOKEN_URL + "&appid=" + appId + "&secret=" + appSecret; String result = HttpClientUtil.httpGet(accessTokenUrl, null, null); Map<String, Object> resultMap = JSON.parseObject(result, Map.class); if (resultMap.containsKey("access_token")) { @@ -127,6 +156,50 @@ return accessToken; } + /** + * 发布消息时重新设置access_token 防止过期 + * @param appId + * @param appSecret + * @throws Exception + */ + public void setAppAccessTokenToCache(String appId,String appSecret) throws Exception{ + String accessToken = "0"; + try { + log.info("获取微信token参数:appid=" + appId + ",appSecret=" + appSecret); + String accessTokenUrl = ACCESS_TOKEN_URL + "&appid=" + appId + "&secret=" + appSecret; + String result = HttpClientUtil.httpGet(accessTokenUrl, null, null); + Map<String, Object> resultMap = JSON.parseObject(result, Map.class); + if (resultMap.containsKey("access_token")) { + accessToken = resultMap.get("access_token").toString(); + wxXCXTempSend.stringRedisTemplate.opsForValue().set("access_token:access_token:" + appId, accessToken, EXPIRE_TIME,TimeUnit.HOURS); + } + } catch (IOException ioe) { + log.error("小程序http请求异常"); + ioe.printStackTrace(); + } + } + + public String getAccessTokenNoValid(String appId) throws Exception { + String accessToken = ""; + accessToken=wxXCXTempSend.stringRedisTemplate.boundValueOps("access_token:access_token:"+appId).get(); + return accessToken; + } + public String getWsAccessToken() throws Exception { + String accessToken = "0"; + try { +// log.info("获取微信token参数:appid=" + APP_ID + ",appSecret=" + APP_SECRET); + String accessTokenUrl = ACCESS_TOKEN_URL + "&appid=wx98d62711dfbd8425"+ "&secret=97a2a10b990c2774ed279724337b5337"; + String result = HttpClientUtil.httpGet(accessTokenUrl, null, null); + Map<String, Object> resultMap = JSON.parseObject(result, Map.class); + if (resultMap.containsKey("access_token")) { + accessToken = resultMap.get("access_token").toString(); + } + } catch (IOException ioe) { + log.error("小程序http请求异常"); + ioe.printStackTrace(); + } + return accessToken; + } /** * 获取西区社区通微信token * @return 西区社区通微信token @@ -271,6 +344,9 @@ public void init() { wxXCXTempSend = this; wxXCXTempSend.redisTemplate = this.redisTemplate; + wxXCXTempSend.stringRedisTemplate=this.stringRedisTemplate; + wxXCXTempSend.redisUtils=this.redisUtils; + } } -- Gitblit v1.7.1