admin
2021-10-13 052e1d5c47c4e536fde79074d53b0481c7d4f9b6
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
package org.yeshi.utils.wx;
 
import org.json.JSONException;
import org.json.JSONObject;
import org.yeshi.utils.HttpUtil;
import org.yeshi.utils.StringUtil;
import org.yeshi.utils.entity.wx.WeiXinUser;
import org.yeshi.utils.entity.wx.WeiXinUserParam;
 
public class WXAppLoginUtil {
    // 通过code获取access_token openId
    private static String weiXinUrl1 = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code";
 
    public static String weiXinUrl2 = "https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s&lang=zh_CN";
 
    public static WeiXinUserParam getWxParam(String code, String appId, String appSecret) {
        String wxUrl = String.format(weiXinUrl1, appId, appSecret, code);
        String result = HttpUtil.get(wxUrl);
        WeiXinUserParam weiXinUserParam = parseWeiXinUserParam(result);
        return weiXinUserParam;
    }
 
    public static WeiXinUser getWeiXinUser(WeiXinUserParam param) {
        String result = HttpUtil.getAsString(String.format(weiXinUrl2, param.getAccessToken(), param.getOpenId()),
                "ISO-8859-1", "UTF-8");
        JSONObject jsonObject = null;
        try {
            jsonObject = new JSONObject(result);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        String nickname = jsonObject.optString("nickname");
        String province = jsonObject.optString("province");
        String city = jsonObject.optString("city");
        String country = jsonObject.optString("country");
        String headimgurl = jsonObject.optString("headimgurl");
        String unionid = jsonObject.optString("unionid");
        int sex = jsonObject.optInt("sex");
        WeiXinUser weiXinUser = new WeiXinUser();
        weiXinUser.setCity(city);
        weiXinUser.setCountry(country);
        weiXinUser.setHeadimgurl(headimgurl);
        weiXinUser.setNickname(nickname);
        weiXinUser.setOpenid(param.getOpenId());
        weiXinUser.setSex(sex);
        weiXinUser.setUnionid(unionid);
        weiXinUser.setProvince(province);
        return weiXinUser;
    }
 
    public static WeiXinUser getWeiXinUser(String code, String appId, String appSecret) {
        WeiXinUserParam param = getWxParam(code, appId, appSecret);
        if (param == null) {
            return null;
        }
        WeiXinUser weiXinUser = getWeiXinUser(param);
        if (weiXinUser != null && StringUtil.isNullOrEmpty(weiXinUser.getUnionid())
                && !StringUtil.isNullOrEmpty(param.getUnionId())) {
            weiXinUser.setUnionid(param.getUnionId());
        }
        return weiXinUser;
    }
 
 
    private static WeiXinUserParam parseWeiXinUserParam(String result) {
        WeiXinUserParam weiXinUserParam = new WeiXinUserParam();
        JSONObject jsonObject = null;
        try {
            jsonObject = new JSONObject(result);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        String openId = jsonObject.optString("openid");
        if ("".equals(openId)) {
            return null;
        }
        String accessToken = jsonObject.optString("access_token");
        String refreshToken = jsonObject.optString("refresh_token");
        String scope = jsonObject.optString("scope");
        int expires = jsonObject.optInt("expires_in");
        String unionId = jsonObject.optString("unionid");
 
        weiXinUserParam.setRefreshToken(refreshToken);
        weiXinUserParam.setOpenId(openId);
        weiXinUserParam.setExpires(expires);
        weiXinUserParam.setAccessToken(accessToken);
        weiXinUserParam.setScope(scope);
        weiXinUserParam.setUnionId(unionId);
 
        return weiXinUserParam;
    }
 
    /**
     * 初始化公众号自定义菜单
     */
    public static void initGZMenu() {
        JSONObject root = new JSONObject();
 
        // WXUtil.createMenu(accessToken, root);
    }
 
}