1
935090232@qq.com
2020-12-01 611146e69aaa62296cf84f2ccb5aca5ebba17677
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
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;
    }
 
 
}