钉钉获取免登用户信息

大家好,这里是一口八宝周👏

欢迎来到我的博客❤️一起交流学习 

文章中有需要改进的地方请大佬们多多指点 谢谢🙏

最近好像搞了个什么钉钉小程序,具体做什么咱也不知道,就让我搞一个钉钉获取免登录用户信息的接口出来,2分钟交代完的任务,是谁懵了我不说👀 没办法,只能回家面向百度了,现在来总结一下,虽然大概率以后也不会用到哈哈哈哈哈哈哈哈。

正文开始👇👇👇

钉钉获取免登录用户信息步骤

  1. 获取免登录授权码
  2. 获取accesstoken
  3. 获取userid
  4. 获取用户详情

其中1是通过h5实现的,234步骤则需要服务端支持,所以我们可以参考钉钉官方文档进行开发。

参考文档:概述 - 钉钉开放平台

下面进行实用教程⬇️

pom依赖

<dependency>
   <groupId>com.aliyun</groupId>
   <artifactId>dingtalk</artifactId>
   <version>1.1.76</version>
</dependency>
<dependency>
   <groupId>com.aliyun</groupId>
   <artifactId>alibaba-dingtalk-service-sdk</artifactId>
   <version>2.0.0</version>
</dependency>

获取accessToken 

获取企业内部应用的accessToken - 钉钉开放平台

文档说的很清晰,调用服务端API获取应用资源时,需要通过accessToken来鉴权调用者身份进行授权。所以我们需要获取企业内部的accessToken。

/**
     * 使用 Token 初始化账号Client
     * @return Client
     * @throws Exception
     * 钉钉开发者调用钉钉官方接口的时候,需要先要进行认证,
     * 企业开发者在钉钉创建应用,将应用的appKey键和appSecret传入,
     * 获取到accessToken值,通过该认证即可调用钉钉的相关接口。
     */
    public static com.aliyun.dingtalkoauth2_1_0.Client createClient() throws Exception {
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config();
        config.protocol = "https";
        config.regionId = "central";
        return new com.aliyun.dingtalkoauth2_1_0.Client(config);
    }

    public String getAccessToken() throws Exception {
        java.util.List<String> args = java.util.Arrays.asList();
        com.aliyun.dingtalkoauth2_1_0.Client client = DingTalkOauthClient.createClient();
        GetAccessTokenRequest getAccessTokenRequest = new GetAccessTokenRequest()
                .setAppKey("你的应用的AppKe")
                .setAppSecret("你的应用AppSecret");
        try {
            String accessToken = null;
            int expireIn = 7200;
            //存入缓存,有效期2h。避免频率拦截。可以使用redis进行缓存,这里我使用的是tair
            //key命名不做要求,有效期内token只有一个
            if(tairOperator.get(TAIR_KEY) != null){
                accessToken = (String) tairOperator.get(TAIR_KEY);
            }else {
                GetAccessTokenResponse response=client.getAccessToken(getAccessTokenRequest);
                accessToken = response.getBody().getAccessToken();
                expireIn = response.getBody().getExpireIn().intValue();//7200
            }
            tairOperator.put(TAIR_KEY , accessToken, expireIn);
            return accessToken;
        } catch (TeaException err) {
            if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
                // err 中含有 code 和 message 属性,可帮助开发定位问题
                log.error("getAccessToken error", err.message);
            }

        } catch (Exception _err) {
            TeaException err = new TeaException(_err.getMessage(), _err);
            if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
                // err 中含有 code 和 message 属性,可帮助开发定位问题
                log.error("error while getAccessToken", err.message);
            }

        }
        return null;
    }

通过这个方法我们可以拿到accessToken,接下来就是获取用户id

获取userid 

参考文档:通过免登码获取用户信息 - 钉钉开放平台

这里通过文档可以知道我们需要 access_token和code两个参数,毫无疑问,access_token就是通过⬆️上述步骤自行获取的。code就是通过步骤1,h5得到的免登授权码。我们需要做的就是拿这两个参数去调用钉钉内部接口。

 通过下面的方法,我们可以轻松得到用户的一些信息,具体格式要不要贴一下呢?文档是有的

    public OapiV2UserGetuserinfoResponse getUserId(String accessToken, String authCode) throws Exception {
        DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/getuserinfo");
        OapiV2UserGetuserinfoRequest req = new OapiV2UserGetuserinfoRequest();
        req.setCode(authCode);
        OapiV2UserGetuserinfoResponse rsp = client.execute(req, accessToken);
        log.info("getUserId return rsp:{}",JSON.toJSONString(rsp.getBody()));
        return rsp;
    }

得到的用户对象

{
        "errcode": 0, 
        "result": {
                "associated_unionid": "N2o5U3axxxx", 
                "unionid": "gliiW0piiii02zBUjUxxxx", 
                "device_id": "12drtfxxxxx", 
                "sys_level": 1, 
                "name": "张xx", 
                "sys": true, 
                "userid": "userid123"
        }, 
        "errmsg": "ok"
}

OK 那么通过👆这个我们可以拿到userid。没毛病吧,那么进一步拿到用户的详细信息💻该怎么办,简简单单,go on

获取用户详细信息 

文档:查询用户详情 - 钉钉开放平台

需要的参数就是access_token、userid还有一个language,而且参考值也给你了。文档写的也挺清晰的,直接CV大法,自信回头。我这里就不重复操作了。

咱就是说,直接一个方法整合一下,一步到位跑起来

public OapiV2UserGetResponse getUserInfo(String authCode) throws Exception {
        try {
            String accessToken = getAccessToken();
            String userid = getUserId(accessToken, authCode).getResult().getUserid();
            DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/get");
            OapiV2UserGetRequest req = new OapiV2UserGetRequest();
            req.setUserid(userid);
            req.setLanguage("zh_CN");
            OapiV2UserGetResponse rsp = client.execute(req, accessToken);
            return rsp;
        } catch (ApiException e) {
            e.printStackTrace();
        }
        return null;
    }

大功告成✅ 具体返回信息可以去看文档,别问,问就是我还没见过返回类型👀我没权限5555~

这点写的还是比较完整的,来自一只菜鸟的认可🐶

添加权限这块咱没搞,毕竟应用也不是我创建的,所以只能贴出来文档供大家参考,具体操作还请自行研究🧐

参考文档:添加接口调用权限 - 钉钉开放平台

 OK,拜拜👋

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值