W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
解釋: 調(diào)用接口 swan.login 獲取 Authorization Code ,智能小程序可以使用swan.login()接口獲取 Authorization Code。
Web 態(tài)說明:
初次登錄:Web 態(tài)在小程序未登錄狀態(tài)下登錄時,會跳轉(zhuǎn)到百度提供的授權(quán)登錄頁,登錄成功后再跳回原小程序頁面。該跳轉(zhuǎn)過程會導(dǎo)致無法恢復(fù)原小程序頁面的上下文,所以 swan.login 的回調(diào)(success、fail、complete)無法執(zhí)行,從而開發(fā)者無法獲取到 code。為了解決上述問題,開發(fā)者需要在 App 示例上額外增加一個 onLogin 生命周期,用于在 Web 態(tài)下獲取 code 值。具體見下面代碼示例 1
登錄態(tài)下再登錄: Web 態(tài)和端內(nèi)行為一致。
Object object
屬性名 | 類型 | 必填 | 默認值 | 說明 |
---|---|---|---|---|
timeout | Number | 否 | 超時時間,單位 ms | |
success | Function | 否 | 接口調(diào)用成功的回調(diào)函數(shù) | |
fail | Function | 否 | 接口調(diào)用失敗的回調(diào)函數(shù) | |
complete | Function | 否 | 接口調(diào)用結(jié)束的回調(diào)函數(shù)(調(diào)用成功、失敗都會執(zhí)行) |
參數(shù) | 類型 | 說明 |
---|---|---|
code | String | 用戶登錄憑證(有效期十分鐘),開發(fā)者需要在開發(fā)者服務(wù)器后臺調(diào)用 api,使用 code 換取 session_key 等信息。 |
代碼示例 1:獲取 code
<view class="wrap">
<view class="card-area">
<button bind:tap="login" type="primary" hover-stop-propagation="true">登錄</button>
</view>
</view>
// App.js
App({
// onLogin在百度 APP 端內(nèi)小程序內(nèi)永遠不會執(zhí)行,只有在 Web 態(tài)的小程序初次登錄成功后才會執(zhí)行
onLogin(options) {
console.log('login success', options) // {code: "e4a13af4e6d8c491b701a86682a5bc76NW"}
// 使用 code 換取 session_key 等信息
}
});
// Page.js
Page({
login(e) {
swan.checkSession({
success: res => {
console.log('checkSession success', res);
swan.showToast({
title: '您已登錄',
icon: 'none'
});
},
fail: err => {
console.log('checkSession fail', err);
swan.login({
success: res => {
console.log('login success', res);
// {code: "e4a13af4e6d8c491b701a86682a5bc76NW"}
swan.showToast({
title: '登錄成功',
icon: 'none'
});
},
fail: err => {
console.log('login fail', err);
swan.showToast({
title: '登錄失敗',
icon: 'none'
});
}
});
}
});
}
});
參考示例 1:同步手百的登錄態(tài)實現(xiàn)聯(lián)合登錄流程
Page({
onLoad() {
// 用戶首次進入小程序,同步百度APP登錄態(tài)
swan.login({
success: res => {
console.log('login success', res);
// 獲取用戶手機號或用戶信息
swan.getUserInfo({
success: res => {
console.log('用戶信息', res);
},
fail: err => {
console.log('用戶信息獲取失敗', err);
if (err.errCode === 10003) {
swan.showModal({
title: '用戶信息獲取失敗,請先開啟授權(quán)',
success: res => {
swan.openSetting();
}
});
}
}
});
},
fail: err => {
console.log('login fail', err);
}
});
},
onShow() {
// 用戶進入小程序檢測小程序在手百的登陸態(tài)是否有效
swan.checkSession({
success: res => {
console.log('用戶的登陸態(tài)有效', res);
},
fail: err => {
// 小程序的登陸態(tài)失效,需要再次登錄
swan.login({
success: res => {
console.log('login success', res);
},
fail: err => {
console.log('login fail', err);
}
});
}
});
},
});
參考示例 2:與開發(fā)者服務(wù)器詳細示例
詳細示例請在開發(fā)者工具中查看。
參考示例 3:開發(fā)者工具中左上角的登錄態(tài)與模擬器中用戶的百度 APP 登錄態(tài)不同步,對于某些接口的登錄報錯,開發(fā)者需要自行調(diào)用 swan.login
form 模版為 report-type="default",需要用此兼容邏輯,詳細示例請在開發(fā)者工具中查看。
Tips:
錯誤碼 | 說明 |
---|---|
201 | 解析失敗,請檢查調(diào)起協(xié)議是否合法。 |
1001 | 執(zhí)行失敗 |
錯誤碼 | 說明 |
---|---|
202 | 解析失敗,請檢查參數(shù)是否正確。 |
10001 | 內(nèi)部錯誤 |
10002 | 網(wǎng)絡(luò)請求失敗 |
10004 | 用戶拒絕(user not login) |
10007 | 請求超時 |
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: