1.创建企业内部应用
首先在钉钉开放平台注册企业内部应用。
选择【企业内部开发】
创建H5微应用
填写相关信息
企业内部H5微应用创建完成
2.接口开发前准备
了解不同应用所能支持的能力
主要了解~账号授权(免登)
以及完成开发前必要的权限开放
3.企业内部应用免登开发流程
【钉钉开放平台接口调试平台】服务端
【钉钉开放平台接口调试平台】前端
1.获取免登授权码
- 小程序免登
- 微应用免登
2.获取AccessToken
调用接口获取access_token,链接。
3.获取userid
调用接口获取用户的userid,链接。
4.获取用户详情
调用接口获取用户详细信息,链接。
4.获取微应用免登授权码
虽然文档里的内容不多,但做测试,我们需要在本地启动一个web服务,然后通过内网穿透,在钉钉的工作台打开,才能获取到钉钉微应用免登授权码
4.1创建本地web服务
npm install -g express
3.新建项目文件夹 (ding_demo)
4.初始化项目
npm init -y
5.新建index.html文件(首页)
【开发文档参考】
【corpId来源】:开发者后台
<!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内网穿透工具使用,获取到微应用免登授权码
由于钉钉内网穿透工具已废弃,这里使用花生壳作为内网穿透工具,来进行调试。
【免费】注册【花生壳】账号,设置内网穿透,内网服务端口与我们本地启的服务端口相同。
将创建的企业微应用,首页地址和PC端首页地址设置为花生壳提供的外网地址。【服务器出口IP】填上自己电脑的ip地址,百度输入IP即可查询到自己的IP地址。
启动web服务
node app.js
打开钉钉工作台,进入创建的企业微应用,即可查看到微应用免登授权码。【注意】只能使用微应用免登授权码,获取一次用户信息,获取用户信息后就失效。
为了方便微应用免登授权码复制,使用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>
5.获取AccessToken
【钉钉开放平台接口调试平台】服务端
接口信息
请求方式: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和用户信息接口基本信息
请求方式: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"
}