diff --git a/ruoyi-mall/src/main/java/com/cyl/h5/controller/H5MemberController.java b/ruoyi-mall/src/main/java/com/cyl/h5/controller/H5MemberController.java index 875628d..c897cc4 100644 --- a/ruoyi-mall/src/main/java/com/cyl/h5/controller/H5MemberController.java +++ b/ruoyi-mall/src/main/java/com/cyl/h5/controller/H5MemberController.java @@ -7,6 +7,7 @@ import com.cyl.h5.pojo.response.H5LoginResponse; import com.cyl.h5.service.H5MemberService; import com.cyl.manager.ums.pojo.vo.MemberVO; import com.cyl.wechat.WechatAuthService; +import com.cyl.wechat.response.WechatUserAuth; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; @@ -26,7 +27,7 @@ public class H5MemberController { return ResponseEntity.ok(service.register(request)); } - @ApiOperation("注册验证码校验手机号") + @ApiOperation("注册登录验证码校验手机号") @GetMapping("/validate/{phone}") public ResponseEntity validate(@PathVariable String phone){ return ResponseEntity.ok(service.validate(phone)); @@ -49,4 +50,16 @@ public class H5MemberController { public ResponseEntity getMemberInfo(){ return ResponseEntity.ok(service.getMemberInfo()); } + + @ApiOperation("获取微信用户授权信息") + @PostMapping("/member/getWechatUserAuth") + public ResponseEntity getWechatUserAuth(@RequestBody String data){ + return ResponseEntity.ok(service.getWechatUserAuth(data)); + } + + @ApiOperation("设置会员微信信息") + @PostMapping("/member/setWechatInfo") + public void setWechatInfo(@RequestBody String data){ + service.setWechatInfo(data); + } } diff --git a/ruoyi-mall/src/main/java/com/cyl/h5/pojo/request/BindOpenIdRequest.java b/ruoyi-mall/src/main/java/com/cyl/h5/pojo/request/BindOpenIdRequest.java new file mode 100644 index 0000000..449c71d --- /dev/null +++ b/ruoyi-mall/src/main/java/com/cyl/h5/pojo/request/BindOpenIdRequest.java @@ -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; +} diff --git a/ruoyi-mall/src/main/java/com/cyl/h5/pojo/request/H5SmsLoginRequest.java b/ruoyi-mall/src/main/java/com/cyl/h5/pojo/request/H5SmsLoginRequest.java index 4655ec1..b3cffef 100644 --- a/ruoyi-mall/src/main/java/com/cyl/h5/pojo/request/H5SmsLoginRequest.java +++ b/ruoyi-mall/src/main/java/com/cyl/h5/pojo/request/H5SmsLoginRequest.java @@ -1,5 +1,6 @@ package com.cyl.h5.pojo.request; +import com.cyl.wechat.response.WechatUserAuth; import lombok.Data; @Data @@ -8,4 +9,6 @@ public class H5SmsLoginRequest extends H5LoginRequest { private String code; /** uuid */ private String uuid; + /** 微信授权信息 */ + private WechatUserAuth authInfo; } diff --git a/ruoyi-mall/src/main/java/com/cyl/h5/service/H5MemberService.java b/ruoyi-mall/src/main/java/com/cyl/h5/service/H5MemberService.java index 305eca7..f807b86 100644 --- a/ruoyi-mall/src/main/java/com/cyl/h5/service/H5MemberService.java +++ b/ruoyi-mall/src/main/java/com/cyl/h5/service/H5MemberService.java @@ -1,8 +1,11 @@ package com.cyl.h5.service; +import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSON; 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.H5SmsLoginRequest; import com.cyl.h5.pojo.request.RegisterRequest; @@ -147,6 +150,7 @@ public class H5MemberService { } public H5LoginResponse smsLogin(String data){ + LocalDateTime optDate = LocalDateTime.now(); if (StringUtils.isEmpty(data)){ throw new RuntimeException(Constants.LOGIN_INFO.WRONG); } @@ -158,10 +162,36 @@ public class H5MemberService { qw.eq("phone_encrypted", AesCryptoUtils.encrypt(aesKey, request.getMobile())); Member member = memberMapper.selectOne(qw); 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()); } @@ -218,4 +248,28 @@ public class H5MemberService { memberVO.setOpenId(memberWechat.getOpenid()); 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 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); + } }