From fffb836b0dccf9e0a2b49a80b635a6d9bdeb0cac Mon Sep 17 00:00:00 2001 From: lbw Date: Mon, 15 Jan 2024 16:40:34 +0800 Subject: [PATCH] =?UTF-8?q?:bug:=20Fixing=20a=20bug.=20#5426=20=E4=BC=81?= =?UTF-8?q?=E4=B8=9A=E5=BE=AE=E4=BF=A1=E5=A4=9A=E4=B8=AA=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E7=BB=91=E5=AE=9A=E4=B9=8B=E5=90=8E=E6=97=A0=E6=B3=95=E7=99=BB?= =?UTF-8?q?=E5=BD=95=EF=BC=8C=E5=8F=AA=E8=83=BD=E4=B8=80=E4=B8=AA=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E7=BB=91=E5=AE=9A=E8=B4=A6=E5=8F=B7=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E7=99=BB=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/handler/DingTalkLoginHandler.java | 33 +++++++++++++++++-- .../admin/handler/WeChatCPLoginHandler.java | 21 +++++++++++- 2 files changed, 50 insertions(+), 4 deletions(-) diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/DingTalkLoginHandler.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/DingTalkLoginHandler.java index cdd2ab473..4ffde599c 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/DingTalkLoginHandler.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/DingTalkLoginHandler.java @@ -17,11 +17,17 @@ package com.pig4cloud.pigx.admin.handler; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpUtil; +import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.pig4cloud.pigx.admin.api.dto.UserInfo; +import com.pig4cloud.pigx.admin.api.entity.SysSocialDetails; import com.pig4cloud.pigx.admin.api.entity.SysUser; import com.pig4cloud.pigx.admin.mapper.SysSocialDetailsMapper; import com.pig4cloud.pigx.admin.service.SysUserService; +import com.pig4cloud.pigx.common.core.constant.enums.LoginTypeEnum; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -50,8 +56,29 @@ public class DingTalkLoginHandler extends AbstractLoginHandler { */ @Override public String identify(String code) { + SysSocialDetails condition = new SysSocialDetails(); + condition.setType(LoginTypeEnum.DINGTALK.getType()); + SysSocialDetails socialDetails = sysSocialDetailsMapper.selectOne(new QueryWrapper<>(condition)); + + String getAccessTokenUrl = "https://api.dingtalk.com/v1.0/oauth2/userAccessToken"; + String accessTokenResult = HttpUtil.post(getAccessTokenUrl, + JSONUtil.createObj() + .set("clientId", socialDetails.getAppId()) + .set("clientSecret", socialDetails.getAppSecret()) + .set("grantType", "authorization_code") + .set("code", code) + .toString()); + log.debug("获取钉钉Token响应报文:{}", accessTokenResult); + String accessToken = JSONUtil.parseObj(accessTokenResult).getStr("accessToken"); + String getUserIdUrl = "https://api.dingtalk.com/v1.0/contact/users/me"; + + String userResult = HttpRequest.get(getUserIdUrl) + .header("x-acs-dingtalk-access-token", accessToken) + .execute() + .body(); + log.debug("获取钉钉UserId响应报文:{}", userResult); // 企微唯一标识 - return "LengLeng"; + return JSONUtil.parseObj(userResult).getStr("openId"); } /** @@ -61,7 +88,7 @@ public class DingTalkLoginHandler extends AbstractLoginHandler { */ @Override public UserInfo info(String openId) { - SysUser user = sysUserService.getOne(Wrappers.query().lambda().eq(SysUser::getWxCpUserid, openId)); + SysUser user = sysUserService.getOne(Wrappers.query().lambda().eq(SysUser::getWxDingUserid, openId)); if (user == null) { log.info("钉钉未绑定:{}", openId); @@ -78,7 +105,7 @@ public class DingTalkLoginHandler extends AbstractLoginHandler { */ @Override public Boolean bind(SysUser user, String identify) { - user.setWxCpUserid(identify); + user.setWxDingUserid(identify); sysUserService.updateById(user); return true; } diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/WeChatCPLoginHandler.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/WeChatCPLoginHandler.java index f6a70c5f8..6d6fff94d 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/WeChatCPLoginHandler.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/WeChatCPLoginHandler.java @@ -17,11 +17,16 @@ package com.pig4cloud.pigx.admin.handler; +import cn.hutool.http.HttpUtil; +import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.pig4cloud.pigx.admin.api.dto.UserInfo; +import com.pig4cloud.pigx.admin.api.entity.SysSocialDetails; import com.pig4cloud.pigx.admin.api.entity.SysUser; import com.pig4cloud.pigx.admin.mapper.SysSocialDetailsMapper; import com.pig4cloud.pigx.admin.service.SysUserService; +import com.pig4cloud.pigx.common.core.constant.enums.LoginTypeEnum; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -50,7 +55,21 @@ public class WeChatCPLoginHandler extends AbstractLoginHandler { */ @Override public String identify(String code) { - return "LengLeng"; + SysSocialDetails condition = new SysSocialDetails(); + condition.setType(LoginTypeEnum.WEIXIN_CP.getType()); + SysSocialDetails socialDetails = sysSocialDetailsMapper.selectOne(new QueryWrapper<>(condition)); + + String getAccessTokenUrl = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s"; + + String accessTokenResult = HttpUtil + .get(String.format(getAccessTokenUrl, socialDetails.getAppId(), socialDetails.getAppSecret())); + log.debug("获取企业微信Token响应报文:{}", accessTokenResult); + String accessToken = JSONUtil.parseObj(accessTokenResult).getStr("access_token"); + String getUserIdUrl = "https://qyapi.weixin.qq.com/cgi-bin/auth/getuserinfo?access_token=%s&code=%s"; + String userResult = HttpUtil.get(String.format(getUserIdUrl, accessToken, code)); + log.debug("获取企业微信UserId响应报文:{}", userResult); + // 企微唯一标识 + return JSONUtil.parseObj(userResult).getStr("userid"); } /**