Răsfoiți Sursa

测试前端使用微信code直接登录功能

klzhangweiya 3 ani în urmă
părinte
comite
72dd0511a0

+ 20 - 1
fbs_code/fbs-backend/fbs-security-common/src/main/java/com/yyjc/fbs/vo/LoginResult.java

@@ -7,6 +7,16 @@ public class LoginResult {
 	private String enterpriseId;
 	private String loginMsg;
 
+	public WxLoginInfo getWxLoginInfo() {
+		return wxLoginInfo;
+	}
+
+	public void setWxLoginInfo(WxLoginInfo wxLoginInfo) {
+		this.wxLoginInfo = wxLoginInfo;
+	}
+
+	private WxLoginInfo wxLoginInfo;
+
 	public LoginResult() {
 
 	}
@@ -19,7 +29,16 @@ public class LoginResult {
 		this.enterpriseId = enterpriseId;
 		this.loginMsg = loginMsg;
 	}
-
+	public LoginResult(String authName, String auth, Integer userType, String enterpriseId, String loginMsg,
+					   WxLoginInfo wxLoginInfo) {
+		super();
+		this.authName = authName;
+		this.auth = auth;
+		this.userType = userType;
+		this.enterpriseId = enterpriseId;
+		this.loginMsg = loginMsg;
+		this.wxLoginInfo = wxLoginInfo;
+	}
 	public String getAuthName() {
 		return authName;
 	}

+ 45 - 12
fbs_code/fbs-backend/fbs-security-service/src/main/java/com/yyjc/fbs/controller/biz/UserController.java

@@ -1,32 +1,30 @@
 package com.yyjc.fbs.controller.biz;
 
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Random;
 import java.util.concurrent.TimeUnit;
 
-import com.yyjc.fbs.vo.Result;
+import com.alibaba.fastjson.JSONObject;
+import com.yyjc.fbs.bean.UserExt;
+import com.yyjc.fbs.config.WechatAppConfig;
+import com.yyjc.fbs.service.biz.UserToolService;
+import com.yyjc.fbs.util.MyHttpUtils;
+import com.yyjc.fbs.vo.*;
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 import com.yyjc.fbs.bean.User;
 import com.yyjc.fbs.constant.ErrorCodeMsgEnum;
 import com.yyjc.fbs.exception.UsernameIsExitedException;
 import com.yyjc.fbs.service.IMailBiz;
-import com.yyjc.fbs.vo.CommonResponse;
-import com.yyjc.fbs.vo.EditPassWord;
-import com.yyjc.fbs.vo.EditPassWordByPhoneVO;
-import com.yyjc.fbs.vo.LoginUser;
-import com.yyjc.fbs.vo.ResponseVO;
-import com.yyjc.fbs.vo.UserCondition;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.github.pagehelper.PageInfo;
 import io.swagger.annotations.Api;
@@ -42,10 +40,45 @@ public class UserController extends BaseController {
 	@Autowired
 	private IMailBiz iMailBiz;
 
+	@Autowired
+	private WechatAppConfig wechatAppConfig;
+	@Autowired
+	private UserToolService userToolService;
+
 	private static String dictionary_prefix = "epp-auth:sms:phone";
 	private static long exists_time = 120 * 1000;
 	private static final Logger log = LoggerFactory.getLogger(UserController.class);
 
+
+	@PostMapping("/wxlogin")
+	@ApiOperation(value = "微信code登录", notes = "")
+	@Transactional
+	public Result<?> wechat(@RequestBody WxLoginInfo input) throws Exception {
+		String wxCode = input.getWxcode();
+		if (StringUtils.isBlank(wxCode)) {
+			return Result.instance(ErrorCodeMsgEnum.PARAMS_ERROR.getCode(), ErrorCodeMsgEnum.PARAMS_ERROR.getMsg());
+		}
+		String openid = userToolService.getWxOpenId(wxCode);
+		if (StringUtils.isBlank(openid)) {//获取openid失败
+			return Result.instance(ErrorCodeMsgEnum.PARAMS_ERROR.getCode(), "获取openId失败!");
+		}
+		User user = userService.findUserExtByWxOpenId(openid);
+		if (null != user) {//通过wx openid 查询到用户
+			UserExt userExt = new UserExt();
+			userExt.setWx_open_id(openid);
+			userExt.setUserid(user.getId());
+			LocalDateTime now = LocalDateTime.now();
+			DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
+			userExt.setUpdate_time(Long.parseLong(dtf.format(now)));
+			userService.AddOrUpdateUserExt(userExt);
+			WxLoginInfo wxLoginInfo = new WxLoginInfo(wxCode,openid);
+			LoginResult loginResult = userService.LoginByWxCode(user,wxLoginInfo);//直接登录
+			return new Result<LoginResult>(0, "登陆成功", loginResult);
+		}else{//没有查到,前端直接通过登录界面登录
+			return Result.instance(ErrorCodeMsgEnum.ERROR_NO_HASE.getCode(), ErrorCodeMsgEnum.ERROR_NO_HASE.getMsg());
+		}
+	}
+
 	@PostMapping("/register")
 	@ApiOperation(value = "用户注册", notes = "")
 	@Transactional