From 05683f2b2bdbdbe21cf17ad523c21ab338bd1c54 Mon Sep 17 00:00:00 2001
From: wuxw <928255095@qq.com>
Date: 星期二, 19 七月 2022 21:49:55 +0800
Subject: [PATCH] 优化添加设备 功能

---
 java110-core/src/main/java/com/java110/core/factory/WechatFactory.java |  118 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 118 insertions(+), 0 deletions(-)

diff --git a/java110-core/src/main/java/com/java110/core/factory/WechatFactory.java b/java110-core/src/main/java/com/java110/core/factory/WechatFactory.java
old mode 100644
new mode 100755
index 87e490e..8f175b3
--- a/java110-core/src/main/java/com/java110/core/factory/WechatFactory.java
+++ b/java110-core/src/main/java/com/java110/core/factory/WechatFactory.java
@@ -1,5 +1,20 @@
 package com.java110.core.factory;
 
+import com.alibaba.fastjson.JSONObject;
+import com.java110.core.annotation.Java110Synchronized;
+import com.java110.utils.cache.JWTCache;
+import com.java110.utils.cache.MappingCache;
+import com.java110.utils.constant.WechatConstant;
+import com.java110.utils.factory.ApplicationContextFactory;
+import com.java110.utils.util.StringUtil;
+
+import org.apache.commons.codec.binary.Base64;
+import org.slf4j.Logger;
+import com.java110.core.log.LoggerFactory;
+import org.springframework.web.client.RestTemplate;
+import javax.crypto.Cipher;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
 import java.util.Date;
 
 /**
@@ -12,6 +27,15 @@
  **/
 public class WechatFactory {
 
+    private static Logger logger = LoggerFactory.getLogger(WechatFactory.class);
+
+    private static final String password = "you are bad boy!";
+
+
+    private static final String WECHAT = "WECHAT";
+
+    private static final String SPLIT_STUB = "-";
+
     public static String formatText(String toUserName, String fromUserName, String content) {
         String str = "";
         str = String.format("<xml><ToUserName><![CDATA[%1$s]]></ToUserName><FromUserName><![CDATA[%2$s]]></FromUserName><CreateTime>%3$s</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[%4$s]]></Content><FuncFlag>0</FuncFlag></xml>", new Object[]{
@@ -19,4 +43,98 @@
         });
         return str;
     }
+
+    /**
+     * 鑾峰彇accessToken
+     *
+     * @param appId     鍏紬鍙稩D
+     * @param appSecure
+     * @return
+     */
+    @Java110Synchronized(value = "appId")
+    public static String getAccessToken(String appId, String appSecure) {
+        String accessToken = JWTCache.getValue(WECHAT + appId);
+        if (StringUtil.isEmpty(accessToken)) {
+            return refreshAccessToken(appId, appSecure);
+        }
+        return accessToken;
+    }
+
+    /**
+     * 鍒锋柊 access_token
+     *
+     * @param appId     搴旂敤ID
+     * @param appSecure 搴旂敤绉橀挜
+     * @return
+     */
+    private static String refreshAccessToken(String appId, String appSecure) {
+        String getAccessToken = MappingCache.getRemark(WechatConstant.WECHAT_DOMAIN,WechatConstant.GET_ACCESS_TOKEN_URL);
+        if(StringUtil.isEmpty(getAccessToken)){
+            getAccessToken = WechatConstant.GET_ACCESS_TOKEN;
+        }
+        String url = getAccessToken.replace("APPID", appId)
+                .replace("SECRET", appSecure);
+        RestTemplate outRestTemplate = ApplicationContextFactory.getBean("outRestTemplate", RestTemplate.class);
+        String response = outRestTemplate.getForObject(url, String.class);
+
+        logger.debug("鑾峰彇access_token 鍏ュ弬锛�" + url + " 杩斿洖鍙傛暟" + response);
+
+        JSONObject responseObj = JSONObject.parseObject(response);
+
+        if (responseObj.containsKey("access_token")) {
+            String accessToken = responseObj.getString("access_token");
+            int expiresIn = responseObj.getInteger("expires_in");
+            JWTCache.setValue(WECHAT + appId, accessToken, expiresIn - 200);
+            return accessToken;
+        }
+        return "";
+    }
+
+    /**
+     * 鑾峰彇寰俊椤甸潰ID
+     *
+     * @param appId
+     * @return
+     */
+    public static String getWId(String appId) {
+        return AuthenticationFactory.encrypt(password, appId);
+    }
+
+    /**
+     * 鑾峰彇寰俊AppId
+     *
+     * @param wId
+     * @return
+     */
+    public static String getAppId(String wId) {
+        wId = wId.replace(" ", "+");
+        return AuthenticationFactory.decrypt(password, wId);
+    }
+
+
+    public static String getPhoneNumberBeanS5(String decryptData, String key, String iv) {
+        /*
+         *杩欓噷浣犳病蹇呰闈炴寜鐓ф垜鐨勬柟寮忓啓锛屼笅闈㈡墦浠g爜涓昏鏄湪涓�涓嚜宸辩殑绫讳腑 鏀句笂decrypts5杩欎釜瑙e瘑宸ュ叿锛屽伐鍏峰湪涓嬫柟鏈変唬鐮�
+         */
+        String resultMessage = decryptS5(decryptData, "UTF-8", key, iv);
+        return resultMessage;
+    }
+
+    public static String decryptS5(String sSrc, String encodingFormat, String sKey, String ivParameter) {
+        try {
+        	Base64 base64 = new Base64();
+            byte[] raw = base64.decode(sKey);
+            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
+            IvParameterSpec iv = new IvParameterSpec(base64.decode(ivParameter));
+            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
+            cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
+            byte[] myendicod = base64.decode(sSrc);
+            byte[] original = cipher.doFinal(myendicod);
+            String originalString = new String(original, encodingFormat);
+            return originalString;
+        } catch (Exception ex) {
+            return null;
+        }
+    }
+
 }

--
Gitblit v1.8.0