百度智能小程序API 開放接口

2018-07-10 15:12 更新

登錄


智能小程序可以通過百度官方提供的登錄能力方便地獲取百度提供的用戶身份標(biāo)識,快速建立智能小程序內(nèi)的用戶體系。

流程說明

1、調(diào)用 swan.login() 獲取 臨時(shí)登錄憑證code ,并回傳到開發(fā)者服務(wù)器。

2、開發(fā)者服務(wù)器以 code 換取 session_key。

3、調(diào)用 swan.getUserInfo() 獲取用戶信息。

4、點(diǎn)擊查看詳細(xì)流程。

login

解釋: 調(diào)用接口 swan.login 獲取 臨時(shí)登錄憑證(code)

參數(shù): Object

Object參數(shù)說明:

參數(shù)名 類型 必填 說明
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í)行)

success 返回參數(shù)說明:

參數(shù) 類型 說明
code String 用戶登錄憑證(有效期五分鐘)。開發(fā)者需要在開發(fā)者服務(wù)器后臺調(diào)用 api,使用 code 換取 session_key 等信息

示例:

swan.login({
    success: function (res) {
        swan.request({
            url: 'https://xxx/xxx', // 開發(fā)者服務(wù)器地址
            data: {
                code: res.code
            }
        });
    },
    fail: function (err) {
        console.log('login fail', err);
    }
});

登錄憑證校驗(yàn)

臨時(shí)登錄憑證校驗(yàn)接口是一個(gè) HTTPS 接口,開發(fā)者服務(wù)器使用 臨時(shí)登錄憑證(code) 獲取 session_key。

注意:

1、會話密鑰 session_key 是對用戶數(shù)據(jù)進(jìn)行加密簽名的密鑰。為了應(yīng)用自身的數(shù)據(jù)安全,開發(fā)者服務(wù)器不應(yīng)該把會話密鑰下發(fā)到智能小程序,也不應(yīng)該對外提供這個(gè)密鑰。

2、臨時(shí)登錄憑證 code 只能使用一次。

接口地址:https://openapi.baidu.com/nalogin/getSessionKeyByCode

請求參數(shù)

參數(shù) 說明
client_id 開放平臺申請的 App Key
sk 開放平臺申請的 App Secret
code swan.login 返回的臨時(shí)登錄憑證

Bug & Tip

1、tip: 調(diào)用 login 會引起登錄態(tài)的刷新,之前的 session_key 可能會失效。

checkSession

解釋:通過上述接口獲得的用戶登錄態(tài)擁有一定的時(shí)效性,用戶越久未使用智能小程序,用戶登錄態(tài)越有可能失效;反之如果用戶一直在使用智能小程序,則用戶登錄態(tài)一直保持有效。具體時(shí)效邏輯由百度 App 維護(hù),對開發(fā)者透明。開發(fā)者可以調(diào)用 swan.checkSession 接口 檢測當(dāng)前用戶登錄態(tài)是否有效,登錄態(tài)過期后開發(fā)者可以再調(diào)用 swan.login 獲取新的用戶登錄態(tài)。

參數(shù):Object

Object參數(shù)說明:

參數(shù)名 類型 必填 說明
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í)行)

示例:

swan.checkSession({
    success: function (res) {
        console.log('登錄態(tài)有效');
    },
    fail: function (err) {
        console.log('登錄態(tài)無效');
    }
});

用戶數(shù)據(jù)的簽名驗(yàn)證和加解密

智能小程序可以通過各種前端接口獲取百度提供的開放數(shù)據(jù)??紤]到開發(fā)者服務(wù)器也需要獲取這些開放數(shù)據(jù),百度會對這些數(shù)據(jù)做簽名和加密處理。開發(fā)者后臺拿到開放數(shù)據(jù)后可以對數(shù)據(jù)進(jìn)行校驗(yàn)簽名和解密,來保證數(shù)據(jù)不被篡改。

加密數(shù)據(jù)解密算法

接口如果涉及敏感數(shù)據(jù),接口的明文內(nèi)容將不包含這些敏感數(shù)據(jù)。開發(fā)者如需要獲取敏感數(shù)據(jù),需要對接口返回的加密數(shù)據(jù)(data)進(jìn)行對稱解密。

解密過程:開發(fā)者智能小程序(通過 swan.request)將加密數(shù)據(jù)發(fā)送至自身 Server 進(jìn)行解密后返回智能小程序。

解密算法如下:

1、對稱解密使用的算法為 AES-128-CBC,數(shù)據(jù)采用PKCS#7填充。

2、對稱解密的目標(biāo)密文為 Base64_Decode(data)。

3、對稱解密秘鑰 AESKey = Base64_Decode(session_key), AESKey 是24字節(jié)。

4、對稱解密算法初始向量 為Base64_Decode(iv),其中iv由數(shù)據(jù)接口返回。

授權(quán)


authorize

解釋:提前向用戶發(fā)起授權(quán)請求。調(diào)用后會立刻彈窗詢問用戶是否同意授權(quán)智能小程序使用某項(xiàng)功能或獲取用戶的某些數(shù)據(jù),但不會實(shí)際調(diào)用對應(yīng)接口。如果用戶之前已經(jīng)同意授權(quán),則不會出現(xiàn)彈窗,直接返回成功。

參數(shù):Object

Object參數(shù)說明:

參數(shù)名 類型 必填 說明
scope String 需要獲取權(quán)限的 scope,詳見 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)用成功、失敗都會執(zhí)行)

scope 列表

scope 對應(yīng)接口 描述
scope.userInfo swan.getUserInfo 用戶信息
scope.userLocation swan.getLocation, swan.chooseLocation 地理位置
scope.writePhotosAlbum swan.saveImageToPhotosAlbum 保存到相冊
scope.address swan.chooseAddress 收獲地址
scope.invoiceTitle swan.chooseInvoiceTitle 發(fā)票抬頭
scope.record swan.getRecorderManager 錄音功能
scope.camera <camera/> 攝像頭

success返回參數(shù)說明:

參數(shù)名 類型 說明
errMsg String 調(diào)用結(jié)果

示例:

swan.authorize({
  scope: 'scope.userLocation',
  success: function (res) {
    // 用戶已經(jīng)同意智能小程序使用定位功能
    swan.getLocation();
  }
});

Bug & Tip

1、tip: 授權(quán)操作為異步操作,完成前請不要多次調(diào)用。

用戶信息


swanid 機(jī)制說明

swanid 是用戶使用智能小程序時(shí)的標(biāo)識符,開發(fā)者可以通過 swanid 來區(qū)分用戶的唯一性。

1、用戶在非登陸情況下使用智能小程序時(shí),在同一臺設(shè)備上使用同一個(gè)開發(fā)者所開發(fā)的不同智能小程序,得到的是相同的 swanid。2、用戶在登陸情況下使用智能小程序時(shí),在多臺不同設(shè)備上使用同一個(gè)開發(fā)者所開發(fā)的不同智能小程序,得到的是相同的 swanid。3、用戶使用同一臺設(shè)備時(shí),在非登陸情況下與登陸情況下使用同一個(gè)智能小程序,得到的 swanid 是不同的。

getSwanId

解釋:獲取 swanid。

參數(shù):Object

Object參數(shù)說明:

參數(shù)名 類型 必填 說明
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í)行)

success返回參數(shù)說明:

參數(shù) 類型 說明
errno String errno
data Object {swanid}
errmsg String errmsg

示例:

swan.getSwanId({
    success: function (res) {
        console.log(res.data.swanid);
    }
});
getUserInfo

解釋:獲取用戶信息

參數(shù):Object

Object參數(shù)說明:

參數(shù)名 類型 必填 說明
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í)行)

success返回參數(shù)說明:

參數(shù) 類型 說明
userInfo Object 用戶信息對象
data String 包括敏感數(shù)據(jù)在內(nèi)的完整用戶信息的加密數(shù)據(jù),加解密邏輯參考用戶數(shù)據(jù)的簽名驗(yàn)證和加解密
iv String 加密算法的初始向量

userInfo參數(shù)說明:

參數(shù) 類型 說明
nickName String 用戶名
avatarUrl String 用戶頭像
gender String 性別

示例:

swan.getUserInfo({
    success: function (res) {
        console.log('用戶名', res.nickName);
    }
});

設(shè)置


openSetting

解釋:調(diào)起客戶端智能小程序設(shè)置界面,返回用戶設(shè)置的操作結(jié)果。

參數(shù):Object

Object參數(shù)說明:

參數(shù)名 類型 必填 說明
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í)行)

success返回參數(shù)說明:

參數(shù) 類型 說明
authSetting Object 用戶授權(quán)結(jié)果,其中 key 為 scope 值,value 為 Bool 值,表示用戶是否允許授權(quán)

示例:

swan.openSetting({
    success: function (res) {
        console.log(res.authSetting['scope.userInfo']);
        console.log(res.authSetting['scope.userLocation']);
    }
});

getSetting

解釋:獲取用戶的當(dāng)前設(shè)置

參數(shù):Object

Object參數(shù)說明:

參數(shù)名 類型 必填 說明
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í)行)

success返回參數(shù)說明:

參數(shù) 類型 說明
authSetting Object 用戶授權(quán)結(jié)果,其中 key 為 scope 值,value 為 Bool 值,表示用戶是否允許授權(quán)

示例:

swan.getSetting({
    success: function (res) {
        console.log(res.authSetting['scope.userInfo']);
        console.log(res.authSetting['scope.userLocation']);
    }
});

分享


onShareAppMessage

解釋:在 Page 中定義 onShareAppMessage 函數(shù),設(shè)置該頁面的分享信息。

  • 用戶點(diǎn)擊分享按鈕的時(shí)候會調(diào)用
  • 此事件需要 return 一個(gè)Object,用于自定義分享內(nèi)容

參數(shù):Object

Object參數(shù)說明:

參數(shù)名 類型 說明
from String 分享事件來源。button:頁面內(nèi)轉(zhuǎn)發(fā)按鈕;menu:右上角分享菜單
currentTarget Object 如果 from 值是 button,則 currentTarget 是觸發(fā)這次轉(zhuǎn)發(fā)事件的 button,否則為 undefined

自定義分享字段:

參數(shù)名 類型 必填 說明
title String 分享標(biāo)題
content String 分享內(nèi)容
imageUrl String 分享圖標(biāo)
path String 頁面 path ,必須是以 / 開頭的完整路徑
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í)行)

示例:

Page({
    onShareAppMessage() {
        return {
            title: '智能小程序示例',
            content: '世界很復(fù)雜,百度更懂你',
            path: '/pages/openShare/openShare?key=value'
        };
    }
});
Bug & Tip

1、bug: iOS 點(diǎn)擊分享面板的取消時(shí),會執(zhí)行 fail,Android 不會執(zhí)行。

收獲地址


chooseAddress

解釋:調(diào)起用戶編輯收貨地址原生界面,并在編輯完成后返回用戶選擇的地址。

需要用戶授權(quán) scope.address

參數(shù):Object

Object參數(shù)說明:

參數(shù)名 類型 必填 說明
success Function 返回用戶選擇的收貨地址信息
fail Function 接口調(diào)用失敗的回調(diào)函數(shù)
complete Function 接口調(diào)用結(jié)束的回調(diào)函數(shù)(調(diào)用成功、失敗都會執(zhí)行)

success返回參數(shù)說明:

參數(shù)名 類型 說明
errMsg String 調(diào)用結(jié)果
userName String 收貨人姓名
postalCode String 郵編
provinceName String 國標(biāo)收貨地址第一級地址
cityName String 國標(biāo)收貨地址第二級地址
countyName String 國標(biāo)收貨地址第三級地址
detailInfo String 詳細(xì)收貨地址信息
telNumber String 收貨人手機(jī)號碼

示例:

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);
    }
});

聚合收銀臺支付


requestPolymerPayment

版本:百度 App 10.7.0 版本開始支持。

解釋:百度聚合收銀臺,聚合了主流的百度錢包、微信、支付寶、網(wǎng)銀等多種支付方式,方便開發(fā)者一站式快速接入多種支付渠道,讓百度用戶能在智能小程序場景下,直接完成支付、交易閉環(huán),提升用戶支付體驗(yàn)的同時(shí),提高智能小程序的訂單轉(zhuǎn)化率。

了解更多信息,請查看 百度電商開放平臺:產(chǎn)品介紹

參數(shù):Object

Object參數(shù)說明:

參數(shù)名 類型 必填 說明
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)用成功、失敗都會執(zhí)行)

orderInfo 參數(shù)說明:

  • dealId: 跳轉(zhuǎn)百度收銀臺支付必帶參數(shù)之一,是百度收銀臺的財(cái)務(wù)結(jié)算憑證,與賬號綁定的結(jié)算協(xié)議一一對應(yīng),每筆交易將結(jié)算到dealId對應(yīng)的協(xié)議主體。
  • appKey: 用以表示應(yīng)用身份的唯一ID,在應(yīng)用審核通過后進(jìn)行分配,一經(jīng)分配后不會發(fā)生更改,來唯一確定一個(gè)應(yīng)用。
  • totalAmount: 訂單金額,單位為人民幣分。
  • tpOrderId: 商戶平臺自己記錄的訂單ID,當(dāng)支付狀態(tài)發(fā)生變化時(shí),會通過此訂單ID通知商戶。
  • dealTitle: 訂單的名稱。
  • rsaSign: 對appKey+dealId+tpOrderId進(jìn)行RSA加密后的密文,防止訂單被偽造。簽名過程見 百度電商開放平臺:簽名與驗(yàn)簽
  • bizInfo: 訂單詳細(xì)信息,需要是一個(gè)可解析為JSON Object的字符串。字段內(nèi)容見: 百度電商開放平臺:收銀臺接入

bannedChannels 參數(shù)說明:

channel 說明
Alipay 支付寶
BDWallet 百度錢包
WeChat 微信支付

示例:

swan.requestPolymerPayment({
    orderInfo: {
        "dealId": "470193086",
        "appKey": "MMMabc",
        "totalAmount": "1",
        "tpOrderId": "3028903626",
        "dealTitle": "智能小程序Demo支付測試",
        "rsaSign": '',
        "bizInfo": ''
    },
    success: function (res) {
        swan.showToast({
            title: '支付成功',
            icon: 'success'
        });
    },
    fail: function (err) {
        swan.showToast({
            title: JSON.stringify(err)
        });
        console.log('pay fail', err);
    }
});

獲取發(fā)票抬頭


chooseInvoiceTitle

解釋:選擇用戶的發(fā)票抬頭。

需要用戶授權(quán) scope.invoiceTitle

參數(shù):Object

Object參數(shù)說明:

參數(shù)名 類型 必填 說明
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í)行)

success返回參數(shù)說明:

參數(shù)名 類型 說明
type String 抬頭類型(0:單位,1:個(gè)人)
title String 抬頭名稱
taxNumber String 抬頭稅號
companyAddress String 單位地址
telephone String 手機(jī)號碼
bankName String 銀行名稱
bankAccount String 銀行賬號
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);
    }
})
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號