Helius
2021-01-09 e3ccb13fdd386d41ea2f721924861f6bb64e6708
zq-erp/src/main/java/com/matrix/system/shopXcx/api/WeChatGzhApiTools.java
New file
@@ -0,0 +1,134 @@
package com.matrix.system.shopXcx.api;
import com.matrix.component.tools.HttpRequest;
import com.matrix.component.tools.HttpResponse;
import com.matrix.core.exception.GlobleException;
import com.matrix.core.tools.LogUtil;
import com.matrix.core.tools.PropertiesUtil;
import com.matrix.core.tools.StringUtils;
import net.sf.json.JSONObject;
import java.io.IOException;
/***
 * 公众号api工具
 */
public class WeChatGzhApiTools {
   /**
    * 公众号秘钥
    */
   private static final String GZH_SECRET = "gzh_secret";
   /**
    * 公众号appid
    */
   private static final String GZH_APPID = "gzh_appid";
   /**
    * 微信登录url
    */
   private static final String WECHAT_LOGIN_URL = "wechar_login_url";
   /**
    * 上一次获取时间
    */
   private static Long preTime;
   /**
    * 当前有效的微信token
    */
   private static String accessToken = "";
   private static String appid = "";
   private static String secret = "";
   /**
    * 获取公众号APPId
    * @return
    */
   public static String  getAppid(){
      if(StringUtils.isBlank(appid)){
         appid = PropertiesUtil.getString(GZH_APPID);
      }
      return  appid;
   }
   /**
    * 获取公众号秘钥
    * @return
    */
   public static String  getSecret(){
      if(StringUtils.isBlank(secret)){
         secret = PropertiesUtil.getString(GZH_SECRET);
      }
      return  secret;
   }
   /**
    * 清空token
    */
   public static void cleanAccessToken() {
      preTime = null;
      accessToken = "";
   }
   public static String getAccessToken(String gzhAppId, String gzhSecret) {
      if (isTokenInvalid()) {
         synchronized (accessToken) {
            if (isTokenInvalid()) {
               LogUtil.info("刷新微信accessToken");
               HttpRequest reqObj = new HttpRequest();
               HttpResponse result = null;
               try {
                  result = reqObj
                        .sendHttpGet("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="
                              + gzhAppId+ "&secret=" + gzhSecret, null);
               } catch (IOException e) {
                  LogUtil.error("获取公众号accessToken失败"+e.getMessage(),e);
                  throw new GlobleException(e.getMessage());
               }
               JSONObject json = JSONObject.fromObject(result.getDataString());
               if(json.has("errmsg")){
                  throw new GlobleException("获取返回刷新的accessToken失败"+json.toString());
               }else{
                  String access_token = json.getString("access_token");
                  accessToken = access_token;
                  preTime = System.currentTimeMillis();
                  LogUtil.info("返回刷新的accessToken={}", accessToken);
                  return access_token;
               }
            } else {
               return accessToken;
            }
         }
      } else {
         LogUtil.info("返回现有accessToken={}", accessToken);
         return accessToken;
      }
   }
   /**
    * token是否无效
    *  TODO 由于现在有多个环境,为了防止冲突每次都获取新的token
    * @return
    */
   private static boolean isTokenInvalid() {
      /**      if (StringUtils.isNotBlank(accessToken) && preTime != null) {
       Long now = System.currentTimeMillis() / 1000;
       Long pre = preTime / 1000;
       boolean invalid = (now - pre) > 6200;
       return invalid;
       } else {
       return true;
       }*/
      return true;
   }
}