Эх сурвалжийг харах

添加获取微信用户信息接口

wangmh 7 жил өмнө
parent
commit
eb7698642e

+ 3 - 2
sso-server/src/main/java/com/uas/sso/controller/LoginController.java

@@ -3,7 +3,6 @@ package com.uas.sso.controller;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.uas.account.AccountConfig;
-import com.uas.account.entity.UserDetail;
 import com.uas.sso.*;
 import com.uas.sso.common.util.HttpUtil;
 import com.uas.sso.core.Const;
@@ -12,6 +11,7 @@ import com.uas.sso.entity.Token;
 import com.uas.sso.service.*;
 import com.uas.sso.util.*;
 import com.uas.sso.web.waf.request.WafRequestWrapper;
+import com.uas.sso.weixin.entity.OAuthInfo;
 import com.uas.sso.weixin.service.WeChatService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.ui.ModelMap;
@@ -806,7 +806,8 @@ public class LoginController extends BaseController {
             user = userService.findByWxUnionid(oAuthInfo.getUnionid());
             if (user == null) {
                 // 提示前端用户微信未绑定账号
-                Token token = new Token(oAuthInfo.getUnionid(), oAuthInfo.getExpires_in());
+                Token token = new Token(oAuthInfo, oAuthInfo.getExpires_in());
+                tokenService.save(token);
                 ModelMap data = new ModelMap("hasRegister", false);
                 data.put("token", token.getId());
                 return success(data);

+ 3 - 1
sso-server/src/main/java/com/uas/sso/controller/PersonalRegisterController.java

@@ -16,6 +16,7 @@ import com.uas.sso.service.AppService;
 import com.uas.sso.service.PersonalAccountService;
 import com.uas.sso.service.UserService;
 import com.uas.sso.util.PasswordLevelUtils;
+import com.uas.sso.weixin.entity.OAuthInfo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.ModelMap;
@@ -91,7 +92,8 @@ public class PersonalRegisterController extends BaseController {
         if (!StringUtils.isEmpty(t)) {
             Token unionidToken = tokenService.findOne(t);
             if (unionidToken != null) {
-                user.setWxUnionid((String) unionidToken.getBind());
+                OAuthInfo oAuthInfo = (OAuthInfo) unionidToken.getBind();
+                user.setWxUnionid(oAuthInfo.getUnionid());
             }
         }
         appId = StringUtils.isEmpty(appId) ? "sso" : appId;

+ 3 - 1
sso-server/src/main/java/com/uas/sso/controller/UserspaceRegisterController.java

@@ -16,6 +16,7 @@ import com.uas.sso.service.UserAccountService;
 import com.uas.sso.service.UserService;
 import com.uas.sso.service.UserspaceService;
 import com.uas.sso.util.PasswordLevelUtils;
+import com.uas.sso.weixin.entity.OAuthInfo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.ModelMap;
@@ -153,7 +154,8 @@ public class UserspaceRegisterController extends BaseController {
         if (!StringUtils.isEmpty(t)) {
             Token unionidToken = tokenService.findOne(t);
             if (unionidToken != null) {
-                admin.setWxUnionid((String) unionidToken.getBind());
+                OAuthInfo oAuthInfo = (OAuthInfo) unionidToken.getBind();
+                admin.setWxUnionid(oAuthInfo.getUnionid());
             }
         }
         userspace.setAdmin(admin);

+ 14 - 10
sso-server/src/main/java/com/uas/sso/weixin/controller/WeChatController.java

@@ -1,21 +1,15 @@
 package com.uas.sso.weixin.controller;
 
 import com.uas.sso.controller.BaseController;
-import com.uas.sso.entity.OAuthInfo;
+import com.uas.sso.weixin.entity.OAuthInfo;
 import com.uas.sso.entity.Token;
-import com.uas.sso.entity.User;
 import com.uas.sso.service.UserService;
+import com.uas.sso.weixin.entity.UserInfo;
 import com.uas.sso.weixin.service.WeChatService;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.ui.Model;
 import org.springframework.ui.ModelMap;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.io.IOException;
-import java.io.PrintWriter;
+import org.springframework.util.Assert;
+import org.springframework.web.bind.annotation.*;
 
 /**
  * @author wangmh
@@ -76,4 +70,14 @@ public class WeChatController extends BaseController {
         return success();
     }
 
+    @RequestMapping(value = "/userInfo/{token}", method = RequestMethod.GET)
+    public ModelMap findUserByToken(@PathVariable("token") String t) {
+        Token token = tokenService.findOne(t);
+        Assert.notNull(token, "验证信息过期,请重新扫码");
+        Assert.isTrue(token.getBind() instanceof OAuthInfo, "参数错误");
+
+        OAuthInfo oAuthInfo = (OAuthInfo) token.getBind();
+        UserInfo userInfo = weChatService.findUserByUnionid(oAuthInfo.getUnionid(), oAuthInfo.getAccess_token());
+        return success(userInfo);
+    }
 }

+ 6 - 2
sso-server/src/main/java/com/uas/sso/entity/OAuthInfo.java → sso-server/src/main/java/com/uas/sso/weixin/entity/OAuthInfo.java

@@ -1,11 +1,15 @@
-package com.uas.sso.entity;
+package com.uas.sso.weixin.entity;
+
+import java.io.Serializable;
 
 /**
  * @author wangmh
  * @create 2018-06-28 14:18
  * @desc 微信用户登录信息
  **/
-public class OAuthInfo {
+public class OAuthInfo implements Serializable{
+
+    private static final long serialVersionUID = 1L;
 
     private String access_token;
 

+ 111 - 0
sso-server/src/main/java/com/uas/sso/weixin/entity/UserInfo.java

@@ -0,0 +1,111 @@
+package com.uas.sso.weixin.entity;
+
+import java.util.List;
+
+/**
+ * @author wangmh
+ * @create 2018-07-02 15:54
+ * @desc 微信用户信息
+ **/
+public class UserInfo {
+
+    private String openid;
+
+    private String nickname;
+
+    private String sex;
+
+    private String language;
+
+    private String city;
+
+    private String province;
+
+    private String country;
+
+    private String headimgurl;
+
+    private List<String> privilege;
+
+    private String unionid;
+
+    public String getOpenid() {
+        return openid;
+    }
+
+    public void setOpenid(String openid) {
+        this.openid = openid;
+    }
+
+    public String getNickname() {
+        return nickname;
+    }
+
+    public void setNickname(String nickname) {
+        this.nickname = nickname;
+    }
+
+    public String getSex() {
+        return sex;
+    }
+
+    public void setSex(String sex) {
+        this.sex = sex;
+    }
+
+    public String getLanguage() {
+        return language;
+    }
+
+    public void setLanguage(String language) {
+        this.language = language;
+    }
+
+    public String getCity() {
+        return city;
+    }
+
+    public void setCity(String city) {
+        this.city = city;
+    }
+
+    public String getProvince() {
+        return province;
+    }
+
+    public void setProvince(String province) {
+        this.province = province;
+    }
+
+    public String getCountry() {
+        return country;
+    }
+
+    public void setCountry(String country) {
+        this.country = country;
+    }
+
+    public String getHeadimgurl() {
+        return headimgurl;
+    }
+
+    public void setHeadimgurl(String headimgurl) {
+        this.headimgurl = headimgurl;
+    }
+
+    public List<String> getPrivilege() {
+        return privilege;
+    }
+
+    public void setPrivilege(List<String> privilege) {
+        this.privilege = privilege;
+    }
+
+    public String getUnionid() {
+        return unionid;
+    }
+
+    public void setUnionid(String unionid) {
+        this.unionid = unionid;
+    }
+}

+ 4 - 1
sso-server/src/main/java/com/uas/sso/weixin/service/WeChatService.java

@@ -1,6 +1,7 @@
 package com.uas.sso.weixin.service;
 
-import com.uas.sso.entity.OAuthInfo;
+import com.uas.sso.weixin.entity.OAuthInfo;
+import com.uas.sso.weixin.entity.UserInfo;
 
 /**
  * @author wangmh
@@ -15,4 +16,6 @@ public interface WeChatService {
      * @return
      */
     OAuthInfo getOAuthInfoByCode(String code);
+
+    UserInfo findUserByUnionid(String unionid, String access_token);
 }

+ 19 - 4
sso-server/src/main/java/com/uas/sso/weixin/service/impl/WeChatServiceImpl.java

@@ -1,13 +1,11 @@
 package com.uas.sso.weixin.service.impl;
 
-import com.alibaba.dubbo.common.URL;
 import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
 import com.uas.sso.common.util.HttpUtil;
-import com.uas.sso.entity.OAuthInfo;
+import com.uas.sso.weixin.entity.OAuthInfo;
+import com.uas.sso.weixin.entity.UserInfo;
 import com.uas.sso.weixin.service.WeChatService;
 import org.springframework.stereotype.Service;
-import org.springframework.util.Assert;
 
 import static com.uas.sso.common.util.HttpUtil.doGet;
 
@@ -37,4 +35,21 @@ public class WeChatServiceImpl implements WeChatService {
         }
         return null;
     }
+
+    @Override
+    public UserInfo findUserByUnionid(String unionid, String access_token) {
+        String url = "https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID";
+        url = url.replace("ACCESS_TOKEN", access_token).replace("OPENID", unionid);
+        try {
+            HttpUtil.ResponseWrap res = HttpUtil.doGet(url);
+            if (res.getContent() != null) {
+                System.out.println(res.getContent().toString());
+                UserInfo userInfo = JSON.parseObject(res.getContent().toString(), UserInfo.class);
+                return userInfo;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
 }