微信授权、登录优化

pull/1/head
czc 2 years ago
parent 984ab09423
commit 3c3dffb3ac

@ -7,6 +7,7 @@ import com.cyl.h5.pojo.response.H5LoginResponse;
import com.cyl.h5.service.H5MemberService; import com.cyl.h5.service.H5MemberService;
import com.cyl.manager.ums.pojo.vo.MemberVO; import com.cyl.manager.ums.pojo.vo.MemberVO;
import com.cyl.wechat.WechatAuthService; import com.cyl.wechat.WechatAuthService;
import com.cyl.wechat.response.WechatUserAuth;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
@ -26,7 +27,7 @@ public class H5MemberController {
return ResponseEntity.ok(service.register(request)); return ResponseEntity.ok(service.register(request));
} }
@ApiOperation("注册验证码校验手机号") @ApiOperation("注册登录验证码校验手机号")
@GetMapping("/validate/{phone}") @GetMapping("/validate/{phone}")
public ResponseEntity<ValidatePhoneResponse> validate(@PathVariable String phone){ public ResponseEntity<ValidatePhoneResponse> validate(@PathVariable String phone){
return ResponseEntity.ok(service.validate(phone)); return ResponseEntity.ok(service.validate(phone));
@ -49,4 +50,16 @@ public class H5MemberController {
public ResponseEntity<MemberVO> getMemberInfo(){ public ResponseEntity<MemberVO> getMemberInfo(){
return ResponseEntity.ok(service.getMemberInfo()); return ResponseEntity.ok(service.getMemberInfo());
} }
@ApiOperation("获取微信用户授权信息")
@PostMapping("/member/getWechatUserAuth")
public ResponseEntity<WechatUserAuth> getWechatUserAuth(@RequestBody String data){
return ResponseEntity.ok(service.getWechatUserAuth(data));
}
@ApiOperation("设置会员微信信息")
@PostMapping("/member/setWechatInfo")
public void setWechatInfo(@RequestBody String data){
service.setWechatInfo(data);
}
} }

@ -0,0 +1,12 @@
package com.cyl.h5.pojo.request;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ApiModel("绑定openId请求对象")
@Data
public class BindOpenIdRequest {
@ApiModelProperty("wx提供的code")
private String code;
}

@ -1,5 +1,6 @@
package com.cyl.h5.pojo.request; package com.cyl.h5.pojo.request;
import com.cyl.wechat.response.WechatUserAuth;
import lombok.Data; import lombok.Data;
@Data @Data
@ -8,4 +9,6 @@ public class H5SmsLoginRequest extends H5LoginRequest {
private String code; private String code;
/** uuid */ /** uuid */
private String uuid; private String uuid;
/** 微信授权信息 */
private WechatUserAuth authInfo;
} }

@ -1,8 +1,11 @@
package com.cyl.h5.service; package com.cyl.h5.service;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.cyl.h5.pojo.request.BindOpenIdRequest;
import com.cyl.h5.pojo.request.H5AccountLoginRequest; import com.cyl.h5.pojo.request.H5AccountLoginRequest;
import com.cyl.h5.pojo.request.H5SmsLoginRequest; import com.cyl.h5.pojo.request.H5SmsLoginRequest;
import com.cyl.h5.pojo.request.RegisterRequest; import com.cyl.h5.pojo.request.RegisterRequest;
@ -147,6 +150,7 @@ public class H5MemberService {
} }
public H5LoginResponse smsLogin(String data){ public H5LoginResponse smsLogin(String data){
LocalDateTime optDate = LocalDateTime.now();
if (StringUtils.isEmpty(data)){ if (StringUtils.isEmpty(data)){
throw new RuntimeException(Constants.LOGIN_INFO.WRONG); throw new RuntimeException(Constants.LOGIN_INFO.WRONG);
} }
@ -158,10 +162,36 @@ public class H5MemberService {
qw.eq("phone_encrypted", AesCryptoUtils.encrypt(aesKey, request.getMobile())); qw.eq("phone_encrypted", AesCryptoUtils.encrypt(aesKey, request.getMobile()));
Member member = memberMapper.selectOne(qw); Member member = memberMapper.selectOne(qw);
if (member == null){ if (member == null){
throw new RuntimeException(Constants.LOGIN_INFO.TO_REGISTER); //新会员,注册并登录
member = new Member();
member.setPhoneEncrypted(AesCryptoUtils.encrypt(aesKey, request.getMobile()));
member.setPhoneHidden(PhoneUtils.hidePhone(request.getMobile()));
member.setNickname("用户" + request.getMobile().substring(7,11));
member.setStatus(Constants.MEMBER_ACCOUNT_STATUS.NORMAL);
member.setGender(0);
member.setCreateTime(optDate);
int rows = memberMapper.insert(member);
if (rows < 1){
throw new RuntimeException("注册失败,请重试");
}
MemberWechat memberWechat = new MemberWechat();
memberWechat.setMemberId(member.getId());
if (request.getAuthInfo() != null){
memberWechat.setOpenid(request.getAuthInfo().getOpenid());
memberWechat.setAccessToken(request.getAuthInfo().getAccess_token());
memberWechat.setExpiresIn(request.getAuthInfo().getExpires_in());
memberWechat.setRefreshToken(request.getAuthInfo().getRefresh_token());
}
memberWechat.setCreateTime(optDate);
memberWechat.setCreateBy(member.getId());
rows = memberWechatMapper.insert(memberWechat);
if (rows < 1){
throw new RuntimeException("注册失败,请重试");
} }
}else {
//校验会员状态 //校验会员状态
validateMemberStatus(member); validateMemberStatus(member);
}
return getLoginResponse(member.getId()); return getLoginResponse(member.getId());
} }
@ -218,4 +248,28 @@ public class H5MemberService {
memberVO.setOpenId(memberWechat.getOpenid()); memberVO.setOpenId(memberWechat.getOpenid());
return memberVO; return memberVO;
} }
public WechatUserAuth getWechatUserAuth(String data) {
BindOpenIdRequest request = JSON.parseObject(new String(Base64Utils.decodeFromString(data)), BindOpenIdRequest.class);
WechatUserAuth userToken = wechatAuthService.getUserToken(request.getCode());
if (userToken == null){
log.error("微信授权失败");
throw new RuntimeException("授权失败,请重试");
}
return userToken;
}
public void setWechatInfo(String data) {
WechatUserAuth authInfo = JSON.parseObject(new String(Base64Utils.decodeFromString(data)), WechatUserAuth.class);
Member member = (Member) LocalDataUtil.getVar(Constants.MEMBER_INFO);
UpdateWrapper<MemberWechat> wrapper = new UpdateWrapper<>();
wrapper.eq("member_id", member.getId());
wrapper.set("openid", authInfo.getOpenid());
wrapper.set("access_token", authInfo.getAccess_token());
wrapper.set("expires_in", authInfo.getExpires_in());
wrapper.set("refresh_token", authInfo.getRefresh_token());
wrapper.set("update_time", LocalDateTime.now());
wrapper.set("update_by", member.getId());
memberWechatMapper.update(null, wrapper);
}
} }

Loading…
Cancel
Save