|
|
@@ -32,35 +32,97 @@ public class WechatLogOnServiceImpl implements WechatLogOnService {
|
|
32
|
32
|
@Override
|
|
33
|
33
|
public Object wechatBindPhone(String code) {
|
|
34
|
34
|
Map<String, Object> data = new HashMap<>();
|
|
35
|
|
- String url1 = SystemConfig.WECHAT_URL.replace("APPID",SystemConfig.WECHAT_APPID).replace("SECRET",SystemConfig.WECHAT_SECRET).replace("CODE",code);
|
|
36
|
|
- String a = HttpURLConnectionUtils.doGet(url1);
|
|
37
|
|
- System.out.println("微信返回数据"+a);
|
|
38
|
|
- String openid =(String)JSONObject.parseObject(a).get("openid");
|
|
39
|
|
- String unionid =(String)JSONObject.parseObject(a).get("unionid");
|
|
40
|
|
- String access_token =(String)JSONObject.parseObject(a).get("access_token");
|
|
41
|
|
- String url2 = SystemConfig.WECHAT_USER_INFO_URL.replace("ACCESS_TOKEN", access_token).replace("OPENID", openid);
|
|
42
|
|
- String b = HttpURLConnectionUtils.doGet(url2);
|
|
43
|
|
- System.out.println("微信返回数据"+b);
|
|
44
|
|
- String nickname =(String)JSONObject.parseObject(b).get("nickname");
|
|
45
|
|
- String headimgurl =(String)JSONObject.parseObject(b).get("headimgurl");
|
|
46
|
|
- /**
|
|
47
|
|
- * 拿openid 查询数据库 判断用户是否绑定 绑定成功直接登录进入系统,绑定不成功返回标示 提示用户进行绑定
|
|
48
|
|
- */
|
|
49
|
|
-// User user = userDao.selectUserByOpenid(openid);
|
|
50
|
|
- User user = userDao.selectUserByOpenid(unionid);
|
|
51
|
|
- data.put("nickname",nickname);
|
|
52
|
|
- data.put("headimgurl",headimgurl);
|
|
53
|
|
- data.put("openid",openid);
|
|
54
|
|
- data.put("unionid",unionid);
|
|
55
|
|
- if(user==null){
|
|
56
|
|
- data.put("code",SystemConfig.WECHAT_CODE);
|
|
57
|
|
- data.put("msg",SystemConfig.WECHAT_MSG);
|
|
58
|
35
|
|
|
59
|
|
- }else{
|
|
60
|
|
- data.put("user",user);
|
|
61
|
|
- data.put("code",SystemConfig.WECHAT_SUCCESS_CODE);
|
|
|
36
|
+ try {
|
|
|
37
|
+ // 1. 获取微信access_token和openid
|
|
|
38
|
+ String url1 = SystemConfig.WECHAT_URL
|
|
|
39
|
+ .replace("APPID", SystemConfig.WECHAT_APPID)
|
|
|
40
|
+ .replace("SECRET", SystemConfig.WECHAT_SECRET)
|
|
|
41
|
+ .replace("CODE", code);
|
|
|
42
|
+
|
|
|
43
|
+ System.out.println("请求微信API URL1: " + url1);
|
|
|
44
|
+ String response1 = HttpURLConnectionUtils.doGet(url1);
|
|
|
45
|
+ System.out.println("微信返回access_token数据: " + response1);
|
|
|
46
|
+
|
|
|
47
|
+ JSONObject tokenJson = JSONObject.parseObject(response1);
|
|
|
48
|
+
|
|
|
49
|
+ // 检查微信返回的错误信息
|
|
|
50
|
+ if (tokenJson.containsKey("errcode")) {
|
|
|
51
|
+ Integer errcode = tokenJson.getInteger("errcode");
|
|
|
52
|
+ String errmsg = tokenJson.getString("errmsg");
|
|
|
53
|
+ System.out.println("微信接口调用失败,errcode: " + errcode + ", errmsg: " + errmsg);
|
|
|
54
|
+ return ResponseUtil.fail("微信授权失败: " + errmsg + "(" + errcode + ")");
|
|
|
55
|
+ }
|
|
|
56
|
+
|
|
|
57
|
+ String openid = tokenJson.getString("openid");
|
|
|
58
|
+ String unionid = tokenJson.getString("unionid");
|
|
|
59
|
+ String accessToken = tokenJson.getString("access_token");
|
|
|
60
|
+
|
|
|
61
|
+ // 验证必要字段是否存在
|
|
|
62
|
+ if (openid == null || openid.isEmpty()) {
|
|
|
63
|
+ System.out.println("微信返回数据缺少openid字段,response: " + response1);
|
|
|
64
|
+ return ResponseUtil.fail("微信授权失败:无法获取用户标识");
|
|
|
65
|
+ }
|
|
|
66
|
+
|
|
|
67
|
+ if (accessToken == null || accessToken.isEmpty()) {
|
|
|
68
|
+ System.out.println("微信返回数据缺少access_token字段,response: " + response1);
|
|
|
69
|
+ return ResponseUtil.fail("微信授权失败:无法获取访问令牌");
|
|
|
70
|
+ }
|
|
|
71
|
+
|
|
|
72
|
+ // 2. 获取用户信息
|
|
|
73
|
+ String url2 = SystemConfig.WECHAT_USER_INFO_URL
|
|
|
74
|
+ .replace("ACCESS_TOKEN", accessToken)
|
|
|
75
|
+ .replace("OPENID", openid);
|
|
|
76
|
+
|
|
|
77
|
+ System.out.println("请求微信API URL2: " + url2);
|
|
|
78
|
+ String response2 = HttpURLConnectionUtils.doGet(url2);
|
|
|
79
|
+ System.out.println("微信返回用户信息数据: " + response2);
|
|
|
80
|
+
|
|
|
81
|
+ JSONObject userJson = JSONObject.parseObject(response2);
|
|
|
82
|
+
|
|
|
83
|
+ // 检查错误
|
|
|
84
|
+ if (userJson.containsKey("errcode")) {
|
|
|
85
|
+ Integer errcode = userJson.getInteger("errcode");
|
|
|
86
|
+ String errmsg = userJson.getString("errmsg");
|
|
|
87
|
+ System.out.println("获取微信用户信息失败,errcode: " + errcode + ", errmsg: " + errmsg);
|
|
|
88
|
+ return ResponseUtil.fail("获取用户信息失败: " + errmsg + "(" + errcode + ")");
|
|
|
89
|
+ }
|
|
|
90
|
+
|
|
|
91
|
+ String nickname = userJson.getString("nickname");
|
|
|
92
|
+ String headimgurl = userJson.getString("headimgurl");
|
|
|
93
|
+
|
|
|
94
|
+ // 3. 查询数据库
|
|
|
95
|
+ // 这里使用unionid查询,如果unionid为空则使用openid
|
|
|
96
|
+ User user = null;
|
|
|
97
|
+ if (unionid != null && !unionid.isEmpty()) {
|
|
|
98
|
+ user = userDao.selectUserByOpenid(unionid);
|
|
|
99
|
+ } else {
|
|
|
100
|
+ user = userDao.selectUserByOpenid(openid);
|
|
|
101
|
+ }
|
|
|
102
|
+
|
|
|
103
|
+ // 4. 构建返回数据
|
|
|
104
|
+ data.put("nickname", nickname);
|
|
|
105
|
+ data.put("headimgurl", headimgurl);
|
|
|
106
|
+ data.put("openid", openid);
|
|
|
107
|
+ data.put("unionid", unionid);
|
|
|
108
|
+
|
|
|
109
|
+ if (user == null) {
|
|
|
110
|
+ data.put("code", SystemConfig.WECHAT_CODE);
|
|
|
111
|
+ data.put("msg", SystemConfig.WECHAT_MSG);
|
|
|
112
|
+ System.out.println("用户未绑定,需要绑定手机号,openid: " + openid);
|
|
|
113
|
+ } else {
|
|
|
114
|
+ data.put("user", user);
|
|
|
115
|
+ data.put("code", SystemConfig.WECHAT_SUCCESS_CODE);
|
|
|
116
|
+ System.out.println("用户已绑定,直接登录,用户ID: " + user.getUid());
|
|
|
117
|
+ }
|
|
|
118
|
+
|
|
|
119
|
+ return ResponseUtil.ok(data);
|
|
|
120
|
+
|
|
|
121
|
+ } catch (Exception e) {
|
|
|
122
|
+ System.err.println("微信绑定手机号处理失败,code: " + code + ", 异常: " + e.getMessage());
|
|
|
123
|
+ e.printStackTrace();
|
|
|
124
|
+ return ResponseUtil.fail("系统处理异常: " + e.getMessage());
|
|
62
|
125
|
}
|
|
63
|
|
- return ResponseUtil.ok(data);
|
|
64
|
126
|
}
|
|
65
|
127
|
|
|
66
|
128
|
@Override
|