فهرست منبع

app授权登录代码提交

yjwang 2 روز پیش
والد
کامیت
23e8fc0ad7

+ 55 - 15
fs-user-app/src/main/java/com/fs/app/controller/AppLoginController.java

@@ -335,26 +335,66 @@ public class AppLoginController extends AppBaseController{
         if (StringUtils.isEmpty(param.getPhone())) {
             return R.error("获取手机号失败");
         }
-        // 根据手机号查询用户
-        FsUser user = findUserByPhone(param.getPhone());
+        String phone = param.getPhone();
+        String encryptedPhone = encryptPhone(phone);
+
+        // 根据手机号查用户
+        FsUser user = findUserByPhone(phone);
+        logger.info("zyp app绑定微信,param: {}", param);
+        Map tokenResult = WxUtil.getAccessToken(param.getCode(), openProperties.getAppId(), openProperties.getSecret());
+        logger.info("APP的ID信息: {}", openProperties.getAppId());
+        logger.info("APP的密钥信息: {}", openProperties.getSecret());
+        String accessToken = tokenResult.get("access_token").toString();
+        String unionid = String.valueOf(tokenResult.get("unionid"));
+        logger.info("APP获取的唯一ID信息: {}",unionid);
+        String openid = String.valueOf(tokenResult.get("openid"));
+        // 获取微信用户信息
+        Map userInfo = WxUtil.getUserInfo(accessToken, openid);
+        if (userInfo == null) {
+            return R.error("获取微信用户信息失败");
+        }
+        String nickname = String.valueOf(userInfo.get("nickname"));
+        Integer sex = (Integer) userInfo.get("sex");
+        String avatar = String.valueOf(userInfo.get("headimgurl"));
+        if (tokenResult == null || tokenResult.get("access_token") == null) {
+            return R.error("微信授权失败");
+        }
+        // 手机号不存在,根据unionid查询
         if (user == null) {
-            createNewUser(param);
-            return R.ok().put("isNew",true).put("phone",encryptPhone(param.getPhone()));
-        } else {
-            if (user.getUnionId()==null){
-                if (user.getPhone().length()<=11){
-                    FsUser fsUser = new FsUser();
-                    fsUser.setUserId(user.getUserId());
-                    fsUser.setPhone(encryptPhone(param.getPhone()));
-                    userMapper.updateFsUser(fsUser);
-                    logger.info("zyp \n【手机加密】:{}",encryptPhone(param.getPhone()));
+            // 根据unionid查询不到,创建新用户
+            FsUser userByUnionId = userMapper.selectFsUserByUnionid(unionid);
+            if (userByUnionId == null) {
+                FsUser newUser = createNewUser(param);
+                return generateTokenAndReturn(newUser);
+            }else {
+                //根据手机号查不到但是根据unionid查到了,将手机号和这个用户关联起来
+                if (userByUnionId.getPhone() != null){
+                    return R.error("该微信已绑定其他用户,请勿重复绑定!");
                 }
-                return R.ok().put("isNew",true).put("phone",encryptPhone(param.getPhone()));
+                userByUnionId.setPhone(encryptPhone(param.getPhone()));
+                userByUnionId.setNickName(nickname);
+                userByUnionId.setAvatar(avatar);
+                userByUnionId.setSex(sex);
+                userByUnionId.setJpushId(param.getJpushId());
+                userMapper.updateFsUser(userByUnionId);
+                return generateTokenAndReturn(userByUnionId);
             }
-            if (StringUtils.isNotEmpty(param.getJpushId())) {
-                updateExistingUserJpushId(user, param.getJpushId());
+        }else {
+            // 手机号存在,但unionId为空,绑定微信
+            if (user.getUnionId() == null) {
+                user.setUnionId(unionid);
+                user.setNickName(nickname);
+                user.setAvatar(avatar);
+                user.setSex(sex);
+                user.setJpushId(param.getJpushId());
+                userMapper.updateFsUser(user);
+                return generateTokenAndReturn(user);
             }
         }
+        //用户已存在且 unionid 存在更新 JPush ID
+        if (StringUtils.isNotEmpty(param.getJpushId())) {
+            updateExistingUserJpushId(user, param.getJpushId());
+        }
         return generateTokenAndReturn(user);
     }
 

+ 1 - 0
fs-user-app/src/main/java/com/fs/app/param/FsUserLoginParam.java

@@ -23,4 +23,5 @@ public class FsUserLoginParam implements Serializable {
 
     private String loginDevice;
     private String source;
+    private String unionid;
 }