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; 
 | 
    } 
 | 
  
 | 
  
 | 
} 
 |