钉钉免登流程(H5)
核心点为获取用户详情信息
内部应用
1.创建内部应用
2.前端填写企业corpId获取用户临时授权码code
3.后端获取内部应用的token
请求方式 :GET
请求地址 :https://oapi.dingtalk.com/gettoken
Query参数
| 名称 | 类型 | 是否必填 | 示例值 | 描述 |
|---|---|---|---|---|
| appkey | String | 是 | dingeqqpkv3xxxx | 应用的唯一标识key。 |
| appsecret | String | 是 | GT-lsu-taDAsTsxxxx | 应用的密钥。AppKey和AppSecret可在应用详情页面获取。 |
4.根据code和token获取用户userid (唯一标识)
请求方式 :POST
请求地址 :https://oapi.dingtalk.com/topapi/v2/user/getuserinfo
Query参数
| 名称 | 类型 | 是否必填 | 示例值 | 描述 |
|---|---|---|---|---|
| access_token | String | 是 | 6ed1bxxx |
Body参数
| 名称 | 类型 | 是否必填 | 示例值 | 描述 |
|---|---|---|---|---|
| code | String | 是 | bab02f63c1e030fbbxxxx | 授权码五分钟内有效,且只能使用一次。 |
5.根据userid获取用户详情信息
Query参数
| 名称 | 类型 | 是否必填 | 示例值 | 描述 |
|---|---|---|---|---|
| access_token | String | 是 | 6ed1bxxx |
Body参数
| 名称 | 类型 | 是否必填 | 示例值 | 描述 |
|---|---|---|---|---|
| userid | String | 是 | manager4220 | 用户的userId。 |
| language | String | 否 | zh_CN | 通讯录语言。* zh_CN :中文(默认值)* en_US :英文 |
返回示例
{
"errcode":"0",
"result":{
"extension":"{"爱好":"旅游","年龄":"24"}",
"unionid":"z21HjQliSzpw0YWxxxxx",
"boss":"true",
"role_list":{
"group_name":"职务",
"name":"总监",
"id":"100"
},
"exclusive_account":"false",
"manager_userid":"manager240",
"admin":"true",
"remark":"备注备注",
"title":"技术总监",
"hired_date":"1597573616828",
"userid":"zhangsan",
"work_place":"未来park",
"dept_order_list":{
"dept_id":"2",
"order":"1"
},
"real_authed":"true",
"dept_id_list":"[2,3,4]",
"job_number":"4",
"email":"test@xxx.com",
"leader_in_dept":{
"leader":"true",
"dept_id":"2"
},
"mobile":"18513027676",
"active":"true",
"org_email":"test@xxx.com",
"telephone":"010-86123456-2345",
"avatar":"xxx",
"hide_mobile":"false",
"senior":"true",
"name":"张三",
"union_emp_ext":{
"union_emp_map_list":{
"userid":"5000",
"corp_id":"dingxxx"
},
"userid":"500",
"corp_id":"dingxxx"
},
"state_code":"86"
},
"errmsg":"ok"
}
此时就能获取用户的手机号等详细信息
第三方应用
1.创建第三方应用
2.前端获取临时授权码
在获取第三方信息前,需先配置钉钉数据的回调推送,默认有一般会使用rds数据推送,或者SyncHTTP推送,主要介绍SyncHTTP推送
1.需要在开发管理中配置,用于接收回调数据的接口
2.验证通过后,钉钉会每五小时进行数据推送
3.接收到数据后需在1200ms内进行响应,长时间不响应则会被限流
推送的数据类型
| 主键(id) | 订阅者ID( subscribe_id ) | 企业ID( corp_id ) | 业务ID( biz_id ) | 业务类型( biz_type ) | 说明 |
|---|---|---|---|---|---|
| 2 | xxxxx_0 | corpxxxx | 716001 | 2 | 第三方企业应用票据 |
| 4 | xxxxx_0 | corpxxxx | 716001 | 4 | 企业授权变更,包含授权、解除授权、授权变更。 |
| 7 | xxxxx_0 | corpxxxx | 1318 | 7 | 第三方企业应用变更,包含停用、启用、删除(删除保留授权) |
| 13 | xxxxx_0 | corpxxxx | user123 | 13 | 企业用户变更,包含用户添加、修改、删除 |
| 14 | xxxxx_0 | corpxxxx | dept123 | 14 | 企业部门变更,包含部门添加、修改、删除 |
| 15 | xxxxx_0 | corpxxxx | role123 | 15 | 企业角色变更,包含角色添加、修改、删除 |
| 16 | xxxxx_0 | corpxxxx | corpxxxx | 16 | 企业变更,包含企业修改、删除 |
| 17 | xxxxx_0 | corpxxxx | orderidxx | 17 | 市场订单 |
| 20 | xxxxx_0 | corpxxxx | user123 | 20 | 企业外部联系人变更,包含添加、修改、删除 |
| 22 | xxxxx_0 | corpxxxx | ef-sss-sv | 22 | ISV自定义审批 |
| 25 | xxxxx_0 | corpxxxx | userid或者deptid | 25 | 家校通讯录1.0(Deprecated)信息变更。家校通讯录升级,请查看家校通讯录2.0数据推送 |
| 32 | xxxxx_0 | corpxxxx | 绑定: active+设备id解绑: delete+设备id | 32 | 智能硬件绑定类型 |
| 37 | xxxxx_0 | corpxxxx | orderidxx | 37 | 应用市场商业化服务关闭或服务开通事件 |
| 50 | xxxxx_0 | corpxxxx | 无具体业务含义,只与其他属性构成唯一索引。拼接规则:人员关系事件: u_r_KaTeX parse error: Expected group after '_' at position 5: {id}̲{action}监护人身份事件:g_KaTeX parse error: Expected group after '' at position 5: {id}̲{action}学生身份事件: s_KaTeX parse error: Expected group after '' at position 5: {id}̲{action}老师身份事件: t_KaTeX parse error: Expected group after '' at position 5: {id}_̲{action}示例:g_1233_insert | 50 | 家校通讯录2.0,部门信息变更 |
| 51 | xxxxx_0 | corpxxxx | 无业务含义,只是与其他字段组成唯一索引。拼接规则:d_KaTeX parse error: Expected group after '_' at position 5: {id}_̲{action} | 51 | 家校通讯录2.0,人员信息变更 |
| 63 | xxxxx_0 | corpxxxx | 试用人的unionid | 63 | 应用开通记录回调信息 |
| 66 | xxxxx_0 | corpxxxx | 无业务意义,幂等。详见下方biz_type=66的数据格式解释 | 66 | 工作台组件变更回调事件 |
| 67 | xxxxx_0 | corpxxxx | 详见下方biz_type=67的数据格式解释 | 67 | 钉钉假期相关回调事件 |
| 133 | xxxxx_0 | corpxxxx | 详见下方biz_type=133的数据格式解释 | 133 | CRM客户动态相关数据回调事件 |
| 137 | xxxxx_0 | corpxxxx | 无业务意义,幂等。详见下方biz_type=137的数据格式解释 | 137 | 人事平台员工异动V2相关数据回调事件。 |
| 139 | xxxxx_0 | corpxxxx | xxxxx | 139 | 异步转译通讯录id任务完成通知 |
| 165 | xxxxx_0 | corpxxxx | 无业务意义,幂等。详见下方biz_type=165的数据格式解释 | 165 | 人事平台员工档案变动事件相关数据的回调事件。 |
| 175 | xxxxx_0 | corpxxxx | 无业务意义,幂等。详见下方biz_type=175的数据格式解释 | 175 | 人事解决方案变更事件。 |
3.获取第三方的token
请求方式 :POST
请求地址 :https://oapi.dingtalk.com/service/get_corp_token
请求参数(SDK请求)
| 名称 | 类型 | 是否必填 | 示例值 | 描述 |
|---|---|---|---|---|
| accessKey | String | 是 | suitep1f5lzyglm7fryun | 第三方企业应用,输入第三方企业应用的SuiteKey,可在开发者后台的应用详情页获取。 |
| accessSecret | String | 是 | _FP5PpZF3irDKj3e | 第三方企业应用,输入第三方企业应用的SuiteSecret,可在开发者后台的应用详情页获取。 |
| suiteTicket | String | 是 | test | 第三方企业应用使用钉钉开放平台向应用推送的suite_ticket,请参考数据格式biz_type=2。说明 suiteTicket是有有效期的,调用接口要确保从推送源中读取最新推送的suiteTicket值,一般五个小时推送一次。 |
| auth_corpid | String | 是 | ding123456 | 授权企业的CorpId,前端可直接获取corpId |
请求参数(HTTP请求)
| 名称 | 类型 | 是否必填 | 示例值 | 描述 |
|---|---|---|---|---|
| accessKey | String | 是 | suitep1f5lzyglm7fryun | * 如果是定制应用,输入定制应用的CustomKey,可在开发者后台的应用详情页获取。* 如果是第三方企业应用,输入第三方企业应用的SuiteKey,可在开发者后台的应用详情页获取。 |
| timestamp | Number | 是 | 1527130370219 | 当前时间戳,单位是毫秒。 |
| suiteTicket | String | 是 | test | 钉钉推送的suiteTicket。* 定制应用可随意填写。* 第三方企业应用使用钉钉开放平台向应用推送的suite_ticket,请参考数据格式biz_type=2。说明 suiteTicket是有有效期的,调用接口要确保从推送源中读取最新推送的suiteTicket值,一般五个小时推送一次。 |
| signature | String | 是 | 签名,签名计算方式请参考第三方访问接口的签名计算方法。 | |
| auth_corpid | String | 是 | ding123456 | 授权企业的CorpId。1,定制应用可以在开发者后台定制应用页面查看。2,授权开通第三方企业应用的授权企业corpid* 如果是微应用,在微应用首页地址后面拼接?corpId=CORPID,再在页面内js解析获取当前企业corpid(仅支持工作台进入应用时使用)* 如果是小程序,在小程序app.js的onLaunch方法内会自动获取当前企业corpId,只需要解析即可获取 |
http请求需要自己构造签名,sdk则不需要
4.根据code和token获取用户userid (唯一标识)
请求方式 :POST
请求地址 :https://oapi.dingtalk.com/topapi/v2/user/getuserinfo
Query参数
| 名称 | 类型 | 是否必填 | 示例值 | 描述 |
|---|---|---|---|---|
| access_token | String | 是 | 6ed1bxxx |
Body参数
| 名称 | 类型 | 是否必填 | 示例值 | 描述 |
|---|---|---|---|---|
| code | String | 是 | bab02f63c1e030fbbxxxx | 授权码五分钟内有效,且只能使用一次。 |
5.根据userid获取用户详情信息
Query参数
| 名称 | 类型 | 是否必填 | 示例值 | 描述 |
|---|---|---|---|---|
| access_token | String | 是 | 6ed1bxxx |
Body参数
| 名称 | 类型 | 是否必填 | 示例值 | 描述 |
|---|---|---|---|---|
| userid | String | 是 | manager4220 | 用户的userId。 |
| language | String | 否 | zh_CN | 通讯录语言。* zh_CN :中文(默认值)* en_US :英文 |
6.第三方获取的用户详情没有手机号,邮箱等信息,需要通过钉钉统一套件的方式进行获取
1.前端调用钉钉统一套件获取用户authCode
2.根据autchCode获取用户token
请求方式 :POST
请求地址 :https://api.dingtalk.com/v1.0/oauth2/userAccessToken
Body参数
| 名称 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| clientId | String | 是 | 企业内部应用传应用的AppKey 第三方企业应用传应用的SuiteKey** 第三方个人应用传应用的AppId |
| clientSecret | String | 否 | 应用密钥。* 企业内部应用传应用的AppSecret* 第三方企业应用传应用的SuiteSecret* 第三方个人应用传应用的AppSecret |
| code | String | 否 | OAuth 2.0 临时授权码。 |
| refreshToken | String | 否 | OAuth2.0刷新令牌,从返回结果里面获取。 |
| grantType | String | 否 | * 如果使用授权码换token,传authorization_code。* 如果使用刷新token换用户token,传refresh_token。 |
返回参数
| 名称 | 类型 | 描述 |
|---|---|---|
| accessToken | String | 生成的accessToken。 |
| refreshToken | String | 生成的refresh_token。可以使用此刷新token,定期的获取用户的accessToken |
| expireIn | Long | 超时时间,单位秒。 |
| corpId | String | 所选企业corpId。 |
返回示例
HTTP/1.1 200 OK
Content-Type:application/json
{
"accessToken" : "abcd",
"refreshToken" : "abcd",
"expireIn" : 7200,
"corpId" : "corpxxxx"
}
3.根据token和用户unionid获取用户手机号
请求方式 :POST
请求地址 :https://api.dingtalk.com/v1.0/contact/users/{unionId}
Header参数
| 名称 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| x-acs-dingtalk-access-token | String | 是 | 调用服务端接口的授权凭证。使用个人用户的accessToken,请参考获取登录用户的访问凭证。 |
Path参数
| 名称 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| unionId | String | 是 | 用户的unionId。**说明 **如需获取当前授权人的信息,unionId参数可以传me。 |
返回示例
HTTP/1.1 200 OK
Content-Type:application/json
{
"nick" : "zhangsan",
"avatarUrl" : "https://xxx",
"mobile" : "150xxxx9144",
"openId" : "123",
"unionId" : "z21HjQliSzpw0Yxxxx",
"email" : "zhangsan@alibaba-inc.com",
"stateCode" : "86"
}