百度智能小程序 百度收銀臺

2020-09-05 14:44 更新

swan.requestPolymerPayment

基礎(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)檢測。

方法參數(shù)

Object object

object 參數(shù)說明

屬性名類型必填默認(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í)行)

orderInfo 參數(shù)說明

參數(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

appKey+dealId+totalAmount+tpOrderId進行 RSA 加密后的簽名,防止訂單被偽造。簽名過程見 簽名與驗簽

bizInfo

訂單詳細(xì)信息,需要是一個可解析為 JSON Object 的字符串。字段內(nèi)容見:bizInfo 組裝

payResultUrl

當(dāng)前頁面 path

Web 態(tài)小程序支付成功后跳回的頁面路徑,例如:'/pages/payResult/payResult'

示例


圖片示例

代碼示例 

在開發(fā)者工具中打開

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


Bug & Tip

  • 服務(wù)審核未通過會導(dǎo)致調(diào)起失敗“商品不存在”等錯誤,需要移步“開發(fā)者平臺-支付管理”查看服務(wù)審核狀態(tài);
  • 整個 orderInfo 是個 JSON 對象;
  • bizInfo 這個鍵值是一個以字符串形式存放的 JSON 對象;
  • 在調(diào)起收銀臺過程中,如開發(fā)者在任何一個環(huán)節(jié)沒有嚴(yán)格按照文檔要求操作均會導(dǎo)致此“簽名錯誤”,請認(rèn)真閱讀文檔。

錯誤碼

Android

錯誤碼說明

1001

執(zhí)行失敗

iOS

錯誤碼說明

202

解析失敗,請檢查參數(shù)是否正確

10002

網(wǎng)絡(luò)請求失敗

10005

系統(tǒng)拒絕


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號