浏览代码

添加微信扫码登录接口(2)

wangmh 7 年之前
父节点
当前提交
b4f3f6945a

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

@@ -790,7 +790,7 @@ public class LoginController extends BaseController {
      * @return
      */
     @RequestMapping(value = "/wxqrLogin", method = RequestMethod.POST)
-    public ModelMap wxqrLogin(String code, String state) {
+    public ModelMap wxqrLogin(@RequestParam(defaultValue = "sso") String appId, String code, String state) {
         // TODO 校验state
 
         // 获取用户信息
@@ -817,7 +817,6 @@ public class LoginController extends BaseController {
 
         // 登录
         WafRequestWrapper wr = new WafRequestWrapper(request);
-        String appId = wr.getParameter("appId");
         String spaceUU = wr.getParameter("spaceUU");
         String returnUrl = wr.getParameter("returnUrl");
         String baseUrl = wr.getParameter("baseUrl");

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

@@ -341,5 +341,5 @@ public interface UserService {
      * @param password 密码
      * @param unionid 用户微信唯一标志
      */
-    void bindUnionId(String username, String password, String unionid);
+    User bindUnionId(String username, String password, String unionid);
 }

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

@@ -721,7 +721,7 @@ public class UserServiceImpl implements UserService {
     }
 
     @Override
-    public void bindUnionId(String username, String password, String unionid) {
+    public User bindUnionId(String username, String password, String unionid) {
         Assert.hasText(username, "用户名不能为空");
         Assert.hasText(password, "密码不能为空");
 
@@ -736,6 +736,8 @@ public class UserServiceImpl implements UserService {
         userDao.save(user);
 
         userLogger.info(user, Type.BIND_WEIXIN.getValue());
+
+        return user;
     }
 
     /**

+ 20 - 7
sso-server/src/main/java/com/uas/sso/weixin/controller/WeChatController.java

@@ -1,6 +1,7 @@
 package com.uas.sso.weixin.controller;
 
 import com.uas.sso.controller.BaseController;
+import com.uas.sso.entity.User;
 import com.uas.sso.weixin.entity.OAuthInfo;
 import com.uas.sso.entity.Token;
 import com.uas.sso.service.UserService;
@@ -11,6 +12,9 @@ import org.springframework.ui.ModelMap;
 import org.springframework.util.Assert;
 import org.springframework.web.bind.annotation.*;
 
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+
 /**
  * @author wangmh
  * @create 2018-06-07 11:27
@@ -35,11 +39,15 @@ public class WeChatController extends BaseController {
     private static final String WX_LOGIN_SCOPE = "snsapi_login";
 
     @RequestMapping("/getQrUrl")
-    public ModelMap getQrUrl(String appId) {
-        String redirect_uri = "http://sso.ubtob.com/sso/login/wxqrLogin";
-        String url = "https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect";
-        url = url.replace("APPID", WX_APPID).replace("REDIRECT_URI", redirect_uri).replace("SCOPE", WX_LOGIN_SCOPE).replace("STATE", "");
-        return success(url);
+    public ModelMap getQrUrl(String appId, @RequestParam String url) {
+        try {
+            url = URLEncoder.encode(url, "utf8");
+        } catch (UnsupportedEncodingException e) {
+            throw new RuntimeException("程序编码异常");
+        }
+        String qrUrl = "https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect";
+        qrUrl = qrUrl.replace("APPID", WX_APPID).replace("REDIRECT_URI", url).replace("SCOPE", WX_LOGIN_SCOPE).replace("STATE", "");
+        return success(qrUrl);
     }
 
     @RequestMapping("/getQrParams")
@@ -57,13 +65,18 @@ public class WeChatController extends BaseController {
      * @return
      */
     @RequestMapping(value = "/addAccount", method = RequestMethod.POST)
-    public ModelMap addAccount(String t, String username, String password) {
+    public ModelMap addAccount(@RequestParam String t, String username, String password) {
         Token token = tokenService.findOne(t);
         if (token == null || token.isExpired()) {
             return error("绑定失败,请重新扫描二维码");
         }
 
-        userService.bindUnionId(username, password, (String) token.getBind());
+        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());
+        }
 
         tokenService.delete(t);