TangCheng
8 天以前 2ad7fa136c4c26a0ff6a7019cb8ecf741a71751d
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
package com.smtaiserver.smtaiserver.weixinLogin;
 
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.smtaiserver.smtaiserver.core.SMTAIServerApp;
import com.smtservlet.util.Json;
 
import java.util.Map;
 
/**
 * description: WeChatUtils 微信获取用户工具类<br>
 *
 * @date: 2021/8/19 0019 上午 10:05 <br>
 * @author: William <br>
 * version: 1.0 <br>
 */
public class WeChatUtils {
 
    private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
    /**
     * 获取微信accessToken路径
     */
    private static final String GET_ACCESS_TOKEN_URL = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
 
    public WeChatUtils() throws Exception {
    }
 
 
    /**
     * description: getAccessToken  根据code获取accessToken<br>
     * version: 1.0 <br>
     *
     * @param code 微信用户授权code
     * @return java.util.Map<java.lang.String, java.lang.String>
     * @date: 2021/8/19 0019 上午 10:10 <br>
     * @author: William <br>
     */
    public static Map<String, String> getAccessToken(String code) throws Exception {
        Json weixinAppidSecret = (Json) SMTAIServerApp.getApp().getGlobalConfig("weixin_appid_secret");
        String appid = weixinAppidSecret.safeGetStr("appid", null);
        String secret = weixinAppidSecret.safeGetStr("secret", null);
        return getAccessToken(code, appid, secret);
    }
 
    /**
     * description: getAccessToken 根据code获取微信用户信息,返回map如果正确map包含access_token ,如果错误则包含:errcode<br>
     * version: 1.0 <br>
     *
     * @param code      微信授权code
     * @param appId     微信appId
     * @param appSecret 微信appSecret
     * @return java.util.Map<java.lang.String, java.lang.String>
     * @date: 2021/8/19 0019 上午 10:11 <br>
     * @author: William <br>
     */
    public static Map<String, String> getAccessToken(String code, String appId, String appSecret) throws Exception {
        //判断所有字段不能为空
        if (isAnyBlank(code, appId, appSecret)) {
            throw new IllegalArgumentException("参数错误");
        }
        String requestUrl = GET_ACCESS_TOKEN_URL
                .replace("APPID", appId)
                .replace("SECRET", appSecret)
                .replace("CODE", code);
        String result = HttpUtil.get(requestUrl);
        return parseMap(result);
    }
 
    /**
     * description: isAnyBlank 判断是否存在空字符串,Hutool未编写<br>
     * version: 1.0 <br>
     *
     * @param strs 字符串
     * @return java.lang.Boolean
     * @date: 2021/8/19 0019 上午 10:25 <br>
     * @author: William <br>
     */
    public static Boolean isAnyBlank(CharSequence... strs) {
        //如果为空直接返回true
        if (ArrayUtil.isEmpty(strs)) {
            return true;
        }
        for (CharSequence str : strs) {
            if (StrUtil.isBlank(str)) {
                return true;
            }
        }
        return false;
    }
 
    public static Map<String, String> parseMap(String json) {
        try {
            return OBJECT_MAPPER.readValue(json, new TypeReference<Map<String, String>>() {
            });
        } catch (Exception e) {
            throw new RuntimeException("JSON 解析失败", e);
        }
    }
 
}