钉钉开发文档

钉钉内免登第三方网站

更新时间: 2019-6-13

当开发的系统(H5页面)只是在钉钉客户端打开,但并不是一个钉钉应用时,系统可以自动获得正在访问用户的钉钉身份信息,而无需用户再次输入账户密码。
注意:此功能与企业应用/第三方企业应用无关,只能用于钉钉客户端内打开的网站,并且不是钉钉内的应用免登,此流程只能做到获取到用户身份。

获取appId及appSecret

点击进入钉钉开发者平台 的页面,点击左侧菜单的【移动接入应用-登录然后点击右上角的【创建扫码登录应用授权】,创建用于免登过程中验证身份的appId及appSecret,创建后即可看到appId和appSecret。
image.png

需提交字段 说明
名称 授权微应用的名称,必填
描述 扫码登录用于,主要是说明 使用的场景,必填
授权页面LOGO地址 这个会显示在授权页面的中间页中,以http或https开头,必填
回调域名 微应用回调的URL,以http或https开头,必填

构造要跳转的链接

构造如下跳转链接,此链接处理成功后,会重定向跳转到指定的redirect_uri并向url追加临时授权码code及state两个参数

https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=APPID&response_type=code&scope=snsapi_auth&state=STATE&redirect_uri=REDIRECT_URI
参数 说明
appid 参看第1步获取,代表了你提供的服务,必填
redirect_uri 重定向地址(需要urlencode编码),该地址所在域名需要配置为appid对应的安全域名,必填
state 用于防止重放攻击,开发者可以根据此信息来判断redirect_uri只能执行一次来避免重放攻击, 选填
response_type 固定值为code必填
scope 取值为snsapi_auth,必填snsapi_auth用于钉钉容器内获取用户授权

服务端通过临时授权码获取授权用户的个人信息

通过临时授权码Code获取用户信息,临时授权码只能使用一次。

请求方式:POST(HTTPS)
请求地址https://oapi.dingtalk.com/sns/getuserinfo_bycode

请求包结构体

{
    "tmp_auth_code": "23152698ea18304da4d0ce1xxxxx"
}

URL签名参数说明:

参数 说明
accessKey 应用的appId
timestamp 当前时间戳,单位是毫秒
signature 通过appSecret计算出来的签名值,签名计算方法

参数说明

参数 参数类型 必须 说明
tmp_auth_code String 用户授权的临时授权码code,只能使用一次;在前面步骤中跳转到redirect_uri时会追加code参数

SDK请求示例(JAVA)

DefaultDingTalkClient  client = new DefaultDingTalkClient("https://oapi.dingtalk.com/sns/getuserinfo_bycode");
OapiSnsGetuserinfoBycodeRequest req = new OapiSnsGetuserinfoBycodeRequest();
req.setTmpAuthCode("4a2c5695b78738d495f47b5fee9160cd");
OapiSnsGetuserinfoBycodeResponse response = client.execute(req,"yourAppId","yourAppSecret");

SDK请求示例(PHP):

include "TopSdk.php";
$c = new DingTalkClient(DingTalkConstant::$CALL_TYPE_OAPI, DingTalkConstant::$METHOD_POST , DingTalkConstant::$FORMAT_JSON);
$req = new OapiSnsGetuserinfoBycodeRequest;
$req->setTmpAuthCode("4a2c5695b78738d495f47b5fee9160cd");
$resp=$c->executeWithAccessKey($req, "https://oapi.dingtalk.com/sns/getuserinfo_bycode","yourAppId","yourAppSecret");
var_dump($resp)

返回结果

{ 
    "errcode": 0,
    "errmsg": "ok",
    "user_info": {
        "nick": "张三",
        "openid": "liSii8KCxxxxx",
        "unionid": "7Huu46kk"
    }
}
参数 说明
nick 用户在钉钉上面的昵称
openid 用户在当前开放应用内的唯一标识
unionid 用户在当前开放应用所属企业内的唯一标识
以上内容是否对您有帮助:
在文档使用中是否遇到以下问题(多选):
  • 内容错误
  • 更新不及时
  • 链接错误
  • 缺少代码/图片示例
  • 太简单/步骤待完善
手机号
更多建议
提交成功,感谢您的反馈!