From bbda2ee1af4e86d76f93e00386d77efb56c60d5f Mon Sep 17 00:00:00 2001
From: puhanshu <a9236326>
Date: 星期六, 23 七月 2022 15:42:06 +0800
Subject: [PATCH] bug修改

---
 springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/WxXCXTempSend.java |  252 +++++++++++++++++++++++++++++--------------------
 1 files changed, 148 insertions(+), 104 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 85cac1b..c19972e 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
@@ -1,134 +1,65 @@
 package com.panzhihua.common.utlis;
 
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-import com.panzhihua.common.constants.SecurityConstants;
-import lombok.extern.slf4j.Slf4j;
+import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.nio.charset.StandardCharsets;
+import java.util.Map;
+
+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.service.user.UserService;
 import org.apache.commons.fileupload.FileItem;
 import org.apache.commons.fileupload.FileItemFactory;
 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
 import org.apache.http.entity.ContentType;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.data.redis.core.ValueOperations;
 import org.springframework.stereotype.Component;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.commons.CommonsMultipartFile;
 
-import java.io.*;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.panzhihua.common.constants.SecurityConstants;
+
+import lombok.extern.slf4j.Slf4j;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
 
 @Slf4j
 @Component
-public class WxXCXTempSend {
+public class WxXCXTempSend extends BaseController {
 
+    public static final String APP_ID = "wx118de8a734d269f0";
+    private static final String APP_SECRET = "0264342daefde5cd70a6adada09ee5b1";
     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";
+    @Resource
+    private RedisTemplate redisTemplate;
+    UserService userService;
 
-    public static final String APP_ID = "wx0cef797390444b75";
-    private static final String APP_SECRET = "c7ea9aaa7e391a487e8a5b9ba61045d1";
-
-    @Autowired
-    private StringRedisTemplate redisTemplate;
-
-    /**
-     * 获取小程序token,(ps:0=token获取失败)
-     *
-     * @return
-     */
-    public String getAccessToken() throws Exception {
-//        String accessToken = ;
-//        Boolean aBoolean = redisTemplate.hasKey(SecurityConstants.APPLETS_ACCESS_TOKEN);
-//        ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();
-//        if(aBoolean){
-//            Long expireTime = Long.parseLong(valueOperations.get(SecurityConstants.APPLETS_ACCESS_TOKEN_TIME));
-//            if(expireTime <= System.currentTimeMillis()){
-//                redisTemplate.delete(SecurityConstants.APPLETS_ACCESS_TOKEN);//如果过期则删除
-//                redisTemplate.delete(SecurityConstants.APPLETS_ACCESS_TOKEN_TIME);//如果过期则删除
-//
-//                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 getAppAccessToken();
-    }
-
-    private String getAppAccessToken() throws Exception{
-        String accessToken = "0";
-        try {
-            //此处APP_ID APP_SECRET  在微信小程序后端可见
-//            String accessTokenUrl = String.format(TEMP_URL, APP_ID, APP_SECRET);
-            String accessTokenUrl = ACCESS_TOKEN_URL + "&appid=" + APP_ID + "&secret=" + APP_SECRET;
-            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;
-    }
-
-    public String getMediaId(String accessToken){
-        String mediaId = "";
-        Boolean aBoolean = redisTemplate.hasKey(SecurityConstants.APPLETS_ACCESS_MEDIA_ID);
-        ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();
-        if(aBoolean){
-            Long expireTime = Long.parseLong(valueOperations.get(SecurityConstants.APPLETS_ACCESS_MEDIA_ID_TIME));
-            if(expireTime <= System.currentTimeMillis()){
-                redisTemplate.delete(SecurityConstants.APPLETS_ACCESS_MEDIA_ID);//如果过期则删除
-                redisTemplate.delete(SecurityConstants.APPLETS_ACCESS_MEDIA_ID_TIME);//如果过期则删除
-                mediaId = getAppMediaId(accessToken);
-                valueOperations.set(SecurityConstants.APPLETS_ACCESS_MEDIA_ID, mediaId);
-                valueOperations.set(SecurityConstants.APPLETS_ACCESS_MEDIA_ID_TIME, System.currentTimeMillis() + 259000000 + "");
-            }else{
-                mediaId = valueOperations.get(SecurityConstants.APPLETS_ACCESS_MEDIA_ID);
-            }
-        }else{
-            mediaId = getAppMediaId(accessToken);
-            valueOperations.set(SecurityConstants.APPLETS_ACCESS_MEDIA_ID, mediaId);
-            valueOperations.set(SecurityConstants.APPLETS_ACCESS_MEDIA_ID_TIME, System.currentTimeMillis() + 259000000 + "");
-        }
-        return mediaId;
-    }
-
-    private String getAppMediaId(String accessToken){
-        String appMediaId = "";
-        try {
-            MultipartFile file = createFileItem(APP_IMAGE_URL,APP_IMAGE_NAME);
-            appMediaId = uploadFile(file,accessToken);
-        }catch (Exception e){
-            log.error("上传临时图片素材失败,错误原因:" + e.getMessage());
-        }
-        return appMediaId;
-    }
-
+    private static WxXCXTempSend wxXCXTempSend;
     /**
      * url转变为 MultipartFile对象
+     *
      * @param url
      * @param fileName
      * @return
      * @throws Exception
      */
-    private static MultipartFile createFileItem(String url, String fileName) throws Exception{
+    private static MultipartFile createFileItem(String url, String fileName) throws Exception {
         FileItem item = null;
         try {
-            HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
+            HttpURLConnection conn = (HttpURLConnection)new URL(url).openConnection();
             conn.setReadTimeout(30000);
             conn.setConnectTimeout(30000);
-            //设置应用程序要从网络连接读取数据
+            // 设置应用程序要从网络连接读取数据
             conn.setDoInput(true);
             conn.setRequestMethod("GET");
             if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
@@ -136,7 +67,8 @@
 
                 FileItemFactory factory = new DiskFileItemFactory(16, null);
                 String textFieldName = "uploadfile";
-                item = factory.createItem(textFieldName, ContentType.APPLICATION_OCTET_STREAM.toString(), false, fileName);
+                item =
+                    factory.createItem(textFieldName, ContentType.APPLICATION_OCTET_STREAM.toString(), false, fileName);
                 OutputStream os = item.getOutputStream();
 
                 int bytesRead = 0;
@@ -155,6 +87,112 @@
     }
 
     /**
+     * 获取小程序token,(ps:0=token获取失败)
+     *
+     * @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);//如果过期则删除
+
+         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);
+        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();
+            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
+     * @throws Exception 异常
+     */
+    public String getXQAppAccessToken() throws Exception {
+        String accessToken = "0";
+        try {
+            // 此处APP_ID APP_SECRET 在微信小程序后端可见
+            // String accessTokenUrl = String.format(TEMP_URL, APP_ID, APP_SECRET);
+            String accessTokenUrl = ACCESS_TOKEN_URL + "&appid=" + APP_ID + "&secret=" + APP_SECRET;
+            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;
+    }
+
+    public String getMediaId(String accessToken) {
+        String mediaId = "";
+        Boolean aBoolean = redisTemplate.hasKey(SecurityConstants.APPLETS_ACCESS_MEDIA_ID);
+        ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();
+        if (aBoolean) {
+            Long expireTime = Long.parseLong(valueOperations.get(SecurityConstants.APPLETS_ACCESS_MEDIA_ID_TIME));
+            if (expireTime <= System.currentTimeMillis()) {
+                redisTemplate.delete(SecurityConstants.APPLETS_ACCESS_MEDIA_ID);// 如果过期则删除
+                redisTemplate.delete(SecurityConstants.APPLETS_ACCESS_MEDIA_ID_TIME);// 如果过期则删除
+                mediaId = getAppMediaId(accessToken);
+                valueOperations.set(SecurityConstants.APPLETS_ACCESS_MEDIA_ID, mediaId);
+                valueOperations.set(SecurityConstants.APPLETS_ACCESS_MEDIA_ID_TIME,
+                    System.currentTimeMillis() + 259000000 + "");
+            } else {
+                mediaId = valueOperations.get(SecurityConstants.APPLETS_ACCESS_MEDIA_ID);
+            }
+        } else {
+            mediaId = getAppMediaId(accessToken);
+            valueOperations.set(SecurityConstants.APPLETS_ACCESS_MEDIA_ID, mediaId);
+            valueOperations.set(SecurityConstants.APPLETS_ACCESS_MEDIA_ID_TIME,
+                System.currentTimeMillis() + 259000000 + "");
+        }
+        return mediaId;
+    }
+
+    private String getAppMediaId(String accessToken) {
+        String appMediaId = "";
+        try {
+            MultipartFile file = createFileItem(APP_IMAGE_URL, APP_IMAGE_NAME);
+            appMediaId = uploadFile(file, accessToken);
+        } catch (Exception e) {
+            log.error("上传临时图片素材失败,错误原因:" + e.getMessage());
+        }
+        return appMediaId;
+    }
+
+    /**
      * 微信小程序临时素材上传
      *
      * @param file
@@ -162,12 +200,12 @@
      * @author yixiu
      * @throws Exception
      */
-    public String uploadFile(MultipartFile file,String access_token) throws Exception {
+    public String uploadFile(MultipartFile file, String access_token) throws Exception {
         String url = "https://api.weixin.qq.com/cgi-bin/media/upload?access_token=" + access_token + "&type=image";
         String result = null;
         String fileName = file.getOriginalFilename();
         URL urlObj = new URL(url);
-        HttpURLConnection con = (HttpURLConnection) urlObj.openConnection();
+        HttpURLConnection con = (HttpURLConnection)urlObj.openConnection();
         con.setRequestMethod("POST");
         con.setDoInput(true);
         con.setDoOutput(true);
@@ -186,7 +224,7 @@
         sb.append("\r\n");
         sb.append("Content-Disposition: form-data;name=\"media\";filename=\"" + fileName + "\"\r\n");
         sb.append("Content-Type:application/octet-stream\r\n\r\n");
-        byte[] head = sb.toString().getBytes("utf-8");
+        byte[] head = sb.toString().getBytes(StandardCharsets.UTF_8);
         // 获得输出流
         OutputStream out = new DataOutputStream(con.getOutputStream());
         // 输出表头
@@ -201,7 +239,7 @@
         }
         in.close();
         // 结尾部分
-        byte[] foot = ("\r\n--" + BOUNDARY + "--\r\n").getBytes("utf-8");// 定义最后数据分隔线
+        byte[] foot = ("\r\n--" + BOUNDARY + "--\r\n").getBytes(StandardCharsets.UTF_8);// 定义最后数据分隔线
         out.write(foot);
         out.flush();
         out.close();
@@ -235,4 +273,10 @@
         return null;
     }
 
+    @PostConstruct
+    public void init() {
+        wxXCXTempSend = this;
+        wxXCXTempSend.redisTemplate = this.redisTemplate;
+    }
+
 }

--
Gitblit v1.7.1