diff --git a/api/src/main/java/com/sv/api/aop/PlatformIdAOP.java b/api/src/main/java/com/sv/api/aop/PlatformIdAOP.java index 3c6775e..84c2bdf 100644 --- a/api/src/main/java/com/sv/api/aop/PlatformIdAOP.java +++ b/api/src/main/java/com/sv/api/aop/PlatformIdAOP.java @@ -33,6 +33,7 @@ public class PlatformIdAOP { PlatformKey platformKey = method.getAnnotation(PlatformKey.class); if(platformKey != null){ PlatformContext.changeKey(platformKey.value()); + PlatformContext.set("platform_id",1); } NoPlatform noPlatform = method.getAnnotation(NoPlatform.class); if(noPlatform != null){ diff --git a/api/src/main/java/com/sv/api/controller/LoginOrRegisterController.java b/api/src/main/java/com/sv/api/controller/LoginOrRegisterController.java index 4a03ef0..314c291 100644 --- a/api/src/main/java/com/sv/api/controller/LoginOrRegisterController.java +++ b/api/src/main/java/com/sv/api/controller/LoginOrRegisterController.java @@ -59,7 +59,8 @@ public class LoginOrRegisterController extends BaseApiController { * 手机号和验证码登录 */ @RequestMapping(value = "/member/login" , method = RequestMethod.POST) - public ResponseDTO register(@RequestParam("mobile")String mobile,@RequestParam("captcha")String captcha){ + @Deprecated + public ResponseDTO register(@RequestParam("mobile")String mobile,@RequestParam("captcha")String captcha){ return ResponseDTO.ok().addAttribute("authorization",loginRegisterService.loginByMobile(mobile,captcha)); } @@ -68,6 +69,7 @@ public class LoginOrRegisterController extends BaseApiController { * 微信授权登录 */ @RequestMapping(value = "/member/login/wx" , method = RequestMethod.POST) + @Deprecated public ResponseDTO loginWx(@RequestParam("code") String code, @RequestParam("nickname") String nickname, @RequestParam("avatar") String avatar){ String openId = wechatService.getXcxOpenId(code); //查询openId: @@ -79,11 +81,13 @@ public class LoginOrRegisterController extends BaseApiController { } /** - * 绑定手机号 + * 微信小程序手机号一键登录 + * loginCode: wx.login获取的code,用于获取openId + * phoneCode: wx.getPhoneNumber获取的code,用于获取手机号 */ @RequestMapping(value = "/member/login/wx/phone" , method = RequestMethod.POST) public ResponseDTO phone(BindMobileDTO bindMobileDTO){ - MemberTokenDTO memberTokenDTO = loginRegisterService.bildMobile(bindMobileDTO); + MemberTokenDTO memberTokenDTO = loginRegisterService.loginWithPhoneCode(bindMobileDTO); return ResponseDTO.ok() .addAttribute("authorization",memberTokenDTO); } diff --git a/api/src/main/java/com/sv/api/controller/UploadController.java b/api/src/main/java/com/sv/api/controller/UploadController.java index 0d0831d..036f2df 100644 --- a/api/src/main/java/com/sv/api/controller/UploadController.java +++ b/api/src/main/java/com/sv/api/controller/UploadController.java @@ -25,8 +25,9 @@ public class UploadController extends BaseApiController { @RequestMapping("/upload/avatar") @AccessToken public ResponseDTO uploadImg(@RequestParam("image") MultipartFile file) throws IOException { + Integer loginMemberId = getLoginMemberId(); String imgUrl = ossClientUtil.uploadImg(file); - loginRegisterService.updateInformation(getLoginMemberId(),null,imgUrl); + loginRegisterService.updateInformation(loginMemberId,null,imgUrl); return ResponseDTO.ok(); } diff --git a/api/src/main/java/com/sv/api/service/impl/LoginRegisterServiceImpl.java b/api/src/main/java/com/sv/api/service/impl/LoginRegisterServiceImpl.java index 2790ae8..f6a5586 100644 --- a/api/src/main/java/com/sv/api/service/impl/LoginRegisterServiceImpl.java +++ b/api/src/main/java/com/sv/api/service/impl/LoginRegisterServiceImpl.java @@ -7,10 +7,12 @@ import com.sv.api.context.PlatformContext; import com.sv.dto.api.BindMobileDTO; import com.sv.dto.api.MemberInformationDTO; import com.sv.dto.api.MemberTokenDTO; +import com.sv.dto.api.wechat.WechatLoginResult; import com.sv.entity.Member; import com.sv.entity.MemberAuth; import com.sv.exception.api.ExceptionCodeTemplate; import com.sv.api.util.OSSHelper; +import com.sv.api.service.impl.wechat.WechatService; import com.sv.service.api.MemberAuthService; import com.sv.service.api.MemberService; import com.sv.service.api.MemberTokenService; @@ -21,6 +23,7 @@ import com.ydd.framework.core.common.utils.ValidationUtils; import com.ydd.framework.core.entity.enums.DeletedEnum; import com.ydd.framework.core.exception.ServiceException; import com.ydd.framework.core.service.impl.BaseServiceImpl; +import org.apache.commons.lang3.StringUtils; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.config.RequestConfig; @@ -60,11 +63,14 @@ public class LoginRegisterServiceImpl extends BaseServiceImpl { @Resource private OSSClientUtil ossClientUtil; + @Resource + private WechatService wechatService; /** * 手机号注册 */ @Transactional + @Deprecated public MemberTokenDTO registerByMobile(String mobile,String captcha,String name,Integer sex,Integer age,String address){ ValidationUtils.assertNotBlank(mobile, "请输入手机号码"); VenueValidateUtils.assertMobile(mobile); @@ -100,6 +106,7 @@ public class LoginRegisterServiceImpl extends BaseServiceImpl { * 手机号和验证码登录 */ @Transactional + @Deprecated public MemberTokenDTO loginByMobile(String mobile, String captcha){ // 参数校验 ValidationUtils.assertNotBlank(mobile, "请输入手机号码"); @@ -216,85 +223,85 @@ public class LoginRegisterServiceImpl extends BaseServiceImpl { /** * 绑定手机号 */ - public MemberTokenDTO bildMobile(BindMobileDTO bindMobileDTO){ - // 参数校验 - ValidationUtils.assertNotBlank(bindMobileDTO.getMobile(), "请输入手机号码"); - VenueValidateUtils.assertMobile(bindMobileDTO.getMobile()); - ValidationUtils.assertNotNull(bindMobileDTO.getNickname()); - ValidationUtils.assertNotNull(bindMobileDTO.getAvatar()); - ValidationUtils.assertNotNull(bindMobileDTO.getOpenId()); - ValidationUtils.assertNotBlank(bindMobileDTO.getCaptcha(), "请输入验证码"); - // 校验验证码是否正确 - captchaCacheService.assertCaptcha(bindMobileDTO.getMobile(), ApiConstants.PHONE_SMS_CAPTCHA_PREFIX, bindMobileDTO.getCaptcha()); - - MemberTokenDTO memberTokenDTO = null; - Member member = memberService.findByMobile(bindMobileDTO.getMobile()); - // 不存在直接注册 - if (member == null){ - // 根据手机号码创建新用户 - member = memberService.createByMobile(bindMobileDTO.getMobile(),bindMobileDTO.getName(), - bindMobileDTO.getSex(),bindMobileDTO.getAge(),bindMobileDTO.getAddress(),PlatformContext.getValue()); - // 修改用户图像 - updateInformation(member.getId(),bindMobileDTO.getNickname(),bindMobileDTO.getAvatar()); - // 删除验证码 - captchaCacheService.remove(bindMobileDTO.getMobile(), ApiConstants.REGISTER_SMS_CAPTCHA_PREFIX); - - // 查询认证 - MemberAuth memberAuth = memberAuthService.findByMobile(bindMobileDTO.getMobile()); - if (memberAuth == null){ - // 创建用户登录认证 - memberAuth = memberAuthService.createByMobileByOpenId(member.getId(),member.getPlatformId(), - bindMobileDTO.getMobile(),bindMobileDTO.getOpenId()); - } - - // 查询访问凭证,并强制更新 - memberTokenDTO = memberTokenService.findDTOByMemberId(memberAuth.getMemberId(), Boolean.TRUE); - }else { - if (DeletedEnum.YES.value.equals(member.getDeleted())) { - throw new ServiceException(ExceptionCodeTemplate.NONE_MEMBER_INFORMATION); - } - if(member.getStatus().intValue() == MemberStatusEnum.DISABLE.value.intValue()){ - throw new ServiceException(ExceptionCodeTemplate.MEMBER_ERROR); - } - - // 查询用户登录的方式(member_auth表中) - memberTokenDTO = checkLogin(member.getId(),bindMobileDTO.getOpenId(),member,bindMobileDTO); - } - - return memberTokenDTO; - } +// public MemberTokenDTO bildMobile(BindMobileDTO bindMobileDTO){ +// // 参数校验 +//// ValidationUtils.assertNotBlank(bindMobileDTO.getMobile(), "请输入手机号码"); +// VenueValidateUtils.assertMobile(bindMobileDTO.getMobile()); +// ValidationUtils.assertNotNull(bindMobileDTO.getNickname()); +// ValidationUtils.assertNotNull(bindMobileDTO.getAvatar()); +// ValidationUtils.assertNotNull(bindMobileDTO.getOpenId()); +//// ValidationUtils.assertNotBlank(bindMobileDTO.getCaptcha(), "请输入验证码"); +// // 校验验证码是否正确 +//// captchaCacheService.assertCaptcha(bindMobileDTO.getMobile(), ApiConstants.PHONE_SMS_CAPTCHA_PREFIX, bindMobileDTO.getCaptcha()); +// +// MemberTokenDTO memberTokenDTO = null; +// Member member = memberService.findByMobile(bindMobileDTO.getMobile()); +// // 不存在直接注册 +// if (member == null){ +// // 根据手机号码创建新用户 +// member = memberService.createByMobile(bindMobileDTO.getMobile(),bindMobileDTO.getName(), +// bindMobileDTO.getSex(),bindMobileDTO.getAge(),bindMobileDTO.getAddress(),PlatformContext.getValue()); +// // 修改用户图像 +// updateInformation(member.getId(),bindMobileDTO.getNickname(),bindMobileDTO.getAvatar()); +// // 删除验证码 +// captchaCacheService.remove(bindMobileDTO.getMobile(), ApiConstants.REGISTER_SMS_CAPTCHA_PREFIX); +// +// // 查询认证 +// MemberAuth memberAuth = memberAuthService.findByMobile(bindMobileDTO.getMobile()); +// if (memberAuth == null){ +// // 创建用户登录认证 +// memberAuth = memberAuthService.createByMobileByOpenId(member.getId(),member.getPlatformId(), +// bindMobileDTO.getMobile(),bindMobileDTO.getOpenId()); +// } +// +// // 查询访问凭证,并强制更新 +// memberTokenDTO = memberTokenService.findDTOByMemberId(memberAuth.getMemberId(), Boolean.TRUE); +// }else { +// if (DeletedEnum.YES.value.equals(member.getDeleted())) { +// throw new ServiceException(ExceptionCodeTemplate.NONE_MEMBER_INFORMATION); +// } +// if(member.getStatus().intValue() == MemberStatusEnum.DISABLE.value.intValue()){ +// throw new ServiceException(ExceptionCodeTemplate.MEMBER_ERROR); +// } +// +// // 查询用户登录的方式(member_auth表中) +// memberTokenDTO = checkLogin(member.getId(),bindMobileDTO.getOpenId(),member,bindMobileDTO); +// } +// +// return memberTokenDTO; +// } /** * 具体查看用户的登录情况 */ - @Transactional - public MemberTokenDTO checkLogin(Integer memberId,String openId,Member member,BindMobileDTO bindMobileDTO){ - MemberTokenDTO memberTokenDTO = null; - // 微信登录方式 - MemberAuth memberAuth = memberAuthService.checkLoginWay(memberId,MemberAuthTypeEnum.WEIXIN.value); - // 如果用户有用微信登录过,并且openId,与登录中的一致,则直接登录,否则拒绝登录3 - if (memberAuth != null){ - if (memberAuth.getAuthId().equals(openId)) { - // 查询访问凭证,并强制更新 - memberTokenDTO = memberTokenService.findDTOByMemberId(memberAuth.getMemberId(), Boolean.TRUE); - // 修改用户信息 - updateMember(member,bindMobileDTO); - }else { - throw new ServiceException("手机号已被绑定"); - } - }else { - // 用户注册过,member表中有数据,登录表中没有数据,直接更新用户登录表 - // 创建用户登录认证 - memberAuth = memberAuthService.createByMobileByOpenId(member.getId(),member.getPlatformId(), - bindMobileDTO.getMobile(),bindMobileDTO.getOpenId()); - // 查询访问凭证,并强制更新 - memberTokenDTO = memberTokenService.findDTOByMemberId(memberAuth.getMemberId(), Boolean.TRUE); - // 修改用户图像 - updateInformation(memberAuth.getMemberId(),bindMobileDTO.getNickname(),bindMobileDTO.getAvatar()); - } - - return memberTokenDTO; - } +// @Transactional +// public MemberTokenDTO checkLogin(Integer memberId,String openId,Member member,BindMobileDTO bindMobileDTO){ +// MemberTokenDTO memberTokenDTO = null; +// // 微信登录方式 +// MemberAuth memberAuth = memberAuthService.checkLoginWay(memberId,MemberAuthTypeEnum.WEIXIN.value); +// // 如果用户有用微信登录过,并且openId,与登录中的一致,则直接登录,否则拒绝登录3 +// if (memberAuth != null){ +// if (memberAuth.getAuthId().equals(openId)) { +// // 查询访问凭证,并强制更新 +// memberTokenDTO = memberTokenService.findDTOByMemberId(memberAuth.getMemberId(), Boolean.TRUE); +// // 修改用户信息 +// updateMember(member,bindMobileDTO); +// }else { +// throw new ServiceException("手机号已被绑定"); +// } +// }else { +// // 用户注册过,member表中有数据,登录表中没有数据,直接更新用户登录表 +// // 创建用户登录认证 +// memberAuth = memberAuthService.createByMobileByOpenId(member.getId(),member.getPlatformId(), +// bindMobileDTO.getMobile(),bindMobileDTO.getOpenId()); +// // 查询访问凭证,并强制更新 +// memberTokenDTO = memberTokenService.findDTOByMemberId(memberAuth.getMemberId(), Boolean.TRUE); +// // 修改用户图像 +// updateInformation(memberAuth.getMemberId(),bindMobileDTO.getNickname(),bindMobileDTO.getAvatar()); +// } +// +// return memberTokenDTO; +// } /** * 更新用户信息 @@ -317,7 +324,7 @@ public class LoginRegisterServiceImpl extends BaseServiceImpl { member.setAddress(bindMobileDTO.getAddress()); } try { - member.setAvatar(updateWxImgToOss(bindMobileDTO.getAvatar())); +// member.setAvatar(updateWxImgToOss(bindMobileDTO.getAvatar())); } catch (Exception e) { e.printStackTrace(); } @@ -332,6 +339,62 @@ public class LoginRegisterServiceImpl extends BaseServiceImpl { memberTokenService.logout(memberId); } + /** + * 微信小程序手机号一键登录 + * 通过loginCode获取openId,通过phoneCode获取手机号,直接完成登录 + */ + @Transactional + public MemberTokenDTO loginWithPhoneCode(BindMobileDTO bindMobileDTO){ + String loginCode = bindMobileDTO.getLoginCode(); + String phoneCode = bindMobileDTO.getPhoneCode(); + + if (StringUtils.isBlank(loginCode)) { + throw new ServiceException("loginCode不能为空"); + } + if (StringUtils.isBlank(phoneCode)) { + throw new ServiceException("phoneCode不能为空"); + } + Integer value = PlatformContext.getValue(); + WechatLoginResult wechatResult = wechatService.getXcxOpenIdAndPhone(loginCode, phoneCode); + String openId = wechatResult.getOpenId(); + String mobile = wechatResult.getPhoneNumber(); + + MemberTokenDTO memberTokenDTO = null; + synchronized (openId.intern()){ + Member member = memberService.findByMobile(mobile); + if (member == null) { + member = memberService.createByMobile(mobile, bindMobileDTO.getNickname(), + bindMobileDTO.getSex(), bindMobileDTO.getAge(), bindMobileDTO.getAddress(), value); + updateInformation(member.getId(), bindMobileDTO.getNickname(), bindMobileDTO.getAvatar()); + + MemberAuth memberAuth = memberAuthService.findByMobile(mobile); + if (memberAuth == null) { + memberAuth = memberAuthService.createByMobileByOpenId(member.getId(), member.getPlatformId(), mobile, openId); + } + memberTokenDTO = memberTokenService.findDTOByMemberId(memberAuth.getMemberId(), Boolean.TRUE); + } else { + if (DeletedEnum.YES.value.equals(member.getDeleted())) { + throw new ServiceException(ExceptionCodeTemplate.NONE_MEMBER_INFORMATION); + } + if (member.getStatus().intValue() == MemberStatusEnum.DISABLE.value.intValue()) { + throw new ServiceException(ExceptionCodeTemplate.MEMBER_ERROR); + } + + MemberAuth memberAuth = memberAuthService.findByAuthId(openId); + if (memberAuth == null) { + memberAuth = memberAuthService.createByMobileByOpenId(member.getId(), member.getPlatformId(), mobile, openId); + memberTokenDTO = memberTokenService.findDTOByMemberId(memberAuth.getMemberId(), Boolean.TRUE); + } else if (memberAuth.getMemberId().intValue() == member.getId().intValue()) { + memberTokenDTO = memberTokenService.findDTOByMemberId(memberAuth.getMemberId(), Boolean.TRUE); + } else { + throw new ServiceException("该手机号已被其他微信账号绑定"); + } + updateInformation(member.getId(), bindMobileDTO.getNickname(), bindMobileDTO.getAvatar()); + } + } + return memberTokenDTO; + } + /*** * 修改用户图像 */ @@ -346,7 +409,7 @@ public class LoginRegisterServiceImpl extends BaseServiceImpl { } member.setAvatar(avatar); try { - member.setAvatar(updateWxImgToOss(avatar)); +// member.setAvatar(updateWxImgToOss(avatar)); } catch (Exception e) { e.printStackTrace(); } diff --git a/api/src/main/java/com/sv/api/service/impl/wechat/WechatService.java b/api/src/main/java/com/sv/api/service/impl/wechat/WechatService.java index d193db5..1afb309 100644 --- a/api/src/main/java/com/sv/api/service/impl/wechat/WechatService.java +++ b/api/src/main/java/com/sv/api/service/impl/wechat/WechatService.java @@ -1,9 +1,11 @@ package com.sv.api.service.impl.wechat; -import com.sv.api.context.PlatformContext; import com.sv.dto.api.wechat.AccessTokenResponse; +import com.sv.dto.api.wechat.PhoneNumberResponse; +import com.sv.dto.api.wechat.WechatLoginResult; import com.sv.entity.Platform; import com.sv.service.common.PlatformService; +import com.sv.service.utils.HttpClientUtils; import com.ydd.framework.core.common.utils.HttpUtils; import com.ydd.framework.core.common.utils.JsonMapper; import com.ydd.framework.core.exception.ExceptionCodeTemplate; @@ -21,65 +23,71 @@ import javax.annotation.Resource; public class WechatService extends BaseServiceImpl { private Logger logger = LoggerFactory.getLogger(WechatService.class); - //小程序登录 获取信息url private static final String ACCESS_TOKEN_URL = "https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code"; + private static final String GET_PHONE_URL = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=%s"; + private static final String CGI_BIN_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s"; - /** - * 微信全局token缓存变量 - */ public final static String REDIS_ACCESS_TOKEN = "SZPM_ACCESS_TOKEN"; @Resource private PlatformService platformServiceImpl; + public final static int PLATFORM_ID = 1; - /** - * 通过code获取openid 小程序 - * - * @param code - * @return - */ public String getXcxOpenId(String code) { - Platform platform = platformServiceImpl.findById(PlatformContext.getValue()); + Platform platform = platformServiceImpl.findById(PLATFORM_ID); + if (platform == null) { + logger.error("平台信息不存在,platformId: " + PLATFORM_ID); + throw new ServiceException(ExceptionCodeTemplate.SERVICE_EXCEPTION); + } String url = String.format(ACCESS_TOKEN_URL, platform.getAppId(), platform.getSecret(), code); String result = HttpUtils.get(url); AccessTokenResponse response = JsonMapper.nonEmptyMapper().fromJson(result, AccessTokenResponse.class); if (StringUtils.isBlank(response.getOpenid())) { logger.error("小程序openid获取失败:" + result); throw new ServiceException(ExceptionCodeTemplate.SERVICE_EXCEPTION); - } else { - String openId = response.getOpenid(); - String accessToken = response.getAccess_token(); - return openId; } + return response.getOpenid(); } - -/* private boolean checkWxXml( Map params) throws IOException { - String signFromAPIResponse = params.get("sign").toString(); - if (signFromAPIResponse == "" || signFromAPIResponse == null) { - logger.info("API返回的数据签名数据不存在,有可能被第三方篡改!!!"); - return false; + public WechatLoginResult getXcxOpenIdAndPhone(String loginCode, String phoneCode) { + Platform platform = platformServiceImpl.findById(PLATFORM_ID); + if (platform == null) { + logger.error("平台信息不存在,platformId: " + PLATFORM_ID); + throw new ServiceException(ExceptionCodeTemplate.SERVICE_EXCEPTION); } - //清掉返回数据对象里面的Sign数据(不能把这个数据也加进去进行签名),然后用签名算法进行签名 - params.put("sign", ""); - String signForAPIResponse = getSign(params); - logger.info("签名验证后的sign:"+signForAPIResponse+" 微信回调传入的sign:"+signFromAPIResponse); - if (!signForAPIResponse.equalsIgnoreCase(signFromAPIResponse)) { - logger.info("API返回的数据签名数据不一样,有可能被第三方篡改!!!"); - return false; - } - return true; - }*/ -/* private String getSign(Map map) { - SortedMap signParams = new TreeMap<>(); - for (Map.Entry stringStringEntry : map.entrySet()) { - signParams.put(stringStringEntry.getKey(), stringStringEntry.getValue()); - } - signParams.remove("sign"); - String sign = CommonUtils.getSign(signParams, key); - return sign; - }*/ + String openId = getXcxOpenId(loginCode); + String accessToken = getAccessToken(platform); + String phoneNumber = getPhoneNumber(phoneCode, accessToken); + return new WechatLoginResult(openId, phoneNumber); + } + + private String getAccessToken(Platform platform) { + String url = String.format(CGI_BIN_TOKEN_URL, platform.getAppId(), platform.getSecret()); + String result = HttpUtils.get(url); + AccessTokenResponse response = JsonMapper.nonEmptyMapper().fromJson(result, AccessTokenResponse.class); + if (StringUtils.isBlank(response.getAccess_token())) { + logger.error("小程序access_token获取失败:" + result); + throw new ServiceException(ExceptionCodeTemplate.SERVICE_EXCEPTION); + } + return response.getAccess_token(); + } + + private String getPhoneNumber(String code, String accessToken) { + String url = String.format(GET_PHONE_URL, accessToken); + String jsonBody = "{\"code\":\"" + code + "\"}"; + String result = HttpClientUtils.doPostJson(url, jsonBody); + PhoneNumberResponse response = JsonMapper.nonEmptyMapper().fromJson(result, PhoneNumberResponse.class); + if (response.getErrcode() == null || response.getErrcode() != 0) { + logger.error("小程序手机号获取失败:" + result); + throw new ServiceException(ExceptionCodeTemplate.SERVICE_EXCEPTION); + } + if (response.getPhone_info() == null || StringUtils.isBlank(response.getPhone_info().getPhoneNumber())) { + logger.error("小程序手机号为空:" + result); + throw new ServiceException(ExceptionCodeTemplate.SERVICE_EXCEPTION); + } + return response.getPhone_info().getPhoneNumber(); + } } diff --git a/entity/src/main/java/com/sv/dto/api/BindMobileDTO.java b/entity/src/main/java/com/sv/dto/api/BindMobileDTO.java index ee2da83..8a10c65 100644 --- a/entity/src/main/java/com/sv/dto/api/BindMobileDTO.java +++ b/entity/src/main/java/com/sv/dto/api/BindMobileDTO.java @@ -5,11 +5,21 @@ import java.io.Serializable; public class BindMobileDTO implements Serializable { + /** + * 小程序login code (wx.login获取) + */ + private String loginCode; + /** * 小程序openId */ private String openId; + /** + * 微信手机号 code (wx.getPhoneNumber获取) + */ + private String phoneCode; + /** * 微信昵称 */ @@ -21,12 +31,12 @@ public class BindMobileDTO implements Serializable { private String avatar; /** - * 手机号码 + * 手机号码 (从phoneCode解析得到) */ private String mobile; /** - * 验证码 + * 验证码 (不再使用) */ private String captcha; @@ -121,4 +131,20 @@ public class BindMobileDTO implements Serializable { public void setAddress(String address) { this.address = address; } + + public String getLoginCode() { + return loginCode; + } + + public void setLoginCode(String loginCode) { + this.loginCode = loginCode; + } + + public String getPhoneCode() { + return phoneCode; + } + + public void setPhoneCode(String phoneCode) { + this.phoneCode = phoneCode; + } } \ No newline at end of file diff --git a/entity/src/main/java/com/sv/dto/api/wechat/AccessTokenResponse.java b/entity/src/main/java/com/sv/dto/api/wechat/AccessTokenResponse.java index 6bb94e7..91b9c40 100644 --- a/entity/src/main/java/com/sv/dto/api/wechat/AccessTokenResponse.java +++ b/entity/src/main/java/com/sv/dto/api/wechat/AccessTokenResponse.java @@ -8,7 +8,7 @@ public class AccessTokenResponse implements Serializable { private String refresh_token; private String openid; private String scope; - private int errcode; + private Integer errcode; private String errmsg; public String getAccess_token() { @@ -51,11 +51,11 @@ public class AccessTokenResponse implements Serializable { this.scope = scope; } - public int getErrcode() { + public Integer getErrcode() { return errcode; } - public void setErrcode(int errcode) { + public void setErrcode(Integer errcode) { this.errcode = errcode; } diff --git a/entity/src/main/java/com/sv/dto/api/wechat/PhoneNumberResponse.java b/entity/src/main/java/com/sv/dto/api/wechat/PhoneNumberResponse.java new file mode 100644 index 0000000..098ebcd --- /dev/null +++ b/entity/src/main/java/com/sv/dto/api/wechat/PhoneNumberResponse.java @@ -0,0 +1,73 @@ +package com.sv.dto.api.wechat; + +import java.io.Serializable; + +public class PhoneNumberResponse implements Serializable { + + private Integer errcode; + private String errmsg; + private PhoneInfo phone_info; + + public Integer getErrcode() { + return errcode; + } + + public void setErrcode(Integer errcode) { + this.errcode = errcode; + } + + public String getErrmsg() { + return errmsg; + } + + public void setErrmsg(String errmsg) { + this.errmsg = errmsg; + } + + public PhoneInfo getPhone_info() { + return phone_info; + } + + public void setPhone_info(PhoneInfo phone_info) { + this.phone_info = phone_info; + } + + public static class PhoneInfo implements Serializable { + private String phoneNumber; + private String purePhoneNumber; + private Integer countryCode; + private Long dataMasking; + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public String getPurePhoneNumber() { + return purePhoneNumber; + } + + public void setPurePhoneNumber(String purePhoneNumber) { + this.purePhoneNumber = purePhoneNumber; + } + + public Integer getCountryCode() { + return countryCode; + } + + public void setCountryCode(Integer countryCode) { + this.countryCode = countryCode; + } + + public Long getDataMasking() { + return dataMasking; + } + + public void setDataMasking(Long dataMasking) { + this.dataMasking = dataMasking; + } + } +} \ No newline at end of file diff --git a/entity/src/main/java/com/sv/dto/api/wechat/WechatLoginResult.java b/entity/src/main/java/com/sv/dto/api/wechat/WechatLoginResult.java new file mode 100644 index 0000000..20f6c56 --- /dev/null +++ b/entity/src/main/java/com/sv/dto/api/wechat/WechatLoginResult.java @@ -0,0 +1,33 @@ +package com.sv.dto.api.wechat; + +import java.io.Serializable; + +public class WechatLoginResult implements Serializable { + + private String openId; + private String phoneNumber; + + public WechatLoginResult() { + } + + public WechatLoginResult(String openId, String phoneNumber) { + this.openId = openId; + this.phoneNumber = phoneNumber; + } + + public String getOpenId() { + return openId; + } + + public void setOpenId(String openId) { + this.openId = openId; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } +} \ No newline at end of file diff --git a/service/src/main/java/com/sv/mapper/MemberMapper.java b/service/src/main/java/com/sv/mapper/MemberMapper.java index c5add5c..6b00cb5 100644 --- a/service/src/main/java/com/sv/mapper/MemberMapper.java +++ b/service/src/main/java/com/sv/mapper/MemberMapper.java @@ -55,7 +55,6 @@ import java.util.List; * @param id 编号 * @return 用户 */ - @PlatformKey Member findById(Integer id); /** @@ -139,4 +138,4 @@ import java.util.List; Member findByFaceId(@Param("faceId") Integer faceId); Integer countMoneyGtPrice(@Param("memberId") Integer memberId,@Param("price") BigDecimal price); -} \ No newline at end of file +} diff --git a/service/src/main/java/com/sv/service/api/MemberService.java b/service/src/main/java/com/sv/service/api/MemberService.java index 3362d97..b568c0e 100644 --- a/service/src/main/java/com/sv/service/api/MemberService.java +++ b/service/src/main/java/com/sv/service/api/MemberService.java @@ -221,7 +221,7 @@ public class MemberService extends BaseServiceImpl { // 创建用户 Member member = new Member(); - member.setNickname(mobile); + member.setNickname("用户" + RandomStringUtils.randomNumeric(8)); String inviteCode = ""; Integer count = 1; while (count == 1) { @@ -369,7 +369,8 @@ public class MemberService extends BaseServiceImpl { memberDTO.setId(member.getId()); memberDTO.setAvatar(member.getAvatar() == null ? "" : member.getAvatar()); memberDTO.setNickname(member.getNickname()); - memberDTO.setMobile(member.getMobile()); + String mobile = member.getMobile(); + memberDTO.setMobile(mobile != null && mobile.length() == 11 ? mobile.substring(0, 3) + "****" + mobile.substring(7) : mobile); memberDTO.setName(member.getName() == null ? "" : member.getName()); memberDTO.setSex(member.getSex()); memberDTO.setAge(member.getAge() == null ? null : member.getAge());