钉钉对接启示录

前端部分须安装 dingtalk-jsapi

内部应用

免登

钉钉免登总流程:

  1. 使用 dingtalk-jsapi 获取免登授权码 auth_code
  2. 通过应用的唯一标识 appkey 和应用密钥 appsecret 获取 access_token
  3. 通过 auth_code 和 access_token 获取 userid
  4. 通过 userid 和 access_token 获取 userinfo

前端流程:

  1. 获取 auth_code。
  2. auth_code 发送到后台,换区 userinfo。
1
2
3
4
5
6
7
8
9
dd.runtime.permission.requestAuthCode({
corpId, // 企业ID
onSuccess(result) {
console.log(result);
},
onFail(error) {
console.log(error);
},
});

鉴权

钉钉总流程

  1. 通过应用的唯一标识 appkey 和应用密钥 appsecret 获取 access_token
  2. 根据 access_token 获取 jsapi_ticket
  3. 根据 jsapi_ticket, 随机串 nonceStr, 时间戳 timeStamp, 页面 url 计算签名 signature。
  4. 根据 随机串 nonceStr,应用标识 agentId,时间戳 timeStamp,企业ID corpId,签名 signature 进行鉴权(调用 dd.config)。

鉴权后,可调用 dingtalk-jsapi 中的方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
dd.config({
agentId: '', // 必填,微应用ID
corpId: '',//必填,企业ID
timeStamp: '', // 必填,生成签名的时间戳
nonceStr: '', // 必填,生成签名的随机串
signature: '', // 必填,签名
type: 0, // 选填。0表示微应用的jsapi,1表示服务窗的jsapi;不填默认为0
jsApiList: [
'runtime.info',
'biz.contact.choose',// 鉴权后可调用
'device.notification.confirm',
'device.notification.alert',
'device.notification.prompt',
'biz.ding.post',
'biz.util.openLink',
]// 必填,需要使用的jsapi列表,注意:不要带dd。
});