W3Cschool
恭喜您成為首批注冊(cè)用戶(hù)
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
智能小程序可以通過(guò)百度官方提供的登錄能力方便地獲取百度提供的用戶(hù)身份標(biāo)識(shí),快速建立智能小程序內(nèi)的用戶(hù)體系。
流程說(shuō)明
1、調(diào)用 swan.login() 獲取 臨時(shí)登錄憑證code ,并回傳到開(kāi)發(fā)者服務(wù)器。
2、開(kāi)發(fā)者服務(wù)器以 code 換取 session_key。
3、調(diào)用 swan.getUserInfo() 獲取用戶(hù)信息。
4、點(diǎn)擊查看詳細(xì)流程。
解釋?zhuān)?nbsp;調(diào)用接口 swan.login 獲取 臨時(shí)登錄憑證(code)
參數(shù): Object
Object參數(shù)說(shuō)明:
參數(shù)名 | 類(lèi)型 | 必填 | 說(shuō)明 |
---|---|---|---|
success | Function | 否 | 接口調(diào)用成功的回調(diào)函數(shù) |
fail | Function | 否 | 接口調(diào)用失敗的回調(diào)函數(shù) |
complete | Function | 否 | 接口調(diào)用結(jié)束的回調(diào)函數(shù)(調(diào)用成功、失敗都會(huì)執(zhí)行) |
success 返回參數(shù)說(shuō)明:
參數(shù) | 類(lèi)型 | 說(shuō)明 |
---|---|---|
code | String | 用戶(hù)登錄憑證(有效期五分鐘)。開(kāi)發(fā)者需要在開(kāi)發(fā)者服務(wù)器后臺(tái)調(diào)用 api,使用 code 換取 session_key 等信息 |
示例:
swan.login({
success: function (res) {
swan.request({
url: 'https://xxx/xxx', // 開(kāi)發(fā)者服務(wù)器地址
data: {
code: res.code
}
});
},
fail: function (err) {
console.log('login fail', err);
}
});
臨時(shí)登錄憑證校驗(yàn)接口是一個(gè) HTTPS 接口,開(kāi)發(fā)者服務(wù)器使用 臨時(shí)登錄憑證(code) 獲取 session_key。
注意:
1、會(huì)話(huà)密鑰 session_key 是對(duì)用戶(hù)數(shù)據(jù)進(jìn)行加密簽名的密鑰。為了應(yīng)用自身的數(shù)據(jù)安全,開(kāi)發(fā)者服務(wù)器不應(yīng)該把會(huì)話(huà)密鑰下發(fā)到智能小程序,也不應(yīng)該對(duì)外提供這個(gè)密鑰。
2、臨時(shí)登錄憑證 code 只能使用一次。
接口地址:https://openapi.baidu.com/nalogin/getSessionKeyByCode
請(qǐng)求參數(shù)
參數(shù) | 說(shuō)明 |
---|---|
client_id | 開(kāi)放平臺(tái)申請(qǐng)的 App Key |
sk | 開(kāi)放平臺(tái)申請(qǐng)的 App Secret |
code | swan.login 返回的臨時(shí)登錄憑證 |
Bug & Tip
1、tip: 調(diào)用 login 會(huì)引起登錄態(tài)的刷新,之前的 session_key 可能會(huì)失效。
解釋?zhuān)和ㄟ^(guò)上述接口獲得的用戶(hù)登錄態(tài)擁有一定的時(shí)效性,用戶(hù)越久未使用智能小程序,用戶(hù)登錄態(tài)越有可能失效;反之如果用戶(hù)一直在使用智能小程序,則用戶(hù)登錄態(tài)一直保持有效。具體時(shí)效邏輯由百度 App 維護(hù),對(duì)開(kāi)發(fā)者透明。開(kāi)發(fā)者可以調(diào)用 swan.checkSession 接口 檢測(cè)當(dāng)前用戶(hù)登錄態(tài)是否有效,登錄態(tài)過(guò)期后開(kāi)發(fā)者可以再調(diào)用 swan.login 獲取新的用戶(hù)登錄態(tài)。
參數(shù):Object
Object參數(shù)說(shuō)明:
參數(shù)名 | 類(lèi)型 | 必填 | 說(shuō)明 |
---|---|---|---|
success | Function | 否 | 接口調(diào)用成功的回調(diào)函數(shù) |
fail | Function | 否 | 接口調(diào)用失敗的回調(diào)函數(shù) |
complete | Function | 否 | 接口調(diào)用結(jié)束的回調(diào)函數(shù)(調(diào)用成功、失敗都會(huì)執(zhí)行) |
示例:
swan.checkSession({
success: function (res) {
console.log('登錄態(tài)有效');
},
fail: function (err) {
console.log('登錄態(tài)無(wú)效');
}
});
智能小程序可以通過(guò)各種前端接口獲取百度提供的開(kāi)放數(shù)據(jù)。考慮到開(kāi)發(fā)者服務(wù)器也需要獲取這些開(kāi)放數(shù)據(jù),百度會(huì)對(duì)這些數(shù)據(jù)做簽名和加密處理。開(kāi)發(fā)者后臺(tái)拿到開(kāi)放數(shù)據(jù)后可以對(duì)數(shù)據(jù)進(jìn)行校驗(yàn)簽名和解密,來(lái)保證數(shù)據(jù)不被篡改。
加密數(shù)據(jù)解密算法
接口如果涉及敏感數(shù)據(jù),接口的明文內(nèi)容將不包含這些敏感數(shù)據(jù)。開(kāi)發(fā)者如需要獲取敏感數(shù)據(jù),需要對(duì)接口返回的加密數(shù)據(jù)(data)進(jìn)行對(duì)稱(chēng)解密。
解密過(guò)程:開(kāi)發(fā)者智能小程序(通過(guò) swan.request)將加密數(shù)據(jù)發(fā)送至自身 Server 進(jìn)行解密后返回智能小程序。
解密算法如下:
1、對(duì)稱(chēng)解密使用的算法為 AES-128-CBC,數(shù)據(jù)采用PKCS#7填充。
2、對(duì)稱(chēng)解密的目標(biāo)密文為 Base64_Decode(data)。
3、對(duì)稱(chēng)解密秘鑰 AESKey = Base64_Decode(session_key), AESKey 是24字節(jié)。
4、對(duì)稱(chēng)解密算法初始向量 為Base64_Decode(iv),其中iv由數(shù)據(jù)接口返回。
解釋?zhuān)禾崆跋蛴脩?hù)發(fā)起授權(quán)請(qǐng)求。調(diào)用后會(huì)立刻彈窗詢(xún)問(wèn)用戶(hù)是否同意授權(quán)智能小程序使用某項(xiàng)功能或獲取用戶(hù)的某些數(shù)據(jù),但不會(huì)實(shí)際調(diào)用對(duì)應(yīng)接口。如果用戶(hù)之前已經(jīng)同意授權(quán),則不會(huì)出現(xiàn)彈窗,直接返回成功。
參數(shù):Object
Object參數(shù)說(shuō)明:
參數(shù)名 | 類(lèi)型 | 必填 | 說(shuō)明 |
---|---|---|---|
scope | String | 是 | 需要獲取權(quán)限的 scope,詳見(jiàn) scope 列表 |
success | Function | 否 | 接口調(diào)用成功的回調(diào)函數(shù) |
fail | Function | 否 | 接口調(diào)用失敗的回調(diào)函數(shù) |
complete | Function | 否 | 接口調(diào)用結(jié)束的回調(diào)函數(shù)(調(diào)用成功、失敗都會(huì)執(zhí)行) |
scope 列表
scope | 對(duì)應(yīng)接口 | 描述 |
---|---|---|
scope.userInfo | swan.getUserInfo | 用戶(hù)信息 |
scope.userLocation | swan.getLocation, swan.chooseLocation | 地理位置 |
scope.writePhotosAlbum | swan.saveImageToPhotosAlbum | 保存到相冊(cè) |
scope.address | swan.chooseAddress | 收獲地址 |
scope.invoiceTitle | swan.chooseInvoiceTitle | 發(fā)票抬頭 |
scope.record | swan.getRecorderManager | 錄音功能 |
scope.camera | <camera/>
|
攝像頭 |
success返回參數(shù)說(shuō)明:
參數(shù)名 | 類(lèi)型 | 說(shuō)明 |
---|---|---|
errMsg | String | 調(diào)用結(jié)果 |
示例:
swan.authorize({
scope: 'scope.userLocation',
success: function (res) {
// 用戶(hù)已經(jīng)同意智能小程序使用定位功能
swan.getLocation();
}
});
Bug & Tip
1、tip: 授權(quán)操作為異步操作,完成前請(qǐng)不要多次調(diào)用。
swanid 是用戶(hù)使用智能小程序時(shí)的標(biāo)識(shí)符,開(kāi)發(fā)者可以通過(guò) swanid 來(lái)區(qū)分用戶(hù)的唯一性。
1、用戶(hù)在非登陸情況下使用智能小程序時(shí),在同一臺(tái)設(shè)備上使用同一個(gè)開(kāi)發(fā)者所開(kāi)發(fā)的不同智能小程序,得到的是相同的 swanid。2、用戶(hù)在登陸情況下使用智能小程序時(shí),在多臺(tái)不同設(shè)備上使用同一個(gè)開(kāi)發(fā)者所開(kāi)發(fā)的不同智能小程序,得到的是相同的 swanid。3、用戶(hù)使用同一臺(tái)設(shè)備時(shí),在非登陸情況下與登陸情況下使用同一個(gè)智能小程序,得到的 swanid 是不同的。
解釋?zhuān)韩@取 swanid。
參數(shù):Object
Object參數(shù)說(shuō)明:
參數(shù)名 | 類(lèi)型 | 必填 | 說(shuō)明 |
---|---|---|---|
success | Function | 否 | 接口調(diào)用成功的回調(diào)函數(shù) |
fail | Function | 否 | 接口調(diào)用失敗的回調(diào)函數(shù) |
complete | Function | 否 | 接口調(diào)用結(jié)束的回調(diào)函數(shù)(調(diào)用成功、失敗都會(huì)執(zhí)行) |
success返回參數(shù)說(shuō)明:
參數(shù) | 類(lèi)型 | 說(shuō)明 |
---|---|---|
errno | String | errno |
data | Object | {swanid} |
errmsg | String | errmsg |
示例:
swan.getSwanId({
success: function (res) {
console.log(res.data.swanid);
}
});
getUserInfo
解釋?zhuān)韩@取用戶(hù)信息
參數(shù):Object
Object參數(shù)說(shuō)明:
參數(shù)名 | 類(lèi)型 | 必填 | 說(shuō)明 |
---|---|---|---|
success | Function | 否 | 接口調(diào)用成功的回調(diào)函數(shù) |
fail | Function | 否 | 接口調(diào)用失敗的回調(diào)函數(shù) |
complete | Function | 否 | 接口調(diào)用結(jié)束的回調(diào)函數(shù)(調(diào)用成功、失敗都會(huì)執(zhí)行) |
success返回參數(shù)說(shuō)明:
參數(shù) | 類(lèi)型 | 說(shuō)明 |
---|---|---|
userInfo | Object | 用戶(hù)信息對(duì)象 |
data | String | 包括敏感數(shù)據(jù)在內(nèi)的完整用戶(hù)信息的加密數(shù)據(jù),加解密邏輯參考用戶(hù)數(shù)據(jù)的簽名驗(yàn)證和加解密 |
iv | String | 加密算法的初始向量 |
userInfo參數(shù)說(shuō)明:
參數(shù) | 類(lèi)型 | 說(shuō)明 |
---|---|---|
nickName | String | 用戶(hù)名 |
avatarUrl | String | 用戶(hù)頭像 |
gender | String | 性別 |
示例:
swan.getUserInfo({
success: function (res) {
console.log('用戶(hù)名', res.nickName);
}
});
解釋?zhuān)赫{(diào)起客戶(hù)端智能小程序設(shè)置界面,返回用戶(hù)設(shè)置的操作結(jié)果。
參數(shù):Object
Object參數(shù)說(shuō)明:
參數(shù)名 | 類(lèi)型 | 必填 | 說(shuō)明 |
---|---|---|---|
success | Function | 否 | 接口調(diào)用成功的回調(diào)函數(shù) |
fail | Function | 否 | 接口調(diào)用失敗的回調(diào)函數(shù) |
complete | Function | 否 | 接口調(diào)用結(jié)束的回調(diào)函數(shù)(調(diào)用成功、失敗都會(huì)執(zhí)行) |
success返回參數(shù)說(shuō)明:
參數(shù) | 類(lèi)型 | 說(shuō)明 |
---|---|---|
authSetting | Object | 用戶(hù)授權(quán)結(jié)果,其中 key 為 scope 值,value 為 Bool 值,表示用戶(hù)是否允許授權(quán) |
示例:
swan.openSetting({
success: function (res) {
console.log(res.authSetting['scope.userInfo']);
console.log(res.authSetting['scope.userLocation']);
}
});
解釋?zhuān)韩@取用戶(hù)的當(dāng)前設(shè)置
參數(shù):Object
Object參數(shù)說(shuō)明:
參數(shù)名 | 類(lèi)型 | 必填 | 說(shuō)明 |
---|---|---|---|
success | Function | 否 | 接口調(diào)用成功的回調(diào)函數(shù) |
fail | Function | 否 | 接口調(diào)用失敗的回調(diào)函數(shù) |
complete | Function | 否 | 接口調(diào)用結(jié)束的回調(diào)函數(shù)(調(diào)用成功、失敗都會(huì)執(zhí)行) |
success返回參數(shù)說(shuō)明:
參數(shù) | 類(lèi)型 | 說(shuō)明 |
---|---|---|
authSetting | Object | 用戶(hù)授權(quán)結(jié)果,其中 key 為 scope 值,value 為 Bool 值,表示用戶(hù)是否允許授權(quán) |
示例:
swan.getSetting({
success: function (res) {
console.log(res.authSetting['scope.userInfo']);
console.log(res.authSetting['scope.userLocation']);
}
});
解釋?zhuān)涸?Page 中定義 onShareAppMessage 函數(shù),設(shè)置該頁(yè)面的分享信息。
參數(shù):Object
Object參數(shù)說(shuō)明:
參數(shù)名 | 類(lèi)型 | 說(shuō)明 |
---|---|---|
from | String | 分享事件來(lái)源。button:頁(yè)面內(nèi)轉(zhuǎn)發(fā)按鈕;menu:右上角分享菜單 |
currentTarget | Object | 如果 from 值是 button,則 currentTarget 是觸發(fā)這次轉(zhuǎn)發(fā)事件的 button,否則為 undefined |
自定義分享字段:
參數(shù)名 | 類(lèi)型 | 必填 | 說(shuō)明 |
---|---|---|---|
title | String | 否 | 分享標(biāo)題 |
content | String | 否 | 分享內(nèi)容 |
imageUrl | String | 否 | 分享圖標(biāo) |
path | String | 否 | 頁(yè)面 path ,必須是以 / 開(kāi)頭的完整路徑 |
success | Function | 否 | 接口調(diào)用成功的回調(diào)函數(shù) |
fail | Function | 否 | 接口調(diào)用失敗的回調(diào)函數(shù) |
complete | Function | 否 | 接口調(diào)用結(jié)束的回調(diào)函數(shù)(調(diào)用成功、失敗都會(huì)執(zhí)行) |
示例:
Page({
onShareAppMessage() {
return {
title: '智能小程序示例',
content: '世界很復(fù)雜,百度更懂你',
path: '/pages/openShare/openShare?key=value'
};
}
});
Bug & Tip
1、bug: iOS 點(diǎn)擊分享面板的取消時(shí),會(huì)執(zhí)行 fail,Android 不會(huì)執(zhí)行。
解釋?zhuān)赫{(diào)起用戶(hù)編輯收貨地址原生界面,并在編輯完成后返回用戶(hù)選擇的地址。
需要用戶(hù)授權(quán) scope.address
參數(shù):Object
Object參數(shù)說(shuō)明:
參數(shù)名 | 類(lèi)型 | 必填 | 說(shuō)明 |
---|---|---|---|
success | Function | 否 | 返回用戶(hù)選擇的收貨地址信息 |
fail | Function | 否 | 接口調(diào)用失敗的回調(diào)函數(shù) |
complete | Function | 否 | 接口調(diào)用結(jié)束的回調(diào)函數(shù)(調(diào)用成功、失敗都會(huì)執(zhí)行) |
success返回參數(shù)說(shuō)明:
參數(shù)名 | 類(lèi)型 | 說(shuō)明 |
---|---|---|
errMsg | String | 調(diào)用結(jié)果 |
userName | String | 收貨人姓名 |
postalCode | String | 郵編 |
provinceName | String | 國(guó)標(biāo)收貨地址第一級(jí)地址 |
cityName | String | 國(guó)標(biāo)收貨地址第二級(jí)地址 |
countyName | String | 國(guó)標(biāo)收貨地址第三級(jí)地址 |
detailInfo | String | 詳細(xì)收貨地址信息 |
telNumber | String | 收貨人手機(jī)號(hào)碼 |
示例:
swan.chooseAddress({
success: function (res) {
console.log(res.userName);
console.log(res.postalCode);
console.log(res.provinceName);
console.log(res.cityName);
console.log(res.countyName);
console.log(res.detailInfo);
console.log(res.telNumber);
}
});
版本:百度 App 10.7.0 版本開(kāi)始支持。
解釋?zhuān)喊俣染酆鲜浙y臺(tái),聚合了主流的百度錢(qián)包、微信、支付寶、網(wǎng)銀等多種支付方式,方便開(kāi)發(fā)者一站式快速接入多種支付渠道,讓百度用戶(hù)能在智能小程序場(chǎng)景下,直接完成支付、交易閉環(huán),提升用戶(hù)支付體驗(yàn)的同時(shí),提高智能小程序的訂單轉(zhuǎn)化率。
了解更多信息,請(qǐng)查看 百度電商開(kāi)放平臺(tái):產(chǎn)品介紹
參數(shù):Object
Object參數(shù)說(shuō)明:
參數(shù)名 | 類(lèi)型 | 必填 | 說(shuō)明 |
---|---|---|---|
orderInfo | Object | 是 | 訂單信息 |
bannedChannels | StringArray | 否 | 需要隱藏的支付方式 |
success | Function | 否 | 接口調(diào)用成功的回調(diào)函數(shù) |
fail | Function | 否 | 接口調(diào)用失敗的回調(diào)函數(shù) |
complete | Function | 否 | 接口調(diào)用結(jié)束的回調(diào)函數(shù)(調(diào)用成功、失敗都會(huì)執(zhí)行) |
orderInfo 參數(shù)說(shuō)明:
bannedChannels 參數(shù)說(shuō)明:
channel | 說(shuō)明 |
---|---|
Alipay | 支付寶 |
BDWallet | 百度錢(qián)包 |
微信支付 |
示例:
swan.requestPolymerPayment({
orderInfo: {
"dealId": "470193086",
"appKey": "MMMabc",
"totalAmount": "1",
"tpOrderId": "3028903626",
"dealTitle": "智能小程序Demo支付測(cè)試",
"rsaSign": '',
"bizInfo": ''
},
success: function (res) {
swan.showToast({
title: '支付成功',
icon: 'success'
});
},
fail: function (err) {
swan.showToast({
title: JSON.stringify(err)
});
console.log('pay fail', err);
}
});
解釋?zhuān)哼x擇用戶(hù)的發(fā)票抬頭。
需要用戶(hù)授權(quán) scope.invoiceTitle
參數(shù):Object
Object參數(shù)說(shuō)明:
參數(shù)名 | 類(lèi)型 | 必填 | 說(shuō)明 |
---|---|---|---|
success | Function | 否 | 接口調(diào)用成功的回調(diào)函數(shù) |
fail | Function | 否 | 接口調(diào)用失敗的回調(diào)函數(shù) |
complete | Function | 否 | 接口調(diào)用結(jié)束的回調(diào)函數(shù)(調(diào)用成功、失敗都會(huì)執(zhí)行) |
success返回參數(shù)說(shuō)明:
參數(shù)名 | 類(lèi)型 | 說(shuō)明 |
---|---|---|
type | String | 抬頭類(lèi)型(0:?jiǎn)挝唬?:個(gè)人) |
title | String | 抬頭名稱(chēng) |
taxNumber | String | 抬頭稅號(hào) |
companyAddress | String | 單位地址 |
telephone | String | 手機(jī)號(hào)碼 |
bankName | String | 銀行名稱(chēng) |
bankAccount | String | 銀行賬號(hào) |
errMsg | String | 接口調(diào)用結(jié)果 |
示例:
swan.chooseInvoiceTitle({
success: function (res) {
console.log(res.type);
console.log(res.title);
console.log(res.taxNumber);
console.log(res.companyAddress);
console.log(res.telephone);
console.log(res.bankName);
console.log(res.bankAccount);
}
})
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話(huà):173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: