技术方:粟雪峰
实现企业内部使用钉钉时无需输入账号和密码。
开发流程
一、 免登授权码
用户信息保存在前端缓存中(dd.setStorage)或者cookie可以达到更好的效果,避免调用钉钉接口。
获取免登授权码。
方式一:小程序
调用dd.getAuthCode接口,通过JSAPI获取授权码。
dd.getAuthCode({ success:function(res){ /*{ authCode: 'hYLK98jkf0m' //string authCode }*/ }, fail:function(err){ } }); |
方式二:微应用
访问https://open-dev.dingtalk.com/apiExplorer#/jsapi?api=runtime.permission.requestAuthCode在线调试该接口,调用runtime.permission.requestAuthCode获取微应用免登授权码,适用于window、ios、pc客户端。
dd.runtime.permission.requestAuthCode({ corpId: "corpid",//企业的corpid,由前端从URL中获取 onSuccess: function(result) { /*{ code: 'hYLK98jkf0m' //string authCode 授权码 }*/ }, onFail : function(err) {}
}) |
二、获取access__token
调用access_token来鉴权调用者身份进行授权。
在获取access_token前,需要在开发者后台查看应用的AppKey和AppSecret:
登录https://open-dev.dingtalk.com/。
在应用开发页面,单击目标应用进入应用详情页面。
在基础信息页面,复制应用的AppKey和AppSecret。
三、获取用户userid
开发者需要使用本接口通过access_token和免登接口中获取的code来获取用户userid。在调用接口前,确保对应用已经添加了接口权限(开发者在后台申请)。
实例:
四、获取用户详情
服务端API是以应用维度授权的,确保对应用已经添加权限。
返回示例
企业内部应用:
{ "errcode": 0, "errmsg": "ok", "result": { "extension": "{\"爱好\":\"旅游\",\"年龄\":\"24\"}", "unionid": "xBnhjgjmofhhsLxxx", "boss": false, "unionEmpExt": { "corpId": "ding1c417cfd9e3142d1acaaa37764f9xxxx", "userid": "45694432-1019596262", "unionEmpMapList": [ { "corpId": "ding1c417cfd9e3142d1acaaa37764f9xxxx", "userid": "45694432-1019596262" } ] }, "role_list": [ { "group_name": "默认", "id": 1507113578, "name": "主管理员" } ], "admin": true, "remark": "杨XX", "title": "", "hired_date": 1598457600000, "userid": "manager4220", "work_place": "", "dept_order_list": [ { "dept_id": 100, "order": 176318669012199520 }, { "dept_id": 200, "order": 176318556766960500 } ], "real_authed": true, "dept_id_list": [ 200, 100 ], "job_number": "10001", "email": "1@example.com", "leader_in_dept": [ { "dept_id": 200, "leader": false }, { "dept_id": 1, "leader": false } ], "dept_position_list": [ { "dept_id": 200, "title": "销售", "is_main": false, "work_place": "北京" }, { "dept_id": 100, "title": "经理", "is_main": true, "work_place": "上海" } ], "manager_userid": "user01", "mobile": "188xxxx1234", "active": true, "telephone": "010-8xxxx6-2345", "avatar": "", "hide_mobile": false, "senior": false, "name": "杨xxx", "state_code": "86" }, "request_id": "51jql88tpa6g" } |
第三方企业应用:
{ "errcode": 0, "errmsg": "ok", "result": { "active": true, "admin": true, "avatar": "https:\/\/static-legacy.dingtalk.com\/media\/lALPD0.png", "boss": false, "dept_id_list": [ 616299 ], "dept_order_list": [ { "dept_id": 616299, "order": 1762998572 } ], "exclusive_account": false, "hide_mobile": false, "job_number": "", "leader_in_dept": [ { "dept_id": 616299, "leader": false } ], "manager_userid": "manager456", "name": "杨XX", "real_authed": true, "role_list": [ { "group_name": "默认", "id": 1585, "name": "子管理员" } ], "senior": false, "title": "", "union_emp_ext": {}, "unionid": "Wzh9KbyaCXXXXXX", "userid": "user456" }, "request_id": "ulwe0li6ytkx" } |