最新項目要做一個,使用手機釘釘掃描二維碼登錄pc系統的功能,手機掃碼二維碼后,會彈出一個確定登錄的頁面,點擊確定之后,pc端就會登錄進去
第一步:查看釘釘開發平台
從官網中了解到:
使用釘釘js-api提供的獲取免登授權碼接口獲取CODE,此jsapi無需鑒權
然后通過CODE,獲取用戶身份信息

第二步:pc頁面
npm install v-qrcode --save
並在頁面中注冊引入

其中 qrcode是二維碼內容,在data中定義,
調用后端接口,獲取釘釘登錄二維碼,此二維碼含有唯一標識uuid,通過截取可獲取到該uuid
export default {
name: 'login',
data () {
return {
qrcode: '',
uuid: '',
scanOK: false // 等待掃描結果
}
},
created () {
this._getQrcode()
},
methods: {
// 獲取釘釘登錄二維碼
_getQrcode () {
getQrcode().then(res => {
this.qrcode = res.data.data.url
this.uuid = this.qrcode.substring(this.qrcode.indexOf('=') + 1)
this._login()
})
},
// 釘釘掃碼登錄
_login () {
if (this.scanOK) return
login(this.uuid).then(res => {
if (res.data.errcode === 0) {
this.successLogin(res.data.data)
this.scanOK = true
} else if (res.data.errcode === 70002) {
setTimeout(() => {
this._login()
}, 2500)
}
})
},
successLogin (user) {
sessionStorage.setItem('$user', JSON.stringify(user))
setTimeout(() => {
this.$router.push('/data-show')
}, 500)
}
},
components: {
Qrcode
}
}
第三步:H5頁面
讓后端進行配一下,然后前端手機掃碼后,會跳轉到一個登陸頁面
跟該項目的index.html同級建一個dingding.html頁面,此頁面就是釘釘掃碼后的跳轉頁面,

頁面樣式自己寫,引入dingtalk的JS文件
<script src="http://g.alicdn.com/ilw/cdnjs/zepto/1.1.6/zepto.min.js"></script>
<script src="https://g.alicdn.com/dingding/open-develop/1.6.9/dingtalk.js"></script>
第四步:發送ajax請求
dingding.html頁面有一個確定按鈕,點擊發送ajax請求,代碼如下:
<div id="loginBtn" class="t-button">
<span>確認登錄</span>
</div>
<script>
var CORPID = '企業ID'
var loginBtn = document.getElementById('loginBtn')
var url = window.location.href
var uuid = url.substring(url.indexOf('=') + 1)
var code = ''
dd.ready(function () {
dd.runtime.permission.requestAuthCode({
corpId: CORPID,
onSuccess: function (result) {
code = result.code //獲取到免登碼CODE
},
onFail: function (err) {
alert(JSON.stringify(err))
}
})
})
function confirm (code, uuid) {
$.ajax({
async: false,
url: '/api/auth/token',
type: 'GET',
data: {
code:code,
uuid:uuid
},
success: function (res) {
window.location.href = '跳轉地址' //成功后手機跳轉的頁面,pc端進入你設置的跳轉頁面
},
error: function (xhr, errorType, error) {
}
})
}
loginBtn.addEventListener('click', function () {
confirm(code, uuid)
})
</script>
