1.创建企业内部应用

首先在钉钉开放平台注册企业内部应用。

钉钉获取用户的userid python 钉钉获取信息_开发语言

 选择【企业内部开发】

钉钉获取用户的userid python 钉钉获取信息_服务端_02

创建H5微应用

钉钉获取用户的userid python 钉钉获取信息_开发语言_03

填写相关信息

钉钉获取用户的userid python 钉钉获取信息_html_04

企业内部H5微应用创建完成

钉钉获取用户的userid python 钉钉获取信息_javascript_05

2.接口开发前准备

开发前必读

了解不同应用所能支持的能力

钉钉获取用户的userid python 钉钉获取信息_服务端_06

 主要了解~账号授权(免登)

钉钉获取用户的userid python 钉钉获取信息_服务端_07

 以及完成开发前必要的权限开放

钉钉获取用户的userid python 钉钉获取信息_javascript_08

3.企业内部应用免登开发流程

钉钉开放平台接口调试平台】服务端

钉钉开放平台接口调试平台】前端

1.获取免登授权码

  • 小程序免登
  • 微应用免登

2.获取AccessToken

调用接口获取access_token,链接

3.获取userid

调用接口获取用户的userid,链接

4.获取用户详情

调用接口获取用户详细信息,链接

4.获取微应用免登授权码

获取微应用免登授权码—钉钉开发文档

钉钉获取用户的userid python 钉钉获取信息_服务端_09

虽然文档里的内容不多,但做测试,我们需要在本地启动一个web服务,然后通过内网穿透,在钉钉的工作台打开,才能获取到钉钉微应用免登授权码

4.1创建本地web服务

  1. 安装node(安装步骤
  2. 安装express(安装步骤
npm install -g express

     3.新建项目文件夹 (ding_demo)

     4.初始化项目

npm init -y

    5.新建index.html文件(首页)

开发文档参考

【corpId来源】:开发者后台

钉钉获取用户的userid python 钉钉获取信息_前端_10

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>弹出函数</title>
    <!-- 引入外部js钉钉官方接口 -->
    <script src="https://g.alicdn.com/dingding/dingtalk-jsapi/2.10.3/dingtalk.open.js"></script>
    
    <script type="text/javascript">
        dd.ready(function() {
            dd.runtime.permission.requestAuthCode({
                corpId : "dingxxxxxxxxxxxx",
                onSuccess : function(result) {
                    var code = result.code;
                    alert('获取成功,你的免登code为:' + code);
                    //将code 发往后台处理
                },
                onFail : function(err) {
                    alert('出错了, 你获取了一个自定义错误' + err);
                }
            });
        });
    </script>
</head>
<body>

    <button id="code" onclick="dd.ready()">获取授权码</button>

</body>
</html>

6.新建app.js文件

var express = require('express')
const path = require('path')

 app = express()
 
 app.get('/' , function(req,res){
     console.log(__dirname)
     res.sendFile(path.resolve( filepath + "index.html" ));// index.html文件路径
 })
 
 app.listen(5000,function(){
     // web服务端口
     console.log("5000")
 })

项目文件结构

└── ding_demo/
    ├── node_modules/                    
    ├── app.js/                    // web配置文件
    ├── index.html/                // 首页
    ├── package.json/              // 配置文件
    ├── package-lock.json/         // 配置文件

7.启动服务

node app.js

【报错1】Uncaught (in promise) Error: Do not support the current environment:notInDingTalk

(原因:使用本地浏览器打开,没有在钉钉工作台打开)

【报错2】Uncaught (in promise) ReferenceError: dd is not defined

(原因:没有加载dingtalk.open.js,需在<head>标签内添加引入外部js钉钉官方接口)

<script src="https://g.alicdn.com/dingding/dingtalk-jsapi/2.10.3/dingtalk.open.js"></script>

【报错3】Uncaught SyntaxError: missing ) after argument list (at (index):32:6)

(原因:在32行处缺少)括号)

4.2内网穿透工具使用,获取到微应用免登授权码

由于钉钉内网穿透工具已废弃,这里使用花生壳作为内网穿透工具,来进行调试。

钉钉获取用户的userid python 钉钉获取信息_html_11

【免费】注册【花生壳】账号,设置内网穿透,内网服务端口与我们本地启的服务端口相同。

