소스 검색

微信小程序获取openid

李进 2 년 전
부모
커밋
4bd391fb83

+ 35 - 2
authorize-api-service/src/main/java/com/xy/third/dto/wx/WxMaDto.java

@@ -10,12 +10,45 @@ public class WxMaDto {
 
     @Data
     @Accessors(chain = true)
-    public static class OpenId {
+    public static class GetUserInfo {
 
-        @NotBlank(message = "code不能为空")
         @ApiModelProperty("code")
+        @NotBlank(message = "code不能为空")
         private String code;
 
+        @ApiModelProperty("用户数据")
+        private String encryptedData;
+
+        @ApiModelProperty("加密算法的初始向量")
+        private String iv;
     }
 
+    @Data
+    @Accessors(chain = true)
+    public static class Vo {
+
+        @ApiModelProperty("昵称")
+        private String nickName;
+
+        @ApiModelProperty("性别")
+        private String gender;
+
+        @ApiModelProperty("语言")
+        private String language;
+
+        @ApiModelProperty("市")
+        private String city;
+
+        @ApiModelProperty("省")
+        private String province;
+
+        @ApiModelProperty("国家")
+        private String country;
+
+        @ApiModelProperty("openId")
+        private String openId;
+
+        @ApiModelProperty("手机号")
+        private String tel;
+    }
 }

+ 21 - 5
authorize-api-service/src/main/java/com/xy/third/service/wx/WxMaServiceImpls.java

@@ -1,8 +1,11 @@
 package com.xy.third.service.wx;
 
 import cn.binarywang.wx.miniapp.api.WxMaService;
+import cn.binarywang.wx.miniapp.api.WxMaUserService;
 import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
 import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
+import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
+import cn.binarywang.wx.miniapp.bean.WxMaUserInfo;
 import cn.binarywang.wx.miniapp.config.WxMaConfig;
 import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
 import cn.binarywang.wx.miniapp.util.WxMaConfigHolder;
@@ -18,6 +21,8 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 
+import static com.xy.utils.Beans.copy;
+
 /**
  * 微信小程序
  *
@@ -30,9 +35,9 @@ public class WxMaServiceImpls {
 
     private ThirdLoginConfig thirdLoginConfig;
 
-    @PostMapping("oenId")
-    @ApiOperation("获取openId")
-    public R<String> openId(@RequestBody @Validated WxMaDto.OpenId openId) {
+    @PostMapping("getUserInfo")
+    @ApiOperation("获取用户信息")
+    public R<WxMaDto.Vo> getUserInfo(@RequestBody @Validated WxMaDto.GetUserInfo getUserInfo) {
         ThirdLoginConfig.Wx wx = thirdLoginConfig.getWx();
         WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl();
         config.setAppid(wx.getAppid());
@@ -40,8 +45,19 @@ public class WxMaServiceImpls {
         WxMaService wxMaService = new WxMaServiceImpl();
         wxMaService.setMultiConfigs(new JHashMap<String, WxMaConfig>().set("config", config));
         try {
-            WxMaJscode2SessionResult session = wxMaService.getUserService().getSessionInfo(openId.getCode());
-            return R.ok(session.getOpenid());
+            WxMaUserService userService = wxMaService.getUserService();
+            //获取session
+            WxMaJscode2SessionResult session = userService.getSessionInfo(getUserInfo.getCode());
+            String sessionKey = session.getSessionKey();
+            //获取用户信息
+            WxMaUserInfo userInfo = userService.getUserInfo(sessionKey, getUserInfo.getEncryptedData(), getUserInfo.getIv());
+            //获取手机信息
+            WxMaPhoneNumberInfo phoneNoInfo = userService.getPhoneNoInfo(sessionKey, getUserInfo.getEncryptedData(), getUserInfo.getIv());
+            //封装返回值
+            WxMaDto.Vo vo = copy(WxMaDto.Vo.class, userInfo)
+                    .setOpenId(session.getOpenid())
+                    .setTel(phoneNoInfo.getPhoneNumber());
+            return R.ok(vo);
         } catch (Exception e) {
             return R.fail("code无效");
         } finally {