| | |
| | | if (accessToken == null) { |
| | | return null; |
| | | } |
| | | |
| | | // 通过code获取用户信息(包含user_ticket) |
| | | JSONObject userInfoResult = this.getUserInfoByCode(code, accessToken); |
| | | if (userInfoResult == null || userInfoResult.getInteger("errcode") != 0) { |
| | | log.error("获取企业微信用户信息失败,code: {}", code); |
| | | return null; |
| | | } |
| | | |
| | | String appUserId = userInfoResult.getString("UserId"); |
| | | String userTicket = userInfoResult.getString("user_ticket"); // 手动授权返回的用户票据 |
| | | |
| | | String appUserId = this.getUserIdByThirdCode(code, accessToken); |
| | | if (appUserId != null) { |
| | | // 判断第三方用户表有没有这个人 |
| | | LambdaQueryWrapper<SysThirdAccount> queryWrapper = new LambdaQueryWrapper<>(); |
| | |
| | | queryWrapper.or().eq(SysThirdAccount::getThirdUserId, appUserId); |
| | | queryWrapper.eq(SysThirdAccount::getThirdType, THIRD_TYPE); |
| | | SysThirdAccount thirdAccount = sysThirdAccountService.getOne(queryWrapper); |
| | | |
| | | // 通过user_ticket获取用户详细信息(包含手机号等敏感信息) |
| | | JSONObject userDetail = this.getUserDetailByTicket(userTicket, accessToken); |
| | | String mobile = userDetail.getString("mobile"); |
| | | |
| | | if (thirdAccount != null) { |
| | | // 更新手机号(如果有) |
| | | if (mobile != null && !mobile.isEmpty()) { |
| | | thirdAccount.setPhone(mobile); |
| | | sysThirdAccountService.updateById(thirdAccount); |
| | | } |
| | | return this.getSysUserByThird(thirdAccount, null, appUserId, accessToken); |
| | | } else { |
| | | // 直接创建新账号,包含手机号信息 |
| | | // 直接创建新账号 |
| | | User appUser = JwUserAPI.getUserByUserid(appUserId, accessToken); |
| | | ThirdLoginModel tlm = new ThirdLoginModel(THIRD_TYPE, appUser.getUserid(), appUser.getName(), appUser.getAvatar(), mobile); |
| | | ThirdLoginModel tlm = new ThirdLoginModel(THIRD_TYPE, appUser.getUserid(), appUser.getName(), appUser.getAvatar()); |
| | | thirdAccount = sysThirdAccountService.saveThirdUser(tlm); |
| | | return this.getSysUserByThird(thirdAccount, appUser, null, null); |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /** |
| | | * 通过code获取用户信息(包含user_ticket) |
| | | */ |
| | | private JSONObject getUserInfoByCode(String code, String accessToken) { |
| | | String url = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo" + |
| | | "?access_token=" + accessToken + |
| | | "&code=" + code; |
| | | try { |
| | | String result = String.valueOf(RestUtil.get(url)); |
| | | return JSONObject.parseObject(result); |
| | | } catch (Exception e) { |
| | | log.error("获取企业微信用户信息异常", e); |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 通过user_ticket获取用户详细信息(包含手机号等敏感信息) |
| | | */ |
| | | private JSONObject getUserDetailByTicket(String userTicket, String accessToken) { |
| | | String url = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserdetail"; |
| | | JSONObject params = new JSONObject(); |
| | | params.put("user_ticket", userTicket); |
| | | |
| | | try { |
| | | String result = String.valueOf(RestUtil.post(url + "?access_token=" + accessToken, JSONObject.parseObject(params.toJSONString()))); |
| | | // String result = String.valueOf(RestUtil.post(url + "?access_token=" + accessToken, params.toJSONString())); |
| | | return JSONObject.parseObject(result); |
| | | } catch (Exception e) { |
| | | log.error("获取企业微信用户详细信息异常", e); |
| | | return new JSONObject(); // 返回空对象避免NPE |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 根据第三方账号获取本地账号,如果不存在就创建 |
| | |
| | | private SysUser getSysUserByThird(SysThirdAccount thirdAccount, User appUser, String appUserId, String accessToken) { |
| | | String sysUserId = thirdAccount.getSysUserId(); |
| | | if (oConvertUtils.isNotEmpty(sysUserId)) { |
| | | SysUser sysUser = userMapper.selectById(sysUserId); |
| | | if (sysUser != null && StringUtils.isBlank(sysUser.getPhone())) { |
| | | //如果有用户,并且没有电话信息,更新进电话号码 |
| | | SysUser user = new SysUser() |
| | | .setId(sysUser.getId()) |
| | | .setPhone(thirdAccount.getPhone()); |
| | | userMapper.updateById(user); |
| | | } |
| | | return sysUser; |
| | | return userMapper.selectById(sysUserId); |
| | | } else { |
| | | // 如果没有 sysUserId ,说明没有绑定账号,获取到手机号之后进行绑定 |
| | | if (appUser == null) { |
| | | appUser = JwUserAPI.getUserByUserid(appUserId, accessToken); |
| | | } |
| | | appUser.setMobile(thirdAccount.getPhone()); |
| | | // 判断系统里是否有这个用户,根据工号匹配 |
| | | SysUser sysUser = userMapper.getUserByWorkNo(thirdAccount.getThirdUserId()); |
| | | //SysUser sysUser = userMapper.getUserByPhone(appUser.getMobile()); |
| | | if (sysUser != null) { |
| | | thirdAccount.setAvatar(appUser.getAvatar()); |
| | | thirdAccount.setRealname(appUser.getName()); |
| | |
| | | thirdAccount.setThirdUserUuid(appUser.getUserid()); |
| | | thirdAccount.setSysUserId(sysUser.getId()); |
| | | sysThirdAccountService.updateById(thirdAccount); |
| | | if (StringUtils.isBlank(sysUser.getPhone())) { |
| | | //如果没有手机号码,更新 |
| | | SysUser user = new SysUser() |
| | | .setId(sysUser.getId()) |
| | | .setPhone(appUser.getMobile()); |
| | | userMapper.updateById(user); |
| | | } |
| | | return sysUser; |
| | | } else { |
| | | // 没有就走创建逻辑 |
| | |
| | | } |
| | | } |
| | | |
| | | //适配手动授权登录,获取用户手机号码调整修改 |
| | | // /** |
| | | // * OAuth2登录,成功返回登录的SysUser,失败返回null |
| | | // */ |
| | | // public SysUser oauth2Login(String code) { |
| | | // String accessToken = this.getAppAccessToken(); |
| | | // if (accessToken == null) { |
| | | // return null; |
| | | // } |
| | | // |
| | | // // 通过code获取用户信息(包含user_ticket) |
| | | // JSONObject userInfoResult = this.getUserInfoByCode(code, accessToken); |
| | | // if (userInfoResult == null || userInfoResult.getInteger("errcode") != 0) { |
| | | // log.error("获取企业微信用户信息失败,code: {}", code); |
| | | // return null; |
| | | // } |
| | | // |
| | | // String appUserId = userInfoResult.getString("UserId"); |
| | | // String userTicket = userInfoResult.getString("user_ticket"); // 手动授权返回的用户票据 |
| | | // |
| | | // if (appUserId != null) { |
| | | // // 判断第三方用户表有没有这个人 |
| | | // LambdaQueryWrapper<SysThirdAccount> queryWrapper = new LambdaQueryWrapper<>(); |
| | | // queryWrapper.eq(SysThirdAccount::getThirdUserUuid, appUserId); |
| | | // queryWrapper.or().eq(SysThirdAccount::getThirdUserId, appUserId); |
| | | // queryWrapper.eq(SysThirdAccount::getThirdType, THIRD_TYPE); |
| | | // SysThirdAccount thirdAccount = sysThirdAccountService.getOne(queryWrapper); |
| | | // |
| | | // // 通过user_ticket获取用户详细信息(包含手机号等敏感信息) |
| | | // JSONObject userDetail = this.getUserDetailByTicket(userTicket, accessToken); |
| | | // String mobile = userDetail.getString("mobile"); |
| | | // |
| | | // if (thirdAccount != null) { |
| | | // // 更新手机号(如果有) |
| | | // if (mobile != null && !mobile.isEmpty()) { |
| | | // thirdAccount.setPhone(mobile); |
| | | // sysThirdAccountService.updateById(thirdAccount); |
| | | // } |
| | | // return this.getSysUserByThird(thirdAccount, null, appUserId, accessToken); |
| | | // } else { |
| | | // // 直接创建新账号,包含手机号信息 |
| | | // User appUser = JwUserAPI.getUserByUserid(appUserId, accessToken); |
| | | // ThirdLoginModel tlm = new ThirdLoginModel(THIRD_TYPE, appUser.getUserid(), appUser.getName(), appUser.getAvatar(), mobile); |
| | | // thirdAccount = sysThirdAccountService.saveThirdUser(tlm); |
| | | // return this.getSysUserByThird(thirdAccount, appUser, null, null); |
| | | // } |
| | | // } |
| | | // return null; |
| | | // } |
| | | // |
| | | // /** |
| | | // * 通过code获取用户信息(包含user_ticket) |
| | | // */ |
| | | // private JSONObject getUserInfoByCode(String code, String accessToken) { |
| | | // String url = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo" + |
| | | // "?access_token=" + accessToken + |
| | | // "&code=" + code; |
| | | // try { |
| | | // String result = String.valueOf(RestUtil.get(url)); |
| | | // return JSONObject.parseObject(result); |
| | | // } catch (Exception e) { |
| | | // log.error("获取企业微信用户信息异常", e); |
| | | // return null; |
| | | // } |
| | | // } |
| | | // |
| | | // /** |
| | | // * 通过user_ticket获取用户详细信息(包含手机号等敏感信息) |
| | | // */ |
| | | // private JSONObject getUserDetailByTicket(String userTicket, String accessToken) { |
| | | // String url = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserdetail"; |
| | | // JSONObject params = new JSONObject(); |
| | | // params.put("user_ticket", userTicket); |
| | | // |
| | | // try { |
| | | // String result = String.valueOf(RestUtil.post(url + "?access_token=" + accessToken, JSONObject.parseObject(params.toJSONString()))); |
| | | //// String result = String.valueOf(RestUtil.post(url + "?access_token=" + accessToken, params.toJSONString())); |
| | | // return JSONObject.parseObject(result); |
| | | // } catch (Exception e) { |
| | | // log.error("获取企业微信用户详细信息异常", e); |
| | | // return new JSONObject(); // 返回空对象避免NPE |
| | | // } |
| | | // } |
| | | |
| | | //适配手动授权登录,获取用户手机号码并存入或更新 |
| | | ///** |
| | | // * 根据第三方账号获取本地账号,如果不存在就创建 |
| | | // * |
| | | // * @param thirdAccount |
| | | // * @param appUser |
| | | // * @param appUserId |
| | | // * @param accessToken |
| | | // * @return |
| | | // */ |
| | | //private SysUser getSysUserByThird(SysThirdAccount thirdAccount, User appUser, String appUserId, String accessToken) { |
| | | // String sysUserId = thirdAccount.getSysUserId(); |
| | | // if (oConvertUtils.isNotEmpty(sysUserId)) { |
| | | // SysUser sysUser = userMapper.selectById(sysUserId); |
| | | // if (sysUser != null && StringUtils.isBlank(sysUser.getPhone())) { |
| | | // //如果有用户,并且没有电话信息,更新进电话号码 |
| | | // SysUser user = new SysUser() |
| | | // .setId(sysUser.getId()) |
| | | // .setPhone(thirdAccount.getPhone()); |
| | | // userMapper.updateById(user); |
| | | // } |
| | | // return sysUser; |
| | | // } else { |
| | | // // 如果没有 sysUserId ,说明没有绑定账号,获取到手机号之后进行绑定 |
| | | // if (appUser == null) { |
| | | // appUser = JwUserAPI.getUserByUserid(appUserId, accessToken); |
| | | // } |
| | | // appUser.setMobile(thirdAccount.getPhone()); |
| | | // // 判断系统里是否有这个用户,根据工号匹配 |
| | | // SysUser sysUser = userMapper.getUserByWorkNo(thirdAccount.getThirdUserId()); |
| | | // //SysUser sysUser = userMapper.getUserByPhone(appUser.getMobile()); |
| | | // if (sysUser != null) { |
| | | // thirdAccount.setAvatar(appUser.getAvatar()); |
| | | // thirdAccount.setRealname(appUser.getName()); |
| | | // thirdAccount.setThirdUserId(appUser.getUserid()); |
| | | // thirdAccount.setThirdUserUuid(appUser.getUserid()); |
| | | // thirdAccount.setSysUserId(sysUser.getId()); |
| | | // sysThirdAccountService.updateById(thirdAccount); |
| | | // if (StringUtils.isBlank(sysUser.getPhone())) { |
| | | // //如果没有手机号码,更新 |
| | | // SysUser user = new SysUser() |
| | | // .setId(sysUser.getId()) |
| | | // .setPhone(appUser.getMobile()); |
| | | // userMapper.updateById(user); |
| | | // } |
| | | // return sysUser; |
| | | // } else { |
| | | // // 没有就走创建逻辑 |
| | | // return sysThirdAccountService.createUser(appUser.getMobile(), appUser.getUserid()); |
| | | // } |
| | | // |
| | | // } |
| | | //} |
| | | |
| | | } |