专有钉钉开发-获取登录用户信息(Java)

专有钉钉开发-获取登录用户信息(Java)

最近工作中有个浙政钉开发的项目,进行开发时需要在专有钉钉上进行调试,感觉示例代码比较基础,这里进行下简单的二次封装。

  • 专有钉钉服务器端API地址

[统一登录中心](https://openplatform-portal.dg-work.cn/backendManage/#/docs?apiType=serverapi&docKey=2674834)

  • 专有钉钉前端API地址

[统一登录中心](https://openplatform-portal.dg-work.cn/backendManage/#/docs?apiType=jsapi&docKey=2675418)

Controller层

@Api("浙政钉用户信息")
@RestController
@RequestMapping("/zzd/client")
public class ClientController extends BaseController {

    @Autowired
    private IClientService clientService;

    private static Logger logger = LoggerFactory.getLogger(ClientController.class);

    // 获取用户临时授权码authCode
    @ApiOperation(value = "获取用户临时授权码authCode", notes = "获取用户临时授权码authCode", httpMethod = "GET")
    @GetMapping("/getClientAuthCode/{authCode}")
    public AjaxResult getClientAuthCode(
            @ApiParam(name = "authCode", value = "需要获取的用户临时授权码", required = true) @PathVariable String authCode) {
        if (StringUtils.isEmpty(authCode) || "undefined".equals(authCode)) {
            return AjaxResult.error(HnPipelineConstants.MSG_ERROR_PARAMETER_WRONG);
        }
        logger.info("用户临时授权码authCode=" + authCode);
        AjaxResult code = clientService.getClientAuthCode(authCode);
        return code;
    }
}

IService接口

public interface IClientService {
	// 获取当前登录用户信息
    public AjaxResult getClientAuthCode(String authCode);
    
    // 获取通讯录权限范围
    public AjaxResult getscopesV2(Long tenantId);
 }

Service.Impl实现类

@Service
public class ClientServiceImpl implements IClientService {
    /*** 注入Mapper文件 ***/
    
    
    /*** 日志文件 ***/
    private static Logger logger = LoggerFactory.getLogger(ClientServiceImpl.class);

    private static ExecutableClient executableClient;
    
    /*** 静态代码块加载,只加载一次 ***/
    static {
        try {
            // 读取resource目录下的config配置文件
            Properties properties = new Properties();
            InputStream in = ClientServiceImpl.class.getClassLoader().getResourceAsStream("config/appRequest.properties");
            properties.load(in);
            executableClient = ExecutableClient.getInstance();
            //DomainName不同环境对应不同域名,示例为sass域名
            executableClient.setDomainName(properties.get("zzd.domainName").toString());
            executableClient.setProtocal(properties.get("zzd.protocal").toString());
            //应用App Key
            executableClient.setAccessKey(properties.get("zzd.appKey").toString());
            //应用App Secret
            executableClient.setSecretKey(properties.get("zzd.appSecret").toString());
            // 设置请求超时时间 5秒
            executableClient.setTimeout(5000);
            executableClient.init();
        } catch (IOException e) {
            e.printStackTrace();
            logger.info("无法加载到浙政钉开发配置文件!");
        }
    }
    
    
    /**
     * 中文名:根据authCode换取用户信息
     * 接口名:/rpc/oauth2/dingtalk_app_user.json
     * 所在目录:企业内应用免登
     * 调用方式:POST(HTTPS)
     *
     * @param authCode
     * @return AjaxResult
     */
    @Override
    public AjaxResult getClientAuthCode(String authCode) {
        //executableClient保证单例
        IntelligentPostClient intelligentPostClient = executableClient.newIntelligentPostClient("/rpc/oauth2/dingtalk_app_user.json");
        OapiRpcOauth2DingtalkAppUserJsonRequest oapiRpcOauth2DingtalkAppUserJsonRequest = new OapiRpcOauth2DingtalkAppUserJsonRequest();
        //登录access_token
        if (StringUtils.isEmpty(getAccessToken2())) {
            AjaxResult.error(HnPipelineConstants.MSG_ERROR_REQUEST_WAIT);
        }
        oapiRpcOauth2DingtalkAppUserJsonRequest.setAccess_token(getAccessToken2());
        //临时授权码
        oapiRpcOauth2DingtalkAppUserJsonRequest.setAuth_code(authCode);

        //获取结果
        OapiRpcOauth2DingtalkAppUserJsonResponse apiResult = intelligentPostClient.post(oapiRpcOauth2DingtalkAppUserJsonRequest);
        /*** 用户信息处理 ***/
        JSONObject accessTokenJsonObject = JSONObject.parseObject(apiResult.getContent());
        JSONObject content = accessTokenJsonObject.getJSONObject("content");
        if (content.getBoolean("success")) {
            JSONObject dataObj = accessTokenJsonObject.getJSONObject("content").getJSONObject("data");
            /***  拿到用户信息,判断用户是否存在,存在则返回用户信息,反之插入数据库 ***/
            
            
            return AjaxResult.success(clientInfo);
        }
        return AjaxResult.error("登陆失败,请联系系统管理员!");
    }
    
    /**
     * 中文名:获取通讯录权限范围
     * 接口名:/auth/scopesV2
     * 所在目录:获取通讯录用户信息
     * 调用方式:GET(HTTPS)
     *
     * @return
     */
    @Override
    public AjaxResult getscopesV2(Long tenantId) {
        //executableClient保证单例
        IntelligentGetClient intelligentGetClient = executableClient.newIntelligentGetClient("/auth/scopesV2");
        OapiAuthScopesV2Request oapiAuthScopesV2Request = new OapiAuthScopesV2Request();
        //租户ID
        oapiAuthScopesV2Request.setTenantId(tenantId);
        //获取结果
        OapiAuthScopesV2Response apiResult = intelligentGetClient.get(oapiAuthScopesV2Request);
        JSONObject resultJsonObject = JSONObject.parseObject(apiResult.getContent());
        if (resultJsonObject.containsKey("deptVisibleScopes")) {
            JSONArray jsonArray = resultJsonObject.getJSONArray("deptVisibleScopes");
            // 获取企业授权的部门编码列表
            List<String> deptList = JSONObject.parseArray(jsonArray.toJSONString(), String.class);
            //executableClient保证单例
            IntelligentGetClient intelligentGetClient2 = executableClient.newIntelligentGetClient("/mozi/organization/getOrganizationPath");
            OapiMoziOrganizationGetOrganizationPathRequest oapiMoziOrganizationGetOrganizationPathRequest = new OapiMoziOrganizationGetOrganizationPathRequest();
            //组织code
            oapiMoziOrganizationGetOrganizationPathRequest.setOrganizationCode(deptList.get(0));
            //租户ID
            oapiMoziOrganizationGetOrganizationPathRequest.setTenantId(tenantId);
            //获取结果
            OapiMoziOrganizationGetOrganizationPathResponse apiResult2 = intelligentGetClient2.get(oapiMoziOrganizationGetOrganizationPathRequest);
            return AjaxResult.success(apiResult2.getContent());
        }
        return AjaxResult.error(HnPipelineConstants.MSG_ERROR_NO_DEPT_VISIBLE_SCOPES);
    }
    
    
    /**
     * 获取刷新参数AccessToken
     *
     * @return accessToken
     */
    public String getAccessToken2() {
        String accessToken = "";
        //executableClient保证单例
        GetClient getClient = executableClient.newGetClient("/gettoken.json");
        //获取结果
        String accessTokenData = getClient.get();
        JSONObject accessTokenJsonObject = JSONObject.parseObject(accessTokenData);
        JSONObject content = accessTokenJsonObject.getJSONObject("content");
        if (content.getBoolean("success")) {
            accessToken = accessTokenJsonObject.getJSONObject("content").getJSONObject("data").getString("accessToken");
        }
        return accessToken;
    }
    
}

config配置文件

专有钉钉开发配置文件放在resource目录下的config文件夹下面,我这里命名为appRequest.properties。

zzd.domainName=openplatform.dg-work.cn
zzd.protocal=https
zzd.appKey=XXXXXXXXXXXXXXXXXXXXXXXXXX
zzd.appSecret=XXXXXXXXXXXXXXXXXXXXXXXXXXXX
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值