钉钉获取用户的userid python 钉钉获取信息_服务端_12

 将创建的企业微应用,首页地址和PC端首页地址设置为花生壳提供的外网地址。【服务器出口IP】填上自己电脑的ip地址,百度输入IP即可查询到自己的IP地址。

钉钉获取用户的userid python 钉钉获取信息_开发语言_13

 启动web服务

node app.js

钉钉获取用户的userid python 钉钉获取信息_服务端_14

 打开钉钉工作台,进入创建的企业微应用,即可查看到微应用免登授权码。【注意】只能使用微应用免登授权码,获取一次用户信息,获取用户信息后就失效。

钉钉获取用户的userid python 钉钉获取信息_javascript_15

为了方便微应用免登授权码复制,使用Promise修改

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>弹出函数</title>
    <!-- 引入外部js钉钉官方接口 -->
    <script src="https://g.alicdn.com/dingding/dingtalk-jsapi/2.10.3/dingtalk.open.js"></script>
    <script type="text/javascript">
        function onReadyPromise() {
           let promiseA = new Promise((resolve, reject)=>{ 
                    dd.ready(()=>{ 
                        dd.runtime.permission.requestAuthCode({
                            corpId: 'dingxxxxxxxxxxxxxxxxxxxxxx', 
                            // 企业id
                            onSuccess: function (info) {
                                // 通过该免登 可以获取免登授权码 
                                //进行页面登录一系列操作,然后resolve
                                alert("免登授权码:" + info.code);
                                resolve(info.code);
                            },
                            onFail: function (res) { 
                                console.log(res);
                            }
                        });
                    });
                    dd.error(function (err) { 
                        console.log('dd error: ' + JSON.stringify(err)); 
                    });
           });
           
           promiseA.then(function(data){
               document.getElementById("rest").innerText = data;
           });
           
        }
    </script>
</head>
<body>

<button id="code" onclick="onReadyPromise()">获取授权码</button>
<h2 id="rest">显示</h2>

</body>
</html>

钉钉获取用户的userid python 钉钉获取信息_开发语言_16

5.获取AccessToken

钉钉开发文档

钉钉开放平台接口调试平台】服务端

钉钉获取用户的userid python 钉钉获取信息_开发语言_17

 接口信息

请求方式:GET

请求地址https://oapi.dingtalk.com/gettoken

Query参数

名称

类型

是否必填

示例值

描述

appkey

String


dingeqqpkv3xxxx

应用的唯一标识key。

appsecret

String


GT-lsu-taDAsTsxxxx

应用的密钥。AppKey和AppSecret可在钉钉开发者后台的应用详情页面获取。

返回参数

名称

类型

示例值

描述

access_token

String

fw8ef8we8f76e6f7s8dxxxx

生成的access_token。

expires_in

Number

7200

access_token的过期时间,单位秒。

errmsg

String

ok

返回码描述。

errcode

Number

0

返回码。

示例

请求示例(HTTP)


GET https://oapi.dingtalk.com/gettoken?appkey=appkey&appsecret=appsecret


返回示例

{
    "errcode": 0,
    "access_token-": "xxxxxxxxxxxx", 
    "errmsg": "ok",
    "expires_in": 7200
}

6.获取用户userid和用户信息

钉钉开发文档

钉钉获取用户的userid python 钉钉获取信息_开发语言_18

 用户userid和用户信息接口基本信息

请求方式:POST

请求地址https://oapi.dingtalk.com/topapi/v2/user/getuserinfo

接口Query参数

名称

类型

是否必填

示例值

描述

access_token

String


6ed1bxxx

调用服务端API的应用凭证。企业内部应用,通过获取企业内部应用的access_token接口获取。第三方企业应用,通过获取第三方企业应用的access_token接口获取。

接口Body参数

名称

类型

是否必填

示例值

描述

code

String


bab02f63c1e030fbbxxxx

免登授权码,获取方式请参考:小程序免登授权码微应用免登授权码说明 此授权码五分钟内有效,且只能使用一次。

返回参数

名称

类型

示例值

描述

request_id

String

e8krly4vyiln

请求ID。

errcode

Number

0

返回码

errmsg

String

ok

对返回码的文本描述内容。

result

UserGetByCodeResponse

返回结果。

示例

请求示例(HTTP)


POST https://oapi.dingtalk.com/topapi/v2/user/getuserinfo?access_token=ACCESS_TOKEN


请求正文

{
        "code":"bab02f63c1e030fbbxxxx"
}

返回示例

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