W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
基礎(chǔ)庫 1.8.5 版本開始支持。使用工具調(diào)試時為模擬支付,使用真機調(diào)試時可查看真實支付結(jié)果。在工具和真機中的實現(xiàn)有區(qū)別,詳見 API 實現(xiàn)差異。
解釋:百度收銀臺,聚合了主流的百度錢包、微信、支付寶、網(wǎng)銀等多種支付方式,方便開發(fā)者一站式快速接入多種支付渠道,讓百度用戶能在智能小程序場景下,直接完成支付、交易閉環(huán),提升用戶支付體驗的同時,提高智能小程序的訂單轉(zhuǎn)化率。
為了幫助開發(fā)者調(diào)用收銀臺接口,我們提供了 Go 語言版本封裝了簽名 & 驗簽、 HTTP 接口請求等基礎(chǔ)功能,詳見下載小程序支付 demo 。
想要更具體了解關(guān)于百度收銀臺開通、API、后臺操作的詳細(xì)內(nèi)容。
Web 態(tài)說明:Web 態(tài)登錄需要跳轉(zhuǎn)至收銀臺頁面,支付成功后再跳轉(zhuǎn)回小程序頁面,具體支付流程如下:如圖,由于在 Web 態(tài)存在頁面跳轉(zhuǎn)的過程,原調(diào)用 API 的頁面的 JS 上下文狀態(tài)會丟失,支付完成不會觸發(fā)該 API 的 success 或者 fail 回調(diào)函數(shù)(僅在參數(shù)校驗失敗時會觸發(fā) fail 回調(diào)),因此開發(fā)者需要在結(jié)果頁( orderInfo.payResultUrl 所指定的頁面)做好支付狀態(tài)檢測。
Object object
屬性名 | 類型 | 必填 | 默認(rèn)值 | 說明 | Web 態(tài)說明 |
---|---|---|---|---|---|
orderInfo | Object | 是 | 訂單信息 | ||
success | Function | 否 | 接口調(diào)用成功的回調(diào)函數(shù) | Web 態(tài)內(nèi),接口調(diào)用成功不會觸發(fā) success | |
fail | Function | 否 | 接口調(diào)用失敗的回調(diào)函數(shù) | Web 態(tài)內(nèi),僅參數(shù)校驗失敗會觸發(fā) fail | |
complete | Function | 否 | 接口調(diào)用結(jié)束的回調(diào)函數(shù)(調(diào)用成功、失敗都會執(zhí)行) |
參數(shù) | 必填 | 默認(rèn)值 | 說明 |
---|---|---|---|
dealId | 是 | 跳轉(zhuǎn)百度收銀臺支付必帶參數(shù)之一,是百度收銀臺的財務(wù)結(jié)算憑證,與賬號綁定的結(jié)算協(xié)議一一對應(yīng),每筆交易將結(jié)算到 dealId 對應(yīng)的協(xié)議主體。詳見核心參數(shù)獲取與組裝 | |
appKey | 是 | 支付能力開通后分配的支付 appKey ,用以表示應(yīng)用身份的唯一 ID ,在應(yīng)用審核通過后進行分配,一經(jīng)分配后不會發(fā)生更改,來唯一確定一個應(yīng)用。詳見核心參數(shù)獲取與組裝 | |
totalAmount | 是 | 訂單金額,單位為人民幣分 | |
tpOrderId | 是 | 商戶平臺自己記錄的訂單 ID ,當(dāng)支付狀態(tài)發(fā)生變化時,會通過此訂單 ID 通知商戶 | |
dealTitle | 是 | 訂單的名稱 | |
signFieldsRange | 是 | 用于區(qū)分驗簽字段范圍。0:原驗簽字段 appKey+dealId+tpOrderId ;1:包含 totalAmount 的驗簽,驗簽字段包括 appKey+dealId+tpOrderId+totalAmount ,固定值為 1 | |
rsaSign | 是 | 對 | |
bizInfo | 是 | 訂單詳細(xì)信息,需要是一個可解析為 JSON Object 的字符串。字段內(nèi)容見:bizInfo 組裝 | |
payResultUrl | 否 | 當(dāng)前頁面 path | Web 態(tài)小程序支付成功后跳回的頁面路徑,例如:'/pages/payResult/payResult' |
<view class="wrap">
<view class="card-area">
<button bind:tap="requestPolymerPayment" type="primary" hover-stop-propagation="true">支付0.01元</button>
</view>
</view>
Page({
onLoad(query) {
// 首次進入頁面時,檢測支付狀態(tài)
// web化支付后跳轉(zhuǎn)回本頁面時,也在此檢測支付狀態(tài)
this.updatePayStatus(query.tpOrderId);
},
requestPolymerPayment(e) {
swan.request({
// 僅為示例,并非真實的接口地址,開發(fā)者從真實接口獲取orderInfo的值
url: 'https://mbd.baidu.com/xxx',
success: res => {
let {orderInfo} = res;
// Web 態(tài)中,支付完成后跳轉(zhuǎn)的頁面路徑(本例中跳轉(zhuǎn)回當(dāng)前頁面:pages/index/index)
// 攜帶 tpOrderId 參數(shù),方便跳轉(zhuǎn)后從服務(wù)端查詢訂單信息
orderInfo.payResultUrl = '/pages/index/index?tpOrderId=' + orderInfo.tpOrderId;
swan.requestPolymerPayment({
orderInfo: orderInfo,
bannedChannels: this.getData('bannedChannels'),
success: res => {
// 更新支付狀態(tài)顯示。
// Web 態(tài)中不進入 success 回調(diào),而是跳轉(zhuǎn)回本頁面,因此在onload中也要檢測支付狀態(tài)
this.updatePayStatus(orderInfo.tpOrderId);
},
fail: err => {
swan.showModal({
title: err.errCode,
content: err.errMsg
});
console.log('pay fail', err);
}
});
},
fail: err => {
swan.showToast({
title: '支付失敗',
icon: 'none'
});
}
});
},
updatePayStatus(tpOrderId) {
if (!tpOrderId) {
return;
}
// 通過開發(fā)者服務(wù)端接口,檢測支付狀態(tài)
swan.request({
// 僅為示例,并非真實的接口地址
url: 'https://mbd.baidu.com/xxx/checkPayStatus',
data: {tpOrderId},
success: res => {
// 僅為示例,具體判斷規(guī)則由開發(fā)者服務(wù)端接口返回值決定。
if (res.payStatus === 'success') {
swan.showToast({
title: '支付成功',
icon: 'success'
});
}
}
});
}
});
錯誤碼 | 說明 |
---|---|
1001 | 執(zhí)行失敗 |
錯誤碼 | 說明 |
---|---|
202 | 解析失敗,請檢查參數(shù)是否正確 |
10002 | 網(wǎng)絡(luò)請求失敗 |
10005 | 系統(tǒng)拒絕 |
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: