釘釘掃碼登錄


掃碼登錄第三方網站

使用釘釘客戶端掃碼並確認登錄您的web系統,在您的系統內獲得正在訪問用戶的釘釘身份,而用戶無需輸入賬戶密碼。
注意:此功能與企業自建應用/第三方企業應用無關,只能用掃碼登錄打開第三方網站,並且不是釘釘內的應用免登,此流程只能做到獲取到用戶身份(無手機號和企業相關信息)。

獲取appId及appSecret

點擊進入釘釘開發者平台 的頁面,點擊左側菜單的【移動接入應用-登錄】,然后點擊右上角的【創建掃碼登錄應用授權】,創建用於免登過程中驗證身份的appId及appSecret,創建后即可看到appId和appSecret。

點擊創建掃碼登錄應用授權

確定之后就會生成APPID和appSecret,先放着。appSecret后面拿取釘釘的用戶信息會用到。

按照開發文檔的步驟,實現掃碼登錄

  1. 在頁面中先引入如下js文件
    <script src="http://g.alicdn.com/dingding/dinglogin/0.0.5/ddLogin.js"></script>
    2.實例化JS對象
<template>
    <div id="login_container"></div> // 存放二維碼的div
</template>

<script>
export default {
    mounted(){
        let appId = '******' // appId 點擊創建掃碼登錄應用授權生成
        let baseUrl = encodeURIComponent('****') // 回調域名:掃碼成功跳轉的url,需要進行編碼
        let url = encodeURIComponent(
            `https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=${appId}&response_type=code&scope=snsapi_login&state=STATE&redirect_uri=${baseUrl}`
            ) // goto參數,需要進行編碼
        var obj = DDLogin({
            id: "login_container", //這里需要你在自己的頁面定義一個HTML標簽並設置id,例如<div id="login_container"></div>或<span id="login_container"></span>
            goto: url, // 轉碼后的url
            style: "border:none;background-color:#FFFFFF;", // 二維碼的樣式
            width: "365", // 二維碼的寬度
            height: "400" // 二維碼的高度
        });
        // **width和height不代表二維碼的大小,二維碼大小是固定的210px210px。
        var hanndleMessage = function (event) {
            let {origin} = event;
            if (origin == "https://login.dingtalk.com") { //判斷是否來自ddLogin掃碼事件。
                let {data:loginTmpCode} = event; //拿到loginTmpCode后就可以在這里構造跳轉鏈接進行跳轉了
                // 通過JS獲取到loginTmpCode后,需要由你構造並跳轉到如下鏈接:
                // `https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=APPID&response_type=code&scope=snsapi_login&state=STATE&redirect_uri=REDIRECT_URI&loginTmpCode=loginTmpCode` 
                // 此鏈接處理成功后,會302跳轉到你goto參數指定的redirect_uri,並向url參數中追加臨時授權碼code及state兩個參數。
                
                window.location.href=`https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=${appId}&response_type=code&scope=snsapi_login&state=STATE&redirect_uri=${baseUrl}&loginTmpCode=${loginTmpCode}` // 
            }
        };
        if (typeof window.addEventListener != 'undefined') {
            window.addEventListener('message', hanndleMessage, false);
        } else if (typeof window.attachEvent != 'undefined') {
            window.attachEvent('onmessage', hanndleMessage);
        }
    }
}
</script>

參數說明

參數 說明
goto goto參數結構:https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=APPID&response_type=code&scope=snsapi_login&state=STATE&redirect_uri=REDIRECT_URI,並且要將goto參數urlencode編碼。
style 渲染二維碼的區域的樣式,可以自定義去除背景顏色和邊框
width 表示顯示二維碼的區域的寬
height 表示顯示二維碼的區域的高

拿到釘釘的用戶信息

1.以get請求的方式,請求這個地址。
https://oapi.dingtalk.com/sns/gettoken?appid=APPID&appsecret=APPSECRET

2.好了,當你請求成功時應該返回如下,access_token 的值放好,我們會拿它接着獲取永久授權碼。還記得我們掃碼成功后,跳轉登錄到第三方網站的url嗎,它后面追加了臨時授權碼code,這個code和access_token 一起就可以獲得永久的授權碼了。

{
    "errcode": 0,
    "access_token": "7155d0dca6fa3a489462e4407699c339",
    "errmsg": "ok"
}

3.獲取永久授權碼。以post請求,請求這個地址
https://oapi.dingtalk.com/sns/get_persistent_code?access_token=ACCESS_TOKEN
post的參數如下

{
    "tmp_auth_code": "9282c00fed0a3e2a88fea069a9fe5be4"
}

tmp_auth_code 的值就是追加到url上的code參數的值。請求成功返回如下

{
    "errcode": 0,
    "errmsg": "ok",
    "unionid": "0wiiEFPtAF09FWcBg2iiygPwiEiE",
    "openid": "EmuvN1jpiPwiipLtiSHBUmvcwiEiE",
    "persistent_code": "oMOoqK0PEfTXvJSMlZIp8yU-IagK8-kJIVY5od8-8Y2ijlX367M9uRNUvisDAPtX"
}

請求到的這兩個紅色玩意的值,接下來要用來去獲取用戶授權的SNS_TOKEN
4.獲取用戶授權的SNS_TOKEN。以post請求,請求這個地址
https://oapi.dingtalk.com/sns/get_sns_token?access_token=ACCESS_TOKEN
這個 ACCESS_TOKEN 第一步的時候已經取到過了
post的 傳遞參數如下

{
    "openid": "EmuvN1jpiPwiipLtiSHBUmvcwiEiE",
    "persistent_code": "oMOoqK0PEfTXvJSMlZIp8yU-IagK8-kJIVY5od8-8Y2ijlX367M9uRNUvisDAPtX"
}

那么請求成功返回如下

{
    "errcode": 0,
    "errmsg": "ok",
    "sns_token": "ea1e12af6ac23a2080178bb9a452b312",
    "expires_in": 7200
}

最后一步了,用獲取到的 sns_token 去拿用戶信息

5.拿用戶信息。以get請求,請求這個地址
https://oapi.dingtalk.com/sns/getuserinfo?sns_token=SNS_TOKEN

請求成功返回如下


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM