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