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, 93 insertions(+), 23 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 c19972e..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,10 +5,13 @@ 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; @@ -40,9 +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; - UserService userService; + @Resource + private StringRedisTemplate stringRedisTemplate; + @Resource + private RedisUtils redisUtils; private static WxXCXTempSend wxXCXTempSend; /** @@ -92,35 +101,49 @@ * @return */ public String getAccessToken() throws Exception { - String appid=this.getAppId(); String accessToken = ""; - Boolean aBoolean = wxXCXTempSend.redisTemplate.hasKey(SecurityConstants.APPLETS_ACCESS_TOKEN+"_"+appid); - ValueOperations<String, String> valueOperations = wxXCXTempSend.redisTemplate.opsForValue(); - if(aBoolean){ - Long expireTime = Long.parseLong(valueOperations.get(SecurityConstants.APPLETS_ACCESS_TOKEN_TIME+"_"+appid)); - if(expireTime <= System.currentTimeMillis()){ - wxXCXTempSend.redisTemplate.delete(SecurityConstants.APPLETS_ACCESS_TOKEN+"_"+appid);//如果过期则删除 - wxXCXTempSend.redisTemplate.delete(SecurityConstants.APPLETS_ACCESS_TOKEN_TIME+"_"+appid);//如果过期则删除 + 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+"_"+appid, getAppAccessToken(appid)); - valueOperations.set(SecurityConstants.APPLETS_ACCESS_TOKEN_TIME+"_"+appid, System.currentTimeMillis() + 1100000 + ""); - }else{ - accessToken = valueOperations.get(SecurityConstants.APPLETS_ACCESS_TOKEN+"_"+appid); - } - }else{ - accessToken = getAppAccessToken(appid); - valueOperations.set(SecurityConstants.APPLETS_ACCESS_TOKEN+"_"+appid, accessToken); - valueOperations.set(SecurityConstants.APPLETS_ACCESS_TOKEN_TIME+"_"+appid, System.currentTimeMillis() + 1100000 + ""); - } return accessToken; } - public String getAppAccessToken(String appid) throws Exception { - R<SysAppConfigVO> sysAppConfigVOR=userService.selectByAppid(appid); + + 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=" + sysAppConfigVOR.getData().getAppId() + "&secret=" + sysAppConfigVOR.getData().getSecret(); + 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")) { @@ -133,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 @@ -277,6 +344,9 @@ public void init() { wxXCXTempSend = this; wxXCXTempSend.redisTemplate = this.redisTemplate; + wxXCXTempSend.stringRedisTemplate=this.stringRedisTemplate; + wxXCXTempSend.redisUtils=this.redisUtils; + } } -- Gitblit v1.7.1