package com.matrix.system.shopXcx.api; 
 | 
  
 | 
import com.matrix.core.tools.LogUtil; 
 | 
import com.matrix.core.tools.PropertiesUtil; 
 | 
import com.matrix.core.tools.StringUtils; 
 | 
import com.matrix.component.tools.HttpRequest; 
 | 
import com.matrix.component.tools.HttpResponse; 
 | 
import net.sf.json.JSONObject; 
 | 
  
 | 
import java.io.IOException; 
 | 
  
 | 
public class WeChatApiTools { 
 | 
    /** 
 | 
     * 小程序秘钥 
 | 
     */ 
 | 
    private static final String XCX_SECRET = "xcx_secret"; 
 | 
    /** 
 | 
     * 小程序appid 
 | 
     */ 
 | 
    private static final String XCX_APPID = "xcx_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 = ""; 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 获取小程序登录地址 
 | 
     *  
 | 
     * @author JIANGYOUYAO 
 | 
     * @email 935090232@qq.com 
 | 
     * @date 2018年5月23日 
 | 
     * @param code 
 | 
     * @return 
 | 
     */ 
 | 
    public static String getXcxLoginUrl(String code) { 
 | 
        String wechatLoginUrl = PropertiesUtil.getString(WECHAT_LOGIN_URL); 
 | 
        return String.format(wechatLoginUrl, getAppid(), getSecret(), code); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取小程序APPId 
 | 
     * @return 
 | 
     */ 
 | 
    public static String  getAppid(){ 
 | 
        if(StringUtils.isBlank(appid)){ 
 | 
            appid = PropertiesUtil.getString(XCX_APPID); 
 | 
        } 
 | 
        return  appid; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取小程序秘钥 
 | 
     * @return 
 | 
     */ 
 | 
    public static String  getSecret(){ 
 | 
        if(StringUtils.isBlank(secret)){ 
 | 
            secret = PropertiesUtil.getString(XCX_SECRET); 
 | 
        } 
 | 
        return  secret; 
 | 
    } 
 | 
  
 | 
  
 | 
  
 | 
    /** 
 | 
     * 清空token 
 | 
     */ 
 | 
    public static void cleanAccessToken() { 
 | 
        preTime = null; 
 | 
        accessToken = ""; 
 | 
    } 
 | 
  
 | 
    public static String getAccessToken() throws IOException { 
 | 
  
 | 
        if (isTokenInvalid()) { 
 | 
            synchronized (accessToken) { 
 | 
                if (isTokenInvalid()) { 
 | 
                    LogUtil.info("刷新微信accessToken"); 
 | 
                    HttpRequest reqObj = new HttpRequest(); 
 | 
                    HttpResponse result = null; 
 | 
                    result = reqObj 
 | 
                            .sendHttpGet("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" 
 | 
                                    + getAppid() + "&secret=" + getSecret(), null); 
 | 
                    JSONObject json = JSONObject.fromObject(result.getDataString()); 
 | 
                    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; 
 | 
    } 
 | 
  
 | 
  
 | 
} 
 |