增加微信小程序登录或注册接口
This commit is contained in:
@ -49,8 +49,16 @@ public class AuthController {
|
||||
return Result.ok(userService.miniProgramLogin(code));
|
||||
}
|
||||
|
||||
@ApiOperation(value = "微信小程序登录或注册", notes = "微信小程序登录")
|
||||
@PostMapping("/mini-program/wechatLogin")
|
||||
public Result<LoginResponse> wechatLogin(
|
||||
@RequestBody WxMiniProgramRegRequest wxMiniProgramRegRequest) {
|
||||
LoginResponse result = userService.wxMiniProgramLoginOrReg(wxMiniProgramRegRequest);
|
||||
return Result.ok(result);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "支付宝小程序登录", notes = "支付宝小程序登录")
|
||||
|
||||
@ApiOperation(value = "支付宝小程序登录或注册", notes = "支付宝小程序登录")
|
||||
@PostMapping("/mini-program/alipayLogin")
|
||||
public Result<LoginResponse> alipayLogin(
|
||||
@RequestBody AlipayMiniProgramRegRequest alipayMiniProgramRegRequest) {
|
||||
|
||||
@ -39,6 +39,13 @@ public interface IUserService {
|
||||
*/
|
||||
LoginResponse miniProgramLogin(String code);
|
||||
|
||||
/**
|
||||
*
|
||||
* @param wxMiniProgramRegRequest
|
||||
* @return
|
||||
*/
|
||||
LoginResponse wxMiniProgramLoginOrReg(WxMiniProgramRegRequest wxMiniProgramRegRequest);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@ -132,6 +132,64 @@ public class UserServiceImpl implements IUserService {
|
||||
return getLoginResponse(openid,MiniProgramTypeEnum.WECHAT.getType());
|
||||
}
|
||||
|
||||
@Override
|
||||
public LoginResponse wxMiniProgramLoginOrReg(WxMiniProgramRegRequest wxMiniProgramRegRequest) {
|
||||
try{
|
||||
// 1. 通过code获取session_key和openid
|
||||
WechatMiniProgramResponse sessionInfo = weichatInteg.getSessionInfoByCode(wxMiniProgramRegRequest.getCode());
|
||||
if (sessionInfo == null || sessionInfo.getOpenid() == null) {
|
||||
throw new BizException("获取微信用户信息失败");
|
||||
}
|
||||
|
||||
String openid = sessionInfo.getOpenid();
|
||||
String sessionKey = sessionInfo.getSession_key();
|
||||
|
||||
//先根据openid查询用户,如果有则直接返回登录信息
|
||||
LambdaQueryWrapper<BaseUserPO> queryByOpenIdWrapper = new LambdaQueryWrapper<>();
|
||||
queryByOpenIdWrapper.eq(BaseUserPO::getWechatOpenid, openid).last(" limit 1");
|
||||
BaseUserPO baseUserPO = baseUserRepo.getOne(queryByOpenIdWrapper);
|
||||
if(Objects.nonNull(baseUserPO)){
|
||||
return getLoginResponse(baseUserPO,MiniProgramTypeEnum.WECHAT);
|
||||
}
|
||||
//没有则获取手机号,根据手机号查
|
||||
// 2. 解密手机号数据
|
||||
WechatDecryptedPhoneInfo phoneInfo = null;
|
||||
if (StringUtils.isNotBlank(wxMiniProgramRegRequest.getPhoneEncryptedData()) && StringUtils.isNotBlank(wxMiniProgramRegRequest.getPhoneIv())
|
||||
&& StringUtils.isNotBlank(sessionKey)) {
|
||||
phoneInfo = weichatInteg.decryptPhoneNumber(sessionKey, wxMiniProgramRegRequest.getPhoneEncryptedData(), wxMiniProgramRegRequest.getPhoneIv());
|
||||
log.info("解密手机号信息:{}", phoneInfo);
|
||||
}
|
||||
String phoneNumber = Optional.ofNullable(phoneInfo).map(WechatDecryptedPhoneInfo::getPurePhoneNumber).orElse(null);
|
||||
if(StringUtils.isBlank(phoneNumber)){
|
||||
throw new BizException("微信小程序注册失败,无法获取用户真实手机号");
|
||||
}
|
||||
|
||||
LambdaQueryWrapper<BaseUserPO> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(BaseUserPO::getPhoneNumber, phoneNumber);
|
||||
baseUserPO = baseUserRepo.getOne(queryWrapper);
|
||||
if(Objects.isNull(baseUserPO)){
|
||||
baseUserPO = new BaseUserPO();
|
||||
baseUserPO.setWechatOpenid(openid);
|
||||
baseUserPO.setUserName(phoneNumber);
|
||||
baseUserPO.setPhoneNumber(phoneNumber);
|
||||
baseUserPO.setPassword(MD5Utils.md5Hex(phoneNumber, StandardCharsets.UTF_8.name()));
|
||||
|
||||
baseUserPO.setNickName(phoneNumber);
|
||||
baseUserPO.setRoleId(1);
|
||||
baseUserRepo.saveOrUpdate(baseUserPO);
|
||||
}else {
|
||||
if(StringUtils.isBlank(baseUserPO.getWechatOpenid())){
|
||||
baseUserPO.setWechatOpenid(openid);
|
||||
baseUserRepo.saveOrUpdate(baseUserPO);
|
||||
}
|
||||
}
|
||||
return getLoginResponse(baseUserPO,MiniProgramTypeEnum.WECHAT);
|
||||
}catch (Exception e){
|
||||
log.error("微信小程序注册失败", e);
|
||||
throw new BizException("微信小程序注册失败");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public LoginResponse alipayMiniProgramLoginOrReg(AlipayMiniProgramRegRequest alipayMiniProgramRegRequest) {
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user