From bb839b724afdaf9b4ea8a80c2d8963d2b9c2934c Mon Sep 17 00:00:00 2001 From: Houjie <714924425@qq.com> Date: 星期四, 17 七月 2025 09:50:06 +0800 Subject: [PATCH] 企业微信静默登录修改手动授权登录 --- lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppWechatEnterpriseServiceImpl.java | 138 +++++++++++++++++++++++++++++++++++++-------- 1 files changed, 113 insertions(+), 25 deletions(-) diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppWechatEnterpriseServiceImpl.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppWechatEnterpriseServiceImpl.java index f98789b..720544c 100644 --- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppWechatEnterpriseServiceImpl.java +++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppWechatEnterpriseServiceImpl.java @@ -1031,31 +1031,31 @@ /** * OAuth2鐧诲綍锛屾垚鍔熻繑鍥炵櫥褰曠殑SysUser锛屽け璐ヨ繑鍥瀗ull */ - public SysUser oauth2Login(String code) { - String accessToken = this.getAppAccessToken(); - if (accessToken == null) { - return null; - } - String appUserId = this.getUserIdByThirdCode(code, accessToken); - 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); - if (thirdAccount != null) { - 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()); - thirdAccount = sysThirdAccountService.saveThirdUser(tlm); - return this.getSysUserByThird(thirdAccount, appUser, null, null); - } - } - return null; - } +// public SysUser oauth2Login(String code) { +// String accessToken = this.getAppAccessToken(); +// if (accessToken == null) { +// return null; +// } +// String appUserId = this.getUserIdByThirdCode(code, accessToken); +// 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); +// if (thirdAccount != null) { +// 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()); +// thirdAccount = sysThirdAccountService.saveThirdUser(tlm); +// return this.getSysUserByThird(thirdAccount, appUser, null, null); +// } +// } +// return null; +// } /** * 鏍规嵁绗笁鏂硅处鍙疯幏鍙栨湰鍦拌处鍙凤紝濡傛灉涓嶅瓨鍦ㄥ氨鍒涘缓 @@ -1093,4 +1093,92 @@ } } + + + + /** + * OAuth2鐧诲綍锛屾垚鍔熻繑鍥炵櫥褰曠殑SysUser锛屽け璐ヨ繑鍥瀗ull + */ + public SysUser oauth2Login(String code) { + String accessToken = this.getAppAccessToken(); + if (accessToken == null) { + return null; + } + + // 閫氳繃code鑾峰彇鐢ㄦ埛淇℃伅锛堝寘鍚玼ser_ticket锛� + JSONObject userInfoResult = this.getUserInfoByCode(code, accessToken); + if (userInfoResult == null || userInfoResult.getInteger("errcode") != 0) { + log.error("鑾峰彇浼佷笟寰俊鐢ㄦ埛淇℃伅澶辫触锛宑ode: {}", 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()); + tlm.setPhone(mobile); // 璁剧疆鎵嬫満鍙� + thirdAccount = sysThirdAccountService.saveThirdUser(tlm); + return this.getSysUserByThird(thirdAccount, appUser, null, null); + } + } + return null; + } + + /** + * 閫氳繃code鑾峰彇鐢ㄦ埛淇℃伅锛堝寘鍚玼ser_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(); // 杩斿洖绌哄璞¢伩鍏峃PE + } + } } -- Gitblit v1.9.3