钉钉免登流程(H5)

2,170 阅读9分钟

钉钉免登流程(H5)

核心点为获取用户详情信息

内部应用

1.创建内部应用

2.前端填写企业corpId获取用户临时授权码code

3.后端获取内部应用的token

请求方式 :GET

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

Query参数
名称类型是否必填示例值描述
appkeyStringdingeqqpkv3xxxx应用的唯一标识key。
appsecretStringGT-lsu-taDAsTsxxxx应用的密钥。AppKey和AppSecret可在应用详情页面获取。

4.根据code和token获取用户userid (唯一标识)

请求方式 :POST

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

Query参数
名称类型是否必填示例值描述
access_tokenString6ed1bxxx
Body参数
名称类型是否必填示例值描述
codeStringbab02f63c1e030fbbxxxx授权码五分钟内有效,且只能使用一次。

5.根据userid获取用户详情信息

Query参数
名称类型是否必填示例值描述
access_tokenString6ed1bxxx
Body参数
名称类型是否必填示例值描述
useridStringmanager4220用户的userId。
languageStringzh_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 说明
2xxxxx_0corpxxxx7160012第三方企业应用票据
4xxxxx_0corpxxxx7160014企业授权变更,包含授权、解除授权、授权变更。
7xxxxx_0corpxxxx13187第三方企业应用变更,包含停用、启用、删除(删除保留授权)
13xxxxx_0corpxxxxuser12313企业用户变更,包含用户添加、修改、删除
14xxxxx_0corpxxxxdept12314企业部门变更,包含部门添加、修改、删除
15xxxxx_0corpxxxxrole12315企业角色变更,包含角色添加、修改、删除
16xxxxx_0corpxxxxcorpxxxx16企业变更,包含企业修改、删除
17xxxxx_0corpxxxxorderidxx17市场订单
20xxxxx_0corpxxxxuser12320企业外部联系人变更,包含添加、修改、删除
22xxxxx_0corpxxxxef-sss-sv22ISV自定义审批
25xxxxx_0corpxxxxuserid或者deptid25家校通讯录1.0(Deprecated)信息变更。家校通讯录升级,请查看家校通讯录2.0数据推送
32xxxxx_0corpxxxx绑定: active+设备id解绑: delete+设备id32智能硬件绑定类型
37xxxxx_0corpxxxxorderidxx37应用市场商业化服务关闭或服务开通事件
50xxxxx_0corpxxxx无具体业务含义,只与其他属性构成唯一索引。拼接规则:人员关系事件: 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_insert50家校通讯录2.0,部门信息变更
51xxxxx_0corpxxxx无业务含义,只是与其他字段组成唯一索引。拼接规则:d_KaTeX parse error: Expected group after '_' at position 5: {id}_̲{action}51家校通讯录2.0,人员信息变更
63xxxxx_0corpxxxx试用人的unionid63应用开通记录回调信息
66xxxxx_0corpxxxx无业务意义,幂等。详见下方biz_type=66的数据格式解释66工作台组件变更回调事件
67xxxxx_0corpxxxx详见下方biz_type=67的数据格式解释67钉钉假期相关回调事件
133xxxxx_0corpxxxx详见下方biz_type=133的数据格式解释133CRM客户动态相关数据回调事件
137xxxxx_0corpxxxx无业务意义,幂等。详见下方biz_type=137的数据格式解释137人事平台员工异动V2相关数据回调事件。
139xxxxx_0corpxxxxxxxxx139异步转译通讯录id任务完成通知
165xxxxx_0corpxxxx无业务意义,幂等。详见下方biz_type=165的数据格式解释165人事平台员工档案变动事件相关数据的回调事件。
175xxxxx_0corpxxxx无业务意义,幂等。详见下方biz_type=175的数据格式解释175人事解决方案变更事件。

3.获取第三方的token

请求方式 :POST

请求地址 :https://oapi.dingtalk.com/service/get_corp_token

请求参数(SDK请求)
名称类型是否必填示例值描述
accessKeyStringsuitep1f5lzyglm7fryun第三方企业应用,输入第三方企业应用的SuiteKey,可在开发者后台的应用详情页获取。
accessSecretString_FP5PpZF3irDKj3e第三方企业应用,输入第三方企业应用的SuiteSecret,可在开发者后台的应用详情页获取。
suiteTicketStringtest第三方企业应用使用钉钉开放平台向应用推送的suite_ticket,请参考数据格式biz_type=2说明 suiteTicket是有有效期的,调用接口要确保从推送源中读取最新推送的suiteTicket值,一般五个小时推送一次。
auth_corpidStringding123456授权企业的CorpId,前端可直接获取corpId
请求参数(HTTP请求)
名称类型是否必填示例值描述
accessKeyStringsuitep1f5lzyglm7fryun* 如果是定制应用,输入定制应用的CustomKey,可在开发者后台的应用详情页获取。* 如果是第三方企业应用,输入第三方企业应用的SuiteKey,可在开发者后台的应用详情页获取。
timestampNumber1527130370219当前时间戳,单位是毫秒。
suiteTicketStringtest钉钉推送的suiteTicket。* 定制应用可随意填写。* 第三方企业应用使用钉钉开放平台向应用推送的suite_ticket,请参考数据格式biz_type=2说明 suiteTicket是有有效期的,调用接口要确保从推送源中读取最新推送的suiteTicket值,一般五个小时推送一次。
signatureString签名,签名计算方式请参考第三方访问接口的签名计算方法
auth_corpidStringding123456授权企业的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_tokenString6ed1bxxx
Body参数
名称类型是否必填示例值描述
codeStringbab02f63c1e030fbbxxxx授权码五分钟内有效,且只能使用一次。

5.根据userid获取用户详情信息

Query参数
名称类型是否必填示例值描述
access_tokenString6ed1bxxx
Body参数
名称类型是否必填示例值描述
useridStringmanager4220用户的userId。
languageStringzh_CN通讯录语言。* zh_CN :中文(默认值)* en_US :英文

6.第三方获取的用户详情没有手机号,邮箱等信息,需要通过钉钉统一套件的方式进行获取

1.前端调用钉钉统一套件获取用户authCode
2.根据autchCode获取用户token

请求方式 :POST

请求地址 :https://api.dingtalk.com/v1.0/oauth2/userAccessToken

Body参数
名称类型是否必填描述
clientIdString企业内部应用传应用的AppKey 第三方企业应用传应用的SuiteKey** 第三方个人应用传应用的AppId
clientSecretString应用密钥。* 企业内部应用传应用的AppSecret* 第三方企业应用传应用的SuiteSecret* 第三方个人应用传应用的AppSecret
codeStringOAuth 2.0 临时授权码。
refreshTokenStringOAuth2.0刷新令牌,从返回结果里面获取。
grantTypeString* 如果使用授权码换token,传authorization_code。* 如果使用刷新token换用户token,传refresh_token。
返回参数
名称类型描述
accessTokenString生成的accessToken。
refreshTokenString生成的refresh_token。可以使用此刷新token,定期的获取用户的accessToken
expireInLong超时时间,单位秒。
corpIdString所选企业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-tokenString调用服务端接口的授权凭证。使用个人用户的accessToken,请参考获取登录用户的访问凭证
Path参数
名称类型是否必填描述
unionIdString用户的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"
}