钉钉微应用移动端获取用户信息
2018-03-06 本文已影响5人
WestLonely
方式一 鉴权流程完成后
- 钉钉的某些API在鉴权前是可以调用的,因此,可以直接调用,但是 dd.biz.user.get 不鉴权是无法调用的,关于鉴权,请参考 钉钉鉴权文档;配置完成之后,将相关参数传递给前端,前端在将下列参数配置齐全就可以调用 dd.biz.user.get 获取用户信息了.
dd.config({
agentId: '', // 必填,微应用ID
corpId: '',//必填,企业ID
timeStamp: , // 必填,生成签名的时间戳
nonceStr: '', // 必填,生成签名的随机串
signature: '', // 必填,签名
type:0/1, //选填,0表示微应用的jsapi,1表示服务窗的jsapi,不填默认为0。该参数从dingtalk.js的0.8.3版本开始支持
jsApiList : [ 'runtime.info', 'biz.contact.choose',
'device.notification.confirm', 'device.notification.alert',
'device.notification.prompt', 'biz.ding.post',
'biz.util.openLink' ] // 必填,需要使用的jsapi列表,注意:不要带dd。
});
方式二 没有鉴权
- 后端提供接口,接受微应用免登授权码。前端调用 dd.runtime.permission.requestAuthCode 获取到微应用免登授权码后传给后端,后端分一下几步:
- 获取 corpid 和 corpsecret : 参考官方API,必须使用最高管理员才能拿到 corpsecret ,
- 拿到 corpid 和 corpsecret 访问
https://oapi.dingtalk.com/gettoken?corpid=id&corpsecret=secrect
接口获取 access_token ,返回的结果如下:
{
"errcode": 0,
"errmsg": "ok",
* "access_token": "fw8ef8we8f76e6f7s8df8s" //这个就是
}
- 拿到 access_token 之后,和前端传过来的 code 调用
https://oapi.dingtalk.com/user/getuserinfo?access_token=ACCESS_TOKEN&code=CODE
获取 userid,
{
"errcode": 0,
"errmsg": "ok",
* "userid": "USERID", //就是这个
"deviceId":"DEVICEID",
"is_sys": true,
"sys_level": 0|1|2
}
- 拿到 userid 之后,在调用
https://oapi.dingtalk.com/user/get?access_token=ACCESS_TOKEN&userid=zhangsan
获取用户信息,正确则返回的格式如下:
{
"errcode": 0,
"unionid": "PiiiPyQqBNBii0HnCJ3zljcuAiEiE",
"openId": "PiiiPyQqBNBii0HnCJ3zljcuAiEiE",
"roles": [{
"id": 23003585,
"name": "财务",
"groupName": "职务"
}],
"remark": "备注",
"userid": "04232334556237185",
"isLeaderInDepts": "{1:false}",
"isBoss": false,
"hiredDate": 1520265600000,
"isSenior": false,
"tel": "010-88996533",
"department": [1,2],
"workPlace": "北京市朝阳区",
"email": "ceshi@aliyun.com",
"orderInDepts": "{1:71738366882504}",
"dingId": "$:LWCP_v1:$aTPvVHhhsCMtDZRQ1xbYGg==",
"mobile": "15901516821",
"errmsg": "ok",
"active": false,
"avatar": "dingtalk.com/abc.jpg",
"isAdmin": false,
"isHide": false,
"jobnumber": "001",
"name": "测试名字",
"extattr": {},
"stateCode": "86",
"position": "总监"
}