Explorar el Código

碧合接口调整,添加绑定账号

wangmh hace 7 años
padre
commit
d7270f5a1f

+ 35 - 20
sso-server/src/main/java/com/uas/sso/bihe/controller/BiHeController.java

@@ -1,8 +1,8 @@
 package com.uas.sso.bihe.controller;
 
-import com.uas.sso.bihe.entity.OAuthInfo;
-import com.uas.sso.bihe.entity.OAuthRoot;
-import com.uas.sso.bihe.entity.UserRoot;
+import com.uas.sso.bihe.entity.BiHeInfo;
+import com.uas.sso.bihe.entity.BiHeResult;
+import com.uas.sso.bihe.entity.BiHeUserInfo;
 import com.uas.sso.bihe.service.BiHeService;
 import com.uas.sso.controller.BaseController;
 import com.uas.sso.entity.Token;
@@ -11,16 +11,17 @@ import com.uas.sso.service.UserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.ui.ModelMap;
 import org.springframework.util.Assert;
-import org.springframework.web.bind.annotation.PathVariable;
-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.*;
+
+import java.util.Optional;
 
 /**
  * @author wangmh
  * @create 2018-07-19 10:52
  * @desc 碧合controller
  **/
+@RestController
+@RequestMapping("/bh")
 public class BiHeController extends BaseController {
 
     @Autowired
@@ -37,18 +38,24 @@ public class BiHeController extends BaseController {
      */
     @RequestMapping(value = "/addAccount", method = RequestMethod.POST)
     public ModelMap addAccount(@RequestParam String t, String username, String password) {
+        // 获取token
         Token token = tokenService.findOne(t);
         if (token == null || token.isExpired()) {
             return error("绑定失败");
         }
 
-        Token unionidToken = tokenService.findOne(t);
-        if (unionidToken != null) {
-            OAuthRoot oAuthInfo = (OAuthRoot) unionidToken.getBind();
-            User user = userService.bindBhUnionId(username, password, oAuthInfo.getData().getOpenId());
-            request.getSession().setAttribute("userUU", user.getUserUU());
+        // 获取碧合AccessToken
+        ModelMap data = (ModelMap) token.getBind();
+        Optional<BiHeInfo> biHeInfo = Optional.ofNullable(data).map(value -> (BiHeInfo) value.get("data"));
+        if (!biHeInfo.isPresent()) {
+            return error("参数错误,绑定失败");
         }
 
+        //  绑定bhOpenId
+        User user = userService.bindBhOpenId(username, password, biHeInfo.get().getOpenId());
+        request.getSession().setAttribute("userUU", user.getUserUU());
+
+        // 删除token
         tokenService.delete(t);
 
         return success();
@@ -56,16 +63,24 @@ public class BiHeController extends BaseController {
 
     /**
      * 获取用户
-     * @param t
-     * @return
+     * @param t tokenId,存储碧合AccessToken信息
+     * @return 碧合用户头像和名称
      */
-    @RequestMapping(value = "/userinfo/{token}",method = RequestMethod.GET)
-    public ModelMap findUserByToken(@PathVariable("token")String t){
-        Token token =tokenService.findOne(t);
+    @RequestMapping(value = "/userInfo/{token}",method = RequestMethod.GET)
+    public ModelMap findUserByToken(@PathVariable("token") String t) {
+        // 获取token
+        Token token = tokenService.findOne(t);
         Assert.notNull(token, "验证信息过期");
-        Assert.isTrue(token.getBind() instanceof OAuthInfo, "参数错误");
-        OAuthInfo oAuthInfo = (OAuthInfo) token.getBind();
-        UserRoot userRoot = biHeService.getUserInfoByAccessToken(oAuthInfo.getOpenId(), oAuthInfo.getAccessToken());
+
+        // 获取token中碧合AccessToken信息
+        ModelMap data = (ModelMap) token.getBind();
+        Optional<BiHeInfo> biHeInfo = Optional.ofNullable(data).map(value -> (BiHeInfo) value.get("data"));
+        if (!biHeInfo.isPresent()) {
+            return error("参数错误,绑定失败");
+        }
+
+        // 根据AccessToken获取用户信息
+        BiHeResult<BiHeUserInfo> userRoot = biHeService.getUserInfoByAccessToken(biHeInfo.get().getAccessToken(), biHeInfo.get().getOpenId());
         return success(userRoot);
     }
 }

+ 3 - 1
sso-server/src/main/java/com/uas/sso/bihe/entity/OAuthInfo.java → sso-server/src/main/java/com/uas/sso/bihe/entity/BiHeInfo.java

@@ -7,7 +7,9 @@ import java.io.Serializable;
  * @author: huyy
  * @date: 2018/7/18 10:57
  */
-public class OAuthInfo  {
+public class BiHeInfo implements Serializable {
+
+    private static final long serialVersionUID = 1896122107098294138L;
 
     private String accessToken;
 

+ 16 - 4
sso-server/src/main/java/com/uas/sso/bihe/entity/OAuthRoot.java → sso-server/src/main/java/com/uas/sso/bihe/entity/BiHeResult.java

@@ -5,11 +5,11 @@ package com.uas.sso.bihe.entity;
  * @author: huyy
  * @date: 2018/7/18 15:07
  */
-public class OAuthRoot {
+public class BiHeResult<T> {
 
     private String code;
 
-    private OAuthInfo data;
+    private T data;
 
     private String appName;
 
@@ -27,11 +27,11 @@ public class OAuthRoot {
         this.code = code;
     }
 
-    public OAuthInfo getData() {
+    public T getData() {
         return data;
     }
 
-    public void setData(OAuthInfo data) {
+    public void setData(T data) {
         this.data = data;
     }
 
@@ -93,4 +93,16 @@ public class OAuthRoot {
             return code;
         }
     }
+
+    @Override
+    public String toString() {
+        return "BiHeResult{" +
+                "code='" + code + '\'' +
+                ", data=" + data +
+                ", appName='" + appName + '\'' +
+                ", id='" + id + '\'' +
+                ", ip='" + ip + '\'' +
+                ", msg='" + msg + '\'' +
+                '}';
+    }
 }

+ 5 - 1
sso-server/src/main/java/com/uas/sso/bihe/entity/UserInfo.java → sso-server/src/main/java/com/uas/sso/bihe/entity/BiHeUserInfo.java

@@ -1,11 +1,15 @@
 package com.uas.sso.bihe.entity;
 
+import java.io.Serializable;
+
 /**
  * 用户信息
  * @author: huyy
  * @date: 2018/7/19 9:46
  */
-public class UserInfo {
+public class BiHeUserInfo implements Serializable {
+
+    private static final long serialVersionUID = -7330561061690671703L;
 
     private String userPhone;
 

+ 0 - 102
sso-server/src/main/java/com/uas/sso/bihe/entity/UserRoot.java

@@ -1,102 +0,0 @@
-package com.uas.sso.bihe.entity;
-
-/**
- * 获取令牌access_token
- * @author: huyy
- * @date: 2018/7/19 9:52
- */
-public class UserRoot {
-
-    private String code;
-
-    private UserInfo data;
-
-    private String appName;
-
-    private String id;
-
-    private String ip;
-
-    private String msg;
-
-    public String getCode() {
-        return code;
-    }
-
-    public void setCode(String code) {
-        this.code = code;
-    }
-
-    public UserInfo getData() {
-        return data;
-    }
-
-    public void setData(UserInfo data) {
-        this.data = data;
-    }
-
-    public String getAppName() {
-        return appName;
-    }
-
-    public void setAppName(String appName) {
-        this.appName = appName;
-    }
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getIp() {
-        return ip;
-    }
-
-    public void setIp(String ip) {
-        this.ip = ip;
-    }
-
-    public String getMsg() {
-        return msg;
-    }
-
-    public void setMsg(String msg) {
-        this.msg = msg;
-    }
-
-    public enum Code {
-        // 成功
-        OK("0"),
-
-        //appId异常
-        OPENID_INVALID("OPEN_0120"),
-
-        // openId为空
-        OPENID_NULL("OPEN_0116"),
-
-        //应用标识appId不能为空
-        APPID_NULL("OPEN_0102"),
-
-        //accessToken不能为空
-        ACCESSTOKEN_NULL("OPER_0004"),
-
-        //异常的accessToken
-        ACCESSTOKEN_ABNORMAL("OPER_0006"),
-
-        //服务器没有访问权限
-        PERMISSION_DENIED("OPER_0005");
-
-        private String code;
-
-        Code(String code) {
-            this.code = code;
-        }
-
-        public String getCode() {
-            return code;
-        }
-    }
-}

+ 6 - 4
sso-server/src/main/java/com/uas/sso/bihe/service/BiHeService.java

@@ -1,7 +1,8 @@
 package com.uas.sso.bihe.service;
 
-import com.uas.sso.bihe.entity.OAuthRoot;
-import com.uas.sso.bihe.entity.UserRoot;
+import com.uas.sso.bihe.entity.BiHeInfo;
+import com.uas.sso.bihe.entity.BiHeResult;
+import com.uas.sso.bihe.entity.BiHeUserInfo;
 import org.springframework.stereotype.Service;
 
 /**
@@ -15,12 +16,13 @@ public interface BiHeService {
      * @param code
      * @return
      */
-    OAuthRoot getOAuthInfoByCode(String code);
+    BiHeResult<BiHeInfo> getOAuthInfoByCode(String code);
 
     /**
      * 获取用户信息
      * @param accessToken
+     * @param openId
      * @return
      */
-    UserRoot getUserInfoByAccessToken(String accessToken, String openId);
+    BiHeResult<BiHeUserInfo> getUserInfoByAccessToken(String accessToken, String openId);
 }

+ 9 - 7
sso-server/src/main/java/com/uas/sso/bihe/service/impl/BiHeServiceImpl.java

@@ -1,8 +1,10 @@
 package com.uas.sso.bihe.service.impl;
 
 import com.alibaba.fastjson.JSON;
-import com.uas.sso.bihe.entity.OAuthRoot;
-import com.uas.sso.bihe.entity.UserRoot;
+import com.alibaba.fastjson.TypeReference;
+import com.uas.sso.bihe.entity.BiHeInfo;
+import com.uas.sso.bihe.entity.BiHeResult;
+import com.uas.sso.bihe.entity.BiHeUserInfo;
 import com.uas.sso.bihe.service.BiHeService;
 import com.uas.sso.core.BHParam;
 import com.uas.sso.exception.VisibleError;
@@ -24,7 +26,7 @@ public class BiHeServiceImpl implements BiHeService {
      * @return
      */
     @Override
-    public OAuthRoot getOAuthInfoByCode(String code){
+    public BiHeResult<BiHeInfo> getOAuthInfoByCode(String code){
         String url = "https://opengwtest.bgycc.com/open/oauth/token";
         Map<String, String> map = new HashMap<>(3);
         map.put("code", code);
@@ -36,8 +38,8 @@ public class BiHeServiceImpl implements BiHeService {
         } catch (Exception e) {
             throw new VisibleError(e.getMessage());
         }
-        OAuthRoot oAuthRoot = JSON.parseObject(content, OAuthRoot.class);
-        return oAuthRoot;
+        BiHeResult<BiHeInfo> biHeResult = JSON.parseObject(content, new TypeReference<BiHeResult<BiHeInfo>>() {});
+        return biHeResult;
     }
 
     /**
@@ -46,7 +48,7 @@ public class BiHeServiceImpl implements BiHeService {
      * @return
      */
     @Override
-    public UserRoot getUserInfoByAccessToken(String accessToken, String openId) {
+    public BiHeResult<BiHeUserInfo> getUserInfoByAccessToken(String accessToken, String openId) {
         String url = "https://opengwtest.bgycc.com/open/open/user";
         Map<String, String>map = new HashMap<>(3);
         map.put("accessToken", accessToken);
@@ -58,7 +60,7 @@ public class BiHeServiceImpl implements BiHeService {
         }catch (Exception e){
             throw new VisibleError(e.getMessage());
         }
-        UserRoot userRoot = JSON.parseObject(content, UserRoot.class);
+        BiHeResult<BiHeUserInfo> userRoot = JSON.parseObject(content, BiHeResult.class);
         return userRoot;
     }
 

+ 18 - 14
sso-server/src/main/java/com/uas/sso/controller/LoginController.java

@@ -4,7 +4,8 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.uas.account.AccountConfig;
 import com.uas.sso.*;
-import com.uas.sso.bihe.entity.OAuthRoot;
+import com.uas.sso.bihe.entity.BiHeInfo;
+import com.uas.sso.bihe.entity.BiHeResult;
 import com.uas.sso.bihe.service.BiHeService;
 import com.uas.sso.common.util.HttpUtil;
 import com.uas.sso.core.Const;
@@ -23,7 +24,6 @@ import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.servlet.ModelAndView;
 
-import javax.servlet.http.HttpServletRequest;
 import java.io.IOException;
 import java.util.*;
 
@@ -812,7 +812,9 @@ public class LoginController extends BaseController {
             user = userService.findByWxUnionid(oAuthInfo.getUnionid());
             if (user == null) {
                 // 提示前端用户微信未绑定账号
-                Token token = new Token(oAuthInfo, oAuthInfo.getExpires_in());
+                ModelMap map = new ModelMap("data", oAuthInfo);
+                map.put("type", "weixin");
+                Token token = new Token(map, oAuthInfo.getExpires_in());
                 tokenService.save(token);
                 ModelMap data = new ModelMap("hasRegister", false);
                 data.put("token", token.getId());
@@ -840,9 +842,9 @@ public class LoginController extends BaseController {
     public ModelMap bhLogin(@RequestParam(defaultValue = "city") String appId, String code) {
         // 获取用户信息
         User user = null;
-        OAuthRoot oAuthInfo = biHeService.getOAuthInfoByCode(code);
+        BiHeResult<BiHeInfo> oAuthInfo = biHeService.getOAuthInfoByCode(code);
 
-        String accessToken = Optional.ofNullable(oAuthInfo).map(OAuthRoot::getData).map(com.uas.sso.bihe.entity.OAuthInfo::getAccessToken).orElse(null);
+        String accessToken = Optional.ofNullable(oAuthInfo).map(BiHeResult::getData).map(BiHeInfo::getAccessToken).orElse(null);
         if (StringUtils.isEmpty(accessToken)) {
             Long userUU = (Long) request.getSession().getAttribute("userUU");
             if (userUU == null) {
@@ -851,18 +853,20 @@ public class LoginController extends BaseController {
             user = new User(userUU);
         } else {
             user = userService.findByBhOpenId(oAuthInfo.getData().getOpenId());
+            // user为空提示未注册,不为空则放入session绑定用户使用
+            if (user == null) {
+                // 提示前端用户微信未绑定账号
+                ModelMap map = new ModelMap("data", oAuthInfo.getData());
+                map.put("type", "bihe");
+                Token token = new Token(map, oAuthInfo.getData().getExpires_in());
+                tokenService.save(token);
+                ModelMap data = new ModelMap("hasRegister", false);
+                data.put("token", token.getId());
+                return success(data);
+            }
             request.getSession().setAttribute("userUU", user.getUserUU());
         }
 
-        if (user == null) {
-            // 提示前端用户微信未绑定账号
-            Token token = new Token(oAuthInfo, oAuthInfo.getData().getExpires_in());
-            tokenService.save(token);
-            ModelMap data = new ModelMap("hasRegister", false);
-            data.put("token", token.getId());
-            return success(data);
-        }
-
         // 登录
         WafRequestWrapper wr = new WafRequestWrapper(request);
         String spaceUU = wr.getParameter("spaceUU");

+ 16 - 4
sso-server/src/main/java/com/uas/sso/controller/PersonalRegisterController.java

@@ -3,6 +3,7 @@ package com.uas.sso.controller;
 import com.alibaba.fastjson.JSON;
 import com.uas.sso.SSOHelper;
 import com.uas.sso.SSOToken;
+import com.uas.sso.bihe.entity.BiHeInfo;
 import com.uas.sso.core.Step;
 import com.uas.sso.core.Type;
 import com.uas.sso.core.PasswordStrength;
@@ -26,6 +27,7 @@ import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.ResponseBody;
 
 import java.util.List;
+import java.util.Optional;
 
 /**
  * 个人注册controller
@@ -88,14 +90,24 @@ public class PersonalRegisterController extends BaseController {
             return error("密码须为8-20字符的英文、数字混合");
         }
 
-        // 注册并添加注册日志
+        // 设置第三方id
         if (!StringUtils.isEmpty(t)) {
             Token unionidToken = tokenService.findOne(t);
-            if (unionidToken != null) {
-                OAuthInfo oAuthInfo = (OAuthInfo) unionidToken.getBind();
-                user.setWxUnionid(oAuthInfo.getUnionid());
+            Optional<ModelMap> optionalMap = Optional.ofNullable(unionidToken).map(value -> (ModelMap) value.getBind());
+            String type = optionalMap.map(value -> (String) value.get("type")).orElse(null);
+            switch (type) {
+                case "weixin":
+                    user.setWxUnionid(optionalMap.map(value -> (OAuthInfo) value.get("data")).map(OAuthInfo::getUnionid).orElse(null));
+                    break;
+                case "bihe":
+                    user.setBhOpenId(optionalMap.map(value -> (BiHeInfo) value.get("data")).map(BiHeInfo::getOpenId).orElse(null));
+                    break;
+                default:
+                    break;
             }
         }
+
+        // 注册并添加注册日志
         appId = StringUtils.isEmpty(appId) ? "sso" : appId;
         user = userService.register(user, appId);
         registerLogger.info(Type.REGISTER_PERSONAL.getValue(), Step.FIRST.getValue(), "个人注册成功", user, user.getFromApp());

+ 10 - 2
sso-server/src/main/java/com/uas/sso/controller/TestController.java

@@ -1,5 +1,9 @@
 package com.uas.sso.controller;
 
+import com.uas.sso.bihe.entity.BiHeResult;
+import com.uas.sso.bihe.entity.BiHeUserInfo;
+import com.uas.sso.bihe.service.BiHeService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
@@ -8,9 +12,13 @@ import org.springframework.web.bind.annotation.ResponseBody;
 @RequestMapping("/test")
 public class TestController {
 
+    @Autowired
+    private BiHeService biHeService;
+
     @RequestMapping
     @ResponseBody
-    public String test(String name) {
-        return "return " + name;
+    public void test(String name) {
+        BiHeResult<BiHeUserInfo> biHeResult = biHeService.getUserInfoByAccessToken("fewgwefwef", "fefewfw");
+        System.out.println(biHeResult.toString());
     }
 }

+ 16 - 4
sso-server/src/main/java/com/uas/sso/controller/UserspaceRegisterController.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
 import com.uas.sso.AccountConfig;
 import com.uas.sso.SSOHelper;
 import com.uas.sso.SSOToken;
+import com.uas.sso.bihe.entity.BiHeInfo;
 import com.uas.sso.core.PasswordStrength;
 import com.uas.sso.core.Status;
 import com.uas.sso.core.Step;
@@ -26,6 +27,7 @@ import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.ResponseBody;
 
 import java.util.List;
+import java.util.Optional;
 
 /**
  * 企业注册controller
@@ -150,14 +152,24 @@ public class UserspaceRegisterController extends BaseController {
             }
         }
 
-        // 企业注册
+        // 设置第三方id
         if (!StringUtils.isEmpty(t)) {
             Token unionidToken = tokenService.findOne(t);
-            if (unionidToken != null) {
-                OAuthInfo oAuthInfo = (OAuthInfo) unionidToken.getBind();
-                admin.setWxUnionid(oAuthInfo.getUnionid());
+            Optional<ModelMap> optionalMap = Optional.ofNullable(unionidToken).map(value -> (ModelMap) value.getBind());
+            String type = optionalMap.map(value -> (String) value.get("type")).orElse(null);
+            switch (type) {
+                case "weixin":
+                    user.setWxUnionid(optionalMap.map(value -> (OAuthInfo) value.get("data")).map(OAuthInfo::getUnionid).orElse(null));
+                    break;
+                case "bihe":
+                    user.setBhOpenId(optionalMap.map(value -> (BiHeInfo) value.get("data")).map(BiHeInfo::getOpenId).orElse(null));
+                    break;
+                default:
+                    break;
             }
         }
+
+        // 企业注册
         userspace.setAdmin(admin);
         userspace = userspaceService.register(userspace, appId);
 

+ 1 - 1
sso-server/src/main/java/com/uas/sso/service/UserService.java

@@ -356,5 +356,5 @@ public interface UserService {
      * @param password 密码
      * @param openId 用户微信唯一标志
      */
-    User bindBhUnionId(String username, String password, String openId);
+    User bindBhOpenId(String username, String password, String openId);
 }

+ 1 - 1
sso-server/src/main/java/com/uas/sso/service/impl/UserServiceImpl.java

@@ -746,7 +746,7 @@ public class UserServiceImpl implements UserService {
     }
 
     @Override
-    public User bindBhUnionId(String username, String password, String openId) {
+    public User bindBhOpenId(String username, String password, String openId) {
         Assert.hasText(username, "用户名不能为空");
         Assert.hasText(password, "密码不能为空");
 

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

@@ -18,6 +18,7 @@ import org.springframework.web.bind.annotation.*;
 
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
+import java.util.Optional;
 
 /**
  * @author wangmh
@@ -82,12 +83,13 @@ public class WeChatController extends BaseController {
             return error("绑定失败,请重新扫描二维码");
         }
 
-        Token unionidToken = tokenService.findOne(t);
-        if (unionidToken != null) {
-            OAuthInfo oAuthInfo = (OAuthInfo) unionidToken.getBind();
-            User user = userService.bindUnionId(username, password, oAuthInfo.getUnionid());
-            request.getSession().setAttribute("userUU", user.getUserUU());
+        ModelMap data = (ModelMap) token.getBind();
+        Optional<OAuthInfo> oAuthInfo = Optional.ofNullable(data).map(value -> (OAuthInfo) value.get("data"));
+        if (!oAuthInfo.isPresent()) {
+            return error("参数错误,绑定失败");
         }
+        User user = userService.bindUnionId(username, password, oAuthInfo.get().getUnionid());
+        request.getSession().setAttribute("userUU", user.getUserUU());
 
         tokenService.delete(t);
 
@@ -98,10 +100,14 @@ public class WeChatController extends BaseController {
     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());
+        ModelMap data = (ModelMap) token.getBind();
+        Optional<OAuthInfo> oAuthInfo = Optional.ofNullable(data).map(value -> (OAuthInfo) value.get("data"));
+        if (!oAuthInfo.isPresent()) {
+            return error("参数错误,绑定失败");
+        }
+
+        UserInfo userInfo = weChatService.findUserByUnionid(oAuthInfo.get().getUnionid(), oAuthInfo.get().getAccess_token());
         return success(userInfo);
     }
 }