Просмотр исходного кода

处理 获取access_token 功能

java110 лет назад: 5
Родитель
Сommit
1cb0f1b16e

+ 56 - 0
java110-core/src/main/java/com/java110/core/factory/WechatFactory.java

@@ -1,5 +1,14 @@
 package com.java110.core.factory;
 
+import com.alibaba.fastjson.JSONObject;
+import com.java110.utils.cache.JWTCache;
+import com.java110.utils.constant.WechatConstant;
+import com.java110.utils.factory.ApplicationContextFactory;
+import com.java110.utils.util.StringUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.client.RestTemplate;
+
 import java.util.Date;
 
 /**
@@ -12,6 +21,13 @@ import java.util.Date;
  **/
 public class WechatFactory {
 
+    private static Logger logger = LoggerFactory.getLogger(WechatFactory.class);
+
+
+    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 +35,44 @@ public class WechatFactory {
         });
         return str;
     }
+
+    /**
+     * 获取accessToken
+     *
+     * @param appId     公众号ID
+     * @param appSecure
+     * @return
+     */
+    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 url = WechatConstant.GET_ACCESS_TOKEN.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 "";
+    }
 }

+ 3 - 0
java110-utils/src/main/java/com/java110/utils/constant/WechatConstant.java

@@ -30,4 +30,7 @@ public class WechatConstant {
     public static final String MSG_REGX_TYPE_ALL = "1";
     public static final String MSG_MENU_ID = "menu";
 
+
+    public static final String GET_ACCESS_TOKEN = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=SECRET";
+
 }

+ 3 - 3
java110-utils/src/main/java/com/java110/utils/lock/DistributedLock.java

@@ -22,9 +22,10 @@ public class DistributedLock extends BaseCache {
 
     /**
      * 获取UUID
+     *
      * @return
      */
-    public static String getLockUUID(){
+    public static String getLockUUID() {
         return UUID.randomUUID().toString();
     }
 
@@ -64,13 +65,12 @@ public class DistributedLock extends BaseCache {
      * @param expireTime 超期时间
      * @return 是否获取成功
      */
-    public static boolean tryGetDistributedLock(Jedis redis, String lockKey, String requestId, int expireTime) {
+    private static boolean tryGetDistributedLock(Jedis redis, String lockKey, String requestId, int expireTime) {
         String result = redis.set(lockKey, requestId, SET_IF_NOT_EXIST, SET_WITH_EXPIRE_TIME, expireTime);
 
         if (LOCK_SUCCESS.equals(result)) {
             return true;
         }
-
         return false;
 
     }

+ 19 - 0
service-front/src/main/java/com/java110/front/properties/WechatAuthProperties.java

@@ -29,6 +29,9 @@ public class WechatAuthProperties {
     private String wxPayUnifiedOrder;
     private String wxNotifyUrl;
 
+    private String wechatAppId;//微信公众号ID
+    private String wechatAppSecret;//微信公众号秘钥
+
     public String getSessionHost() {
         return sessionHost;
     }
@@ -92,4 +95,20 @@ public class WechatAuthProperties {
     public void setWxNotifyUrl(String wxNotifyUrl) {
         this.wxNotifyUrl = wxNotifyUrl;
     }
+
+    public String getWechatAppId() {
+        return wechatAppId;
+    }
+
+    public void setWechatAppId(String wechatAppId) {
+        this.wechatAppId = wechatAppId;
+    }
+
+    public String getWechatAppSecret() {
+        return wechatAppSecret;
+    }
+
+    public void setWechatAppSecret(String wechatAppSecret) {
+        this.wechatAppSecret = wechatAppSecret;
+    }
 }

+ 4 - 0
service-front/src/main/resources/wechatAuth.properties

@@ -7,4 +7,8 @@ java110.auth.wechat.mchId=mchId
 java110.auth.wechat.wxPayUnifiedOrder=https://api.mch.weixin.qq.com/pay/unifiedorder
 java110.auth.wechat.wxNotifyUrl=https://app.demo.winqi.cn/app/payment/notify
 
+# ¹«ÖÚºÅÐÅÏ¢
+java110.auth.wechat.wechatAppId=key
+java110.auth.wechat.wechatAppSecret=mchId
+