这个小功能对于企业内部的一些自用后台网站还是很常用的,对接也相对简单,记录下对接流程。 开发文档:扫码登录第三方网站 - 钉钉开放平台 先登录钉钉开发者后台,创建扫码登录应用授权 开发者后台统一登录 - 钉钉统一身份认证 生成登录用
这个小功能对于企业内部的一些自用后台网站还是很常用的,对接也相对简单,记录下对接流程。
先登录钉钉开发者后台,创建扫码登录应用授权 开发者后台统一登录 - 钉钉统一身份认证
生成登录用的二维码,钉钉提供了两种方式
一种是直接用钉钉提供的页面
https://oapi.dingtalk.com/connect/qrconnect?appid=SuiteKey &response_type=code&scope=snsapi_login&state=STATE&redirect_uri=REDIRECT_URISuiteKey 替换成上图生成列表里的appIdREDIRECT_URI 替换成上图生成列表里的回调地址STATE 可以灵活运用,用于多站点区分
这里重点介绍第二种,大部分会选择第二种将二维码内嵌到自己的页面
2. 在页面实例以下js对象
// 刚刚填的回调地址,要用encodeURIComponent处理下var url = encodeURIComponent('回调地址');// Goto参数,也要用encodeURIComponent处理下var goto = encodeURIComponent('https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=SuiteKey&response_type=code&scope=snsapi_login&state=STATE&redirect_uri='+url)// 这里需要你在自己的页面定义一个html标签并设置id,要和对象里的id一致// 例如或var obj = DDLogin({ id: "login_container", goto: goto, style: "border:none;background-color:#FFFFFF;", width : "365", height: "400" });
3.生成二维码后,扫码会获取loginTmpCode,然后通过loginTmpCode获取临时授权码
var handleMessage = function (event) { var origin = event.origin; if (origin == "https://login.dingtalk.com") { //判断是否来自ddLogin扫码事件。 var loginTmpCode = event.data; console.log("loginTmpCode", loginTmpCode); // 获取到loginTmpCode后就可以在这里构造跳转链接进行跳转了 window.location.href = "https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=SuiteKey&response_type=code&scope=snsapi_login&state=STATE&redirect_uri=REDIRECT_URI&loginTmpCode=loginTmpCode" + loginTmpCode; }};if (typeof window.addEventListener != 'undefined') { window.addEventListener('message', handleMessage, false);} else if (typeof window.attachEvent != 'undefined') { window.attachEvent('onmessage', handleMessage);}
以上两种方式扫码后,会302跳转到回调地址,并向url参数追加临时授权码code及state
然后通过code调用授权用户的个人信息根据sns临时授权码获取用户信息 - 钉钉开放平台
可以下载钉钉SDK自带签名功能,也可自己封装,下面是PHP的签名方式
$timestamp = SYS_TIME.'000';// appSecret第一步生成的$s = hash_hmac('sha256', $timestamp, appSecret, true);$signature = base64_encode($s);$query="accessKey=".appId."×tamp=".$timestamp."&signature=".urlencode($signature);$url = "https://oapi.dingtalk.com/sns/getuserinfo_bycode?".$query;// code指临时授权码$params = json_encode(array('tmp_auth_code' => code));// 这个自己封装个curl的方法然后推送$data = Common::curlPost($url, $params, array('Content-Type: application/JSON;charset=utf-8'));// 返回钉钉用户信息return json_decode($data, true);
返回钉钉用户信息后,就根据自己的实际业务场景看怎么处理这些信息了,扫码登录就算完结了, 还有一些根据uNIOnid获取userid获取用户详情的,我用不到,有用到的自己去看下开发文档
来源地址:https://blog.csdn.net/qq_41293288/article/details/126724260
--结束END--
本文标题: PHP-钉钉扫码登录对接第三方网站
本文链接: https://www.lsjlt.com/news/385693.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0