Commit d1dbd353 by 郑云飞

小程序静默登录获取openid

小程序获取手机号
parent a5825c86
package com.yongqi.web.controller.system;
import cn.dev33.satoken.annotation.SaIgnore;
import cn.dev33.satoken.context.SaHolder;
import com.yongqi.common.constant.Constants;
import com.yongqi.common.core.domain.R;
import com.yongqi.common.core.domain.entity.SysMenu;
......@@ -85,7 +86,7 @@ public class SysLoginController {
Map<String, Object> ajax = new HashMap<>();
// 生成令牌
String token = loginService.xcxLogin(xcxCode);
ajax.put("openId", token);
ajax.put(Constants.TOKEN, token);
return R.ok(ajax);
}
......@@ -97,13 +98,9 @@ public class SysLoginController {
*/
@SaIgnore
@PostMapping("/xcxPhoneLogin")
public R<Map<String, Object>> xcxPhoneLogin(@NotBlank(message = "{xcx.code.not.blank}") String xcxCode
, @NotBlank(message = "{xcx.code.not.blank}") String openId) {
Map<String, Object> ajax = new HashMap<>();
// 生成令牌
String token = loginService.xcxPhoneLogin(xcxCode, openId);
ajax.put(Constants.TOKEN, token);
return R.ok(ajax);
public R<Map<String, Object>> xcxPhoneLogin(@NotBlank(message = "{xcx.code.not.blank}") String xcxCode) {
LoginUser loginUser = LoginHelper.getLoginUser();
return loginService.xcxPhoneLogin(xcxCode, loginUser);
}
/**
......
......@@ -142,7 +142,6 @@ security:
- /captchaImage
- /smsLogin
- /xcxLogin
- /xcxPhoneLogin
# MyBatisPlus配置
# https://baomidou.com/config/
......
......@@ -154,6 +154,12 @@
<artifactId>lock4j-redisson-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>
<!-- 微信小程序 -->
<dependency>
<groupId>com.github.binarywang</groupId>
......
......@@ -102,6 +102,11 @@ public class LoginUser implements Serializable {
private Long roleId;
/**
* 用户openId
*/
private String openId;
/**
* 获取登录id
*/
public String getLoginId() {
......
......@@ -8,10 +8,12 @@ import cn.dev33.satoken.secure.BCrypt;
import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.yongqi.common.constant.CacheConstants;
import com.yongqi.common.constant.Constants;
import com.yongqi.common.core.domain.R;
import com.yongqi.common.core.domain.event.LogininforEvent;
import com.yongqi.common.core.domain.dto.RoleDTO;
import com.yongqi.common.core.domain.entity.SysUser;
......@@ -45,6 +47,7 @@ import javax.servlet.http.HttpServletRequest;
import java.rmi.ServerException;
import java.time.Duration;
import java.util.List;
import java.util.Map;
import java.util.function.Supplier;
/**
......@@ -116,8 +119,6 @@ public class SysLoginService {
public String xcxLogin(String xcxCode) {
// xcxCode 为 小程序调用 wx.login 授权后获取
// todo 以下自行实现
// 校验 appid + appsrcret + xcxCode 调用登录凭证校验接口 获取 session_key 与 openid
WxMaJscode2SessionResult sessionInfo = null;
try {
......@@ -130,13 +131,24 @@ public class SysLoginService {
throw new RuntimeException("获取微信信息失败");
}
DbWxUser user = loadUserByOpenid(sessionInfo, null);
return user.getOpenId();
// 此处可根据登录用户的数据不同 自行创建 loginUser
XcxLoginUser loginUser = new XcxLoginUser();
loginUser.setUserId(user.getId());
loginUser.setUsername(user.getNickname());
loginUser.setUserType(DeviceType.XCX.getDevice());
loginUser.setOpenid(sessionInfo.getOpenid());
// 生成token
LoginHelper.loginByDevice(loginUser, DeviceType.XCX);
recordLogininfor(user.getNickname(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"));
recordLoginInfo(user.getId(), user.getNickname());
return StpUtil.getTokenValue();
}
public String xcxPhoneLogin(String xcxCode, String openId) {
// xcxCode 为 小程序调用 wx.login 授权后获取
// todo 以下自行实现
// 校验 appid + appsrcret + xcxCode 调用登录凭证校验接口 获取 session_key 与 openid
public R<Map<String, Object>> xcxPhoneLogin(String xcxCode, LoginUser loginUser) {
log.info("登录用户:{}", JSON.toJSONString(loginUser));
String openId = loginUser.getOpenId();
// 校验 appid + appsrcret + xcxCode 调用获取手机号接口
WxMaPhoneNumberInfo newPhoneNoInfo = null;
try {
newPhoneNoInfo = wxMaService.getUserService().getNewPhoneNoInfo(xcxCode);
......@@ -150,18 +162,7 @@ public class SysLoginService {
WxMaJscode2SessionResult sessionInfo = new WxMaJscode2SessionResult();
sessionInfo.setOpenid(openId);
DbWxUser user = loadUserByOpenid(sessionInfo, newPhoneNoInfo.getPhoneNumber());
// 此处可根据登录用户的数据不同 自行创建 loginUser
XcxLoginUser loginUser = new XcxLoginUser();
loginUser.setUserId(user.getId());
loginUser.setUsername(user.getNickname());
loginUser.setUserType(DeviceType.XCX.getDevice());
loginUser.setOpenid(sessionInfo.getOpenid());
// 生成token
LoginHelper.loginByDevice(loginUser, DeviceType.XCX);
recordLogininfor(user.getNickname(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"));
recordLoginInfo(user.getId(), user.getNickname());
return StpUtil.getTokenValue();
return R.ok();
}
/**
......@@ -267,7 +268,7 @@ public class SysLoginService {
} else if (DeleteStatusEnum.DELETED.getCode().equals(user.getDeleteFlag())) {
log.info("登录用户:{} 已被停用.", sessionInfo.getOpenid());
throw new RuntimeException("当前用户已停用,请联系管理员");
} else if (StringUtils.isNotEmpty(phone) && StringUtils.isNotEmpty(user.getMobile())) {
} else if (StringUtils.isNotEmpty(phone)) {
user.setMobile(phone);
user.setAuthMobile(phone);
wxUserMapper.updateById(user);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment