diff --git a/epmet-auth/src/main/java/com/epmet/controller/LoginController.java b/epmet-auth/src/main/java/com/epmet/controller/LoginController.java index 54b415344b..46b9e6aedc 100644 --- a/epmet-auth/src/main/java/com/epmet/controller/LoginController.java +++ b/epmet-auth/src/main/java/com/epmet/controller/LoginController.java @@ -8,9 +8,11 @@ import com.epmet.commons.tools.validator.AssertUtils; import com.epmet.commons.tools.validator.ValidatorUtils; import com.epmet.dto.form.LoginByPassWordFormDTO; import com.epmet.dto.form.LoginByWxCodeFormDTO; +import com.epmet.dto.form.ResiWxPhoneFormDTO; import com.epmet.dto.result.UserTokenResultDTO; import com.epmet.service.CaptchaService; import com.epmet.service.LoginService; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -96,4 +98,21 @@ public class LoginController { public Result logout(@LoginUser TokenDto tokenDto, HttpServletRequest request) { return loginService.logoutByToken(tokenDto); } + + /** + * @param formDTO + * @return com.epmet.commons.tools.utils.Result + * @author yinzuomei + * @description 获取用户微信绑定的手机号 + * @Date 2020/7/2 14:33 + **/ + @PostMapping("getresiwxphone") + public Result getResiWxPhone(@RequestBody ResiWxPhoneFormDTO formDTO) { + ValidatorUtils.validateEntity(formDTO, ResiWxPhoneFormDTO.AddUserInternalGroup.class); + String phone = loginService.getResiWxPhone(formDTO); + if (StringUtils.isNotBlank(phone) && !"null".equals(phone)) { + return new Result().ok(phone); + } + return new Result().ok(""); + } } diff --git a/epmet-auth/src/main/java/com/epmet/dto/form/ResiWxPhoneFormDTO.java b/epmet-auth/src/main/java/com/epmet/dto/form/ResiWxPhoneFormDTO.java new file mode 100644 index 0000000000..f0148b3c14 --- /dev/null +++ b/epmet-auth/src/main/java/com/epmet/dto/form/ResiWxPhoneFormDTO.java @@ -0,0 +1,35 @@ +package com.epmet.dto.form; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; + +/** + * 描述一下 + * + * @author yinzuomei@elink-cn.com + * @date 2020/7/2 14:28 + */ +@Data +public class ResiWxPhoneFormDTO implements Serializable { + private static final long serialVersionUID = 4381236451736209332L; + public interface AddUserInternalGroup {} + /** + * 微信code + */ + @NotBlank(message = "wxCode不能为空",groups = {AddUserInternalGroup.class}) + private String wxCode; + + /** + * 用户信息 + */ + @NotBlank(message = "encryptedData不能为空",groups = {AddUserInternalGroup.class}) + private String encryptedData; + + /** + * 加密算法的初始向量 + */ + @NotBlank(message = "iv不能为空",groups = {AddUserInternalGroup.class}) + private String iv; +} diff --git a/epmet-auth/src/main/java/com/epmet/service/LoginService.java b/epmet-auth/src/main/java/com/epmet/service/LoginService.java index 37ab5f8f74..248e7c4d97 100644 --- a/epmet-auth/src/main/java/com/epmet/service/LoginService.java +++ b/epmet-auth/src/main/java/com/epmet/service/LoginService.java @@ -5,6 +5,7 @@ import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.utils.Result; import com.epmet.dto.form.LoginByPassWordFormDTO; import com.epmet.dto.form.LoginByWxCodeFormDTO; +import com.epmet.dto.form.ResiWxPhoneFormDTO; import com.epmet.dto.result.UserTokenResultDTO; /** @@ -50,4 +51,12 @@ public interface LoginService { **/ WxMaJscode2SessionResult getWxMaUser(String app, String wxCode); + /** + * @return java.lang.String + * @param formDTO + * @author yinzuomei + * @description 获取用户微信绑定的手机号 + * @Date 2020/7/2 14:33 + **/ + String getResiWxPhone(ResiWxPhoneFormDTO formDTO); } diff --git a/epmet-auth/src/main/java/com/epmet/service/impl/LoginServiceImpl.java b/epmet-auth/src/main/java/com/epmet/service/impl/LoginServiceImpl.java index b162acd39a..905061cf81 100644 --- a/epmet-auth/src/main/java/com/epmet/service/impl/LoginServiceImpl.java +++ b/epmet-auth/src/main/java/com/epmet/service/impl/LoginServiceImpl.java @@ -1,6 +1,8 @@ package com.epmet.service.impl; +import cn.binarywang.wx.miniapp.api.WxMaService; import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; +import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo; import cn.binarywang.wx.miniapp.bean.WxMaUserInfo; import com.epmet.common.token.constant.LoginConstant; import com.epmet.commons.tools.exception.EpmetErrorCode; @@ -129,6 +131,25 @@ public class LoginServiceImpl implements LoginService { return wxMaJscode2SessionResult; } + @Override + public String getResiWxPhone(ResiWxPhoneFormDTO formDTO) { + String phone=""; + try { + WxMaService wxMaService = wxMaServiceUtils.resiWxMaService(); + WxMaJscode2SessionResult wxMaJscode2SessionResult = wxMaService.jsCode2SessionInfo(formDTO.getWxCode()); + WxMaPhoneNumberInfo phoneNoInfo = wxMaService.getUserService().getPhoneNoInfo(wxMaJscode2SessionResult.getSessionKey(), + formDTO.getEncryptedData(), + formDTO.getIv()); + if (null != phoneNoInfo) { + phone= phoneNoInfo.getPurePhoneNumber(); + } + } catch (WxErrorException e) { + e.printStackTrace(); + log.error(String.format("获取用户微信绑定的手机号接口异常")); + } + return phone; + } + /** * 根据openId查询用户id *