前端支付流程

一、介绍:

swan.requestPolymerPayment
  百度收银台,聚合了主流的百度钱包、微信、支付宝、网银等多种支付方式,方便开发者一站式快速接入多种支付渠道,让百度用户能在智能小程序场景下,直接完成支付、交易闭环,提升用户支付体验的同时,提高智能小程序的订单转化率。

二、方法参数:

object 参数说明:

属性名 类型 必填 默认值 说明
orderInfo Object null 订单信息
success Function 接口调用成功的回调函数
fail Function 接口调用失败的回调函数
complete Function 接口调用结束的回调函数(调用成功、失败都会执行)

orderInfo 参数说明

参数 类型 必填 说明
dealId String 跳转百度收银台支付必带参数之一,是百度收银台的财务结算凭证,与账号绑定的结算协议一一对应,每笔交易将结算到 dealId 对应的协议主体。
appKey String 支付能力开通后分配的支付 appKey,用以表示应用身份的唯一 ID ,在应用审核通过后进行分配,一经分配后不会发生更改,来唯一确定一个应用。
totalAmount String 订单金额(单位:人民币分)。注:小程序测试包测试金额不可超过 1000 分
tpOrderId String 小程序开发者系统创建的唯一订单 ID ,当支付状态发生变化时,会通过此订
notifyUrl String 通知开发者支付状态的回调地址,必须是合法的 URL ,与开发者平台填写的支付回调地址一致,未填写的以平台回调地址为准
dealTitle String 订单的名称。
signFieldsRange String 用于区分验签字段范围,signFieldsRange 的值:0:原验签字段 appKey+dealId+tpOrderId;1:包含 totalAmount 的验签,验签字段包括appKey+dealId+tpOrderId+totalAmount。固定值为 1 。
rsaSign String 对appKey+dealId+totalAmount+tpOrderId进行 RSA 加密后的签名,防止订单被伪造。
bizInfo String 订单详细信息,需要是一个可解析为 JSON Object 的字符串。
payResultUrl String 当前页面 path。Web 态小程序支付成功后跳回的页面路径,例如:pages/payResult/payResult

三、代码示例

SWAN

<view class="wrap">
    <view class="card-area">
        <button bind:tap="requestPolymerPayment" type="primary" hover-stop-propagation="true">支付0.01元</button>
    </view>
</view>

JS

Page({
    onLoad(query) {
        // 首次进入页面时,检测支付状态
        // web化支付后跳转回本页面时,也在此检测支付状态
        this.updatePayStatus(query.tpOrderId);
    },
    requestPolymerPayment(e) {
        swan.request({
            // 仅为示例,并非真实的接口地址,开发者从真实接口获取orderInfo的值
            url: 'https://mbd.baidu.com/xxx',
            success: res => {
                let {orderInfo} = res;

                // Web 态中,支付完成后跳转的页面路径(本例中跳转回当前页面:pages/index/index)
                // 携带 tpOrderId 参数,方便跳转后从服务端查询订单信息
                orderInfo.payResultUrl = '/pages/index/index?tpOrderId=' + orderInfo.tpOrderId;

                swan.requestPolymerPayment({
                    orderInfo: orderInfo,
                    bannedChannels: this.getData('bannedChannels'),
                    success: res => {
                        // 更新支付状态显示。
                        // Web 态中不进入 success 回调,而是跳转回本页面,因此在onload中也要检测支付状态
                        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;
        }
        // 通过开发者服务端接口,检测支付状态
        swan.request({
            // 仅为示例,并非真实的接口地址
            url: 'https://mbd.baidu.com/xxx/checkPayStatus',
            data: {tpOrderId},
            success: res => {
                // 仅为示例,具体判断规则由开发者服务端接口返回值决定。
                if (res.payStatus === 'success') {
                    swan.showToast({
                        title: '支付成功',
                        icon: 'success'
                    });
                }
            }
        });
    }
});

四、错误码

Android

错误码 说明
1001 执行失败

Bug & Tip

Tip:服务审核未通过会导致调起失败“商品不存在”等错误,需要移步“开发者平台-支付管理”查看服务审核状态;
Tip:整个 orderInfo 是个 JSON 对象;
Tip:bizInfo 这个键值是一个以字符串形式存放的 JSON 对象;
Tip:在调起收银台过程中,如开发者在任何一个环节没有严格按照文档要求操作均会导致此“签名错误”,请认真阅读文档。

五、入驻和配置

avatar

  • 简单来讲,开发者需要做:

    • 1、在车联网开放平台申请接入开放平台
    • 2、审核通过后开发者登录开放平台查看opf_appid(dealId),和appkey并且配置保存自己开发者云端
    • 3、获取车联网开放平台给开发者的RSA签名算法的公钥并且配置保存自己开发者云端 注意:此RSA签名算法公钥是车联网开放平台调用开发者云端时,开发者使用该公钥验证签名的
    • 4、开发者在开放平台配置自己生成的RSA签名算法公钥,该公钥用于开发者云端调用车联网开放平台云端时,平台 用于验证签名使用
    • 5、如果开发者应用设计有支付环节,需要配置几个回调url地址(开放平台调用开发者云端)

      • (1)是否支付成功的回调
      • (2)用户发起退款,退款审核接口回调
      • (3)是否退款成功的回调

六、支付流程

avatar

七、支付调用方式

Page({
    requestPolymerPayment(e) {
        swan.request({
            url: 'https://mbd.baidu.com/xxx', // 仅为示例,并非真实的接口地址,开发者从真实接口获取orderInfo的值
            success: res => {
                res.data.data.dealTitle = '百度小程序Demo支付测试';
                let data = res.data;
                if (data.errno !== 0) {
                    console.log('create order err', data);
                    return;
                }
                swan.requestPolymerPayment({
                    orderInfo: data.data,
                    success: res => {
                        swan.showToast({
                            title: '支付成功',
                            icon: 'success'
                        });
                        console.log('pay success', res);
                    },
                    fail: err => {
                        swan.showToast({
                            title: err.errMsg,
                            icon: 'none'
                        });
                        console.log('pay fail', err);
                    }
                });
            },
            fail: err => {
                swan.showToast({
                    title: '订单创建失败',
                    icon: 'none'
                });
                console.log('create order fail', err);
            }
        });
    }
});

八、回调错误码

错误码 错误描述 解决方案
0 支付成功
1 支付超时
2 支付取消
4 支付token 不合法 更新token
6 function支付失败

九、 是否支付成功的回调

调用方:车联网开放平台云端
被调用方:开发者云端 avatar

十、订单退款流程

1、开发调用车联网退款申请接口
调用方:开发者
被调用放:车联网开放平台云端
接口:/iovpay/v2/opf/applyrefund
2、车联网调用开放者云端退款审核接口确认是否可以退款
调用方:车联网开放平台云端
被调用方:开发者云端
avatar 3、退款成功与否回调通知开发者
调用方:车联网开放平台云端
被调用方:开发者云端
avatar

后端支付流程车载语音