drew 5 лет назад
Родитель
Сommit
0c54a11713

+ 11 - 0
src/main/java/com/izouma/jiashanxia/service/UserService.java

@@ -2,6 +2,7 @@ package com.izouma.jiashanxia.service;
 
 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 cn.hutool.core.util.ObjectUtil;
 import com.izouma.jiashanxia.config.Constants;
@@ -16,6 +17,7 @@ import com.izouma.jiashanxia.security.JwtUserFactory;
 import com.izouma.jiashanxia.service.sms.SmsService;
 import com.izouma.jiashanxia.service.storage.StorageService;
 import com.izouma.jiashanxia.utils.JpaUtils;
+import com.izouma.jiashanxia.utils.SecurityUtils;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import me.chanjar.weixin.common.error.WxErrorException;
@@ -172,6 +174,15 @@ public class UserService {
         return user;
     }
 
+    public User getMaPhone(String sessionKey, String encryptedData, String iv) {
+        // 解密用户信息
+        WxMaPhoneNumberInfo phoneNoInfo = wxMaService.getUserService().getPhoneNoInfo(sessionKey, encryptedData, iv);
+        User user = userRepo.findById(SecurityUtils.getAuthenticatedUser().getId())
+                .orElseThrow(new BusinessException("用户不存在"));
+        user.setPhone(phoneNoInfo.getPhoneNumber());
+        return userRepo.save(user);
+    }
+
     public String setPassword(Long userId, String password) {
         User user = userRepo.findById(userId).orElseThrow(new BusinessException("用户不存在"));
         user.setPassword(new BCryptPasswordEncoder().encode(password));

+ 10 - 0
src/main/java/com/izouma/jiashanxia/web/UserController.java

@@ -133,4 +133,14 @@ public class UserController extends BaseController {
     public List<User> employee(Long companyId) {
         return userRepo.findAllByCompanyId(companyId);
     }
+
+    @PostMapping("/getMaPhone")
+    @ApiOperation(value = "获取小程序手机号")
+    public User getMaPhone(String sessionKey, String encryptedData, String iv) {
+        User user = userService.getMaPhone(sessionKey, encryptedData, iv);
+        if (user != null) {
+            return user;
+        }
+        throw new BusinessException("获取用户信息失败");
+    }
 }