• 字节小程序交易组件使用指南


    前言 

    通过插件的形式,预先实现了一些页面模板,例如退款页模板,小程序开发者只需要直接引入相应插件,并且遵循插件约定的规范,与插件之间实现相互通信,即可完成相应的页面,从而提高开发效率。

    交易系统前端模板在页面维度上提供了提单页模板、退款页模板等,模板的入口是一个pay-button 组件,通过该组件实现从小程序跳转到前端模板页面。

    目录

    一 、在小程序中引入插件

    二、pay-button交易按钮

    属性说明

    bind:pay 说明

    bind:refund 说明

    bind:applyrefund 说明

    bind:getgoodsinfo 说明

    bind:placeorder 说明

    bind:error 说明

    效果示例

    Case 1 :mode 为 1 或 不填 (组件的使用模式:已下单)

    Case 2 :mode 为 2 (组件的使用模式:立即抢购)

    官方代码示例

    Case 1 :mode 为 1 或不填

    Case 2 :mode 为 2,立即抢购

    三、测试代码示例

    (1)下单(须真机调试否则抓取不到信息)

    ttml

     js

    (2)订单详情 

    ttml

    js 

    四、报错解决


    一 、在小程序中引入插件

    修改小程序全局配置文件 package.json 和 app.json。

    package.json:

    1. {
    2. "ttPlugins": {
    3. "dependencies": {
    4. // 配置插件名,版本等信息
    5. "microapp-trade-plugin": {
    6. "version": "1.1.2",
    7. "isDynamic": true
    8. }
    9. }
    10. }
    11. }

    app.json :

    1. {
    2. "pages": [
    3. "pages/index/index",
    4. // 提单页
    5. "ext://microapp-trade-plugin/order-confirm",
    6. // 退款申请页配置
    7. "ext://microapp-trade-plugin/refund-apply",
    8. // 退款详情页
    9. "ext://microapp-trade-plugin/refund-detail"
    10. ]
    11. }

    二、pay-button交易按钮

    https://developer.open-douyin.com/docs/resource/zh-CN/mini-app/develop/component/industry/trading-system/pay-button

    属性说明

    属性名

    类型

    默认值

    必填

    说明

    最低支持版本

    mode

    number

    1

    组件的使用模式

    • 1:已下单
    • 2:未下单

    2.43.0.0

    goods-id

    string

    否(mode 为2,该属性必传)

    商品id

    • mode 为 2 时,该属性必传
    • 商品库商品传 spuid,非商品库商品传开发者订单系统商品号。
    • 字段长度为1~64字节,详见 Bug & Tip

    2.43.0.0

    goods-type

    number

    否(mode 为2时,该属性必传)

    商品类别,mode 为 2 时,该属性必传

    • 1:商品库商品传
    • 2:非商品库商品传

    目前只支持商品库商品,非商品库商品需要申请白名单

    2.43.0.0

    order-status

    number

    0

    已下单场景(mode = 1)下,细分订单状态

    • 0:继续支付
    • 1:申请退款
    • 2:退款中
    • 3:退款成功
    • 4:退款失败

    2.43.0.0

    order-id

    string

    开发者订单系统的交易订单号,用于继续支付、申请退款

    2.43.0.0

    refund-id

    string

    开发者订单系统的退款单号,用于查看退款详情

    2.43.0.0

    refund-total-amount

    number

    退款金额

    • 针对交易系统之前的老订单申请退款,该属性必传
    • 单位:分
    • 如何哪些情况下为老订单,详见 Bug & Tip

    2.43.0.0

    biz-line

    number

    1

    否,如果是泛知识类型则必填

    业务线类型

    • 1:团购
    • 2:泛知识

    2.54.0.0

    marketing-ready

    boolean

    false

    是否配置了营销扩展点

    • true:已配置营销扩展点,进行营销展现并进行营销优惠计算
    • false: 未配置,不展现营销信息
    • 特别提醒,传 true 时,必须接入营销扩展点

    2.54.0.0

    bind:getgoodsinfo

    EventHandle

    否(mode 为 2 时,该属性必传)

    获取商品信息,mode 为 2 时,该属性必传

    详见 bind:getgoodsinfo 说明

    2.43.0.0

    bind:placeorder

    EventHandle

    否(mode 为 2 时,该属性必传)

    跳转至提单页前的准备工作

    • mode 为 2 时,该属性必传
    • 内容取决于开发者,但下单需要用户处于登录状态

    详见 bind:placeorder 说明

    2.43.0.0

    bind:error

    EventHandle

    • 组件传入属性异常、组件内部发生异常时触发

    2.43.0.0

    bind:applyrefund

    EventHandle

    透传退款参数

    • 用于申请退款场景
    • 开发者可以在该方法中,通过返回一个对象,定义一些透传信息。前端模板会将返回的对象通过 JSON.stringify进行序列化,序列化的字符串会作为申请退款时的 cp_extra 参数,透传给开发者服务端。

    详见 bind:applyrefund 说明

    2.43.0.0

    bind:refund

    EventHandle

    退款回调

    • 用于申请退款场景
    • 开发者可以在该方法中,根据提交退款申请的状态返回值,实现开发者自定义的逻辑

    详见 bind:refund 说明

    2.43.0.0

    bind:pay

    EventHandle

    否(mode 为2时,该属性必传)

    支付回调

    • 用于立即抢购、继续支付场景
    • 开发者可以在该方法中,根据支付状态返回值,实现开发者自定义的逻辑

    2.43.0.0

    bind:pay 说明

    • 继续支付:
    1. // bind:refund 使用示例
    2. handleContinutePay(event) {
    3. const { status, outOrderNo, result } = event.detail;
    4. if (status === 'success') {
    5. const { code } = result;
    6. if (code === 0) {
    7. // 继续支付成功
    8. }
    9. } else {
    10. // 继续支付失败
    11. }
    12. }

    • 立即抢购
      • 当用户在提单页点击「立即支付」按钮后,会调起小程序收银台,当用户实际完成了支付或选择关闭收银台取消支付,以及预下单接口报错时,前端模板会调用该方法。
      • 开发者可以在该方法中,根据支付返回结果,完成开发者自定义的逻辑,如跳转订单列表页等。
    1. /**
    2. * status: 支付状态,'success' | 'fail'
    3. * orderId: 抖音交易系统内部订单号,类型为 string
    4. * outOrderNo:开发者系统交易订单号,类型为 string
    5. * result: 创建订单、tt.pay 支付结果,类型为 object
    6. */
    7. handlePay(event) {
    8. const { status , orderId , outOrderNo , result } = event.detail;
    9. if (status === 'success') {
    10. const { code } = result;
    11. if (code === 0) {
    12. // 支付成功
    13. } else {
    14. // 支付失败(超时、取消、关闭)
    15. }
    16. } else {
    17. const { errMsg } = result;
    18. }
    19. }

    • 事件对象的 detail 为 object 类型,属性如下:

    属性名

    类型

    说明

    最低支持版本

    status

    string

    是否成功拉起小程序收银台

    • success:成功
    • fail:失败

    2.43.0.0

    orderId

    string

    抖音交易系统内部订单号

    2.43.0.0

    outOrderNo

    string

    开发者传入的开发者系统交易订单号

    2.43.0.0

    result

    object

    根据 status 属性返回支付结果

    2.43.0.0

    result 属性说明

    object 类型,属性如下:

    • 当 status 为 success 时:

    属性名

    类型

    说明

    最低支持版本

    code

    number

    • 0:支付成功
    • 1:支付超时
    • 2:支付失败
    • 3:支付关闭
    • 4:支付取消
    • 9:订单状态开发者自行获取

    只要调起收银台成功,支付都会回调成功,开发者依据返回的 code 值,进行后续业务逻辑处理

    2.43.0.0

    orderId

    string

    抖音交易系统内部交易订单号

    2.43.0.0

    • 当 status 为 fail 时:

    属性名

    类型

    说明

    最低支持版本

    errMsg

    string

    API 支付错误码

    • 10000: 支付失败
    • 10001: 调起微信失败
    • 10002: 微信未安装

    2.43.0.0

    bind:refund 说明

    1. // bind:refund 使用示例
    2. handleRefund(event) {
    3. const { status, result } = event.detail;
    4. if (status === 'success') {
    5. const { refundId, outRefundNo } = result;
    6. } else {
    7. const { errMsg } = result;
    8. }
    9. }

    事件对象的 detail 为 object 类型,属性如下:

    属性名

    类型

    说明

    最低支持版本

    status

    string

    发起申请退款结果

    • 发起成功:'success'
    • 发起失败:'fail'

    2.43.0.0

    result

    object

    根据 status 属性返回支付结果

    2.43.0.0

    result 属性说明

    object 类型,属性如下:

    • 当 status 为 success 时:

    属性名

    类型

    说明

    最低支持版本

    refundId

    string

    抖音交易系统内部退款单号

    2.43.0.0

    outRefundNo

    string

    开发者系统退款单号

    2.43.0.0

    orderId

    string

    抖音交易系统内部交易订单号

    2.43.0.0

    • 当 status 为 fail 时:

    属性名

    类型

    说明

    最低支持版本

    errMsg

    string

    失败错误信息

    2.43.0.0

    bind:applyrefund 说明

    需要返回 promise,开发者可以在 promise 中做退款参数的设置,并将需要透传的退款参数作为返回值传入 resolve 函数。

    • 若无需传入 extra 参数,该方法可不填。
    1. // bind:applyrefund 使用示例
    2. applyRefund(event) {
    3. const { orderId } = event.detail;
    4. const extra = { orderId }; // 开发者需要透传的参数,可自定义内容
    5. return new Promise(resolve => {
    6. resolve(extra);
    7. });
    8. },

    • 事件对象的 detail 为 object 类型,属性如下:

    属性名

    类型

    说明

    最低支持版本

    orderId

    string

    开发者传入的开发者系统交易订单号

    2.43.0.0

    指定金额退款

    指定金额退时,需要通过 bind:applyrefund 传入 itemOrderList。

    itemOrderList 可和其他透传参数一同通过 bind:applyrefund 传入,可见下方代码说明

    itemOrderList 说明

    itemOrderList 是一个长度最少为 1 的数组,不可传递 undefined 或 null。

    字段名

    类型

    是否必传

    描述

    最低支持版本

    itemOrderId

    string

    退款的商品单号

    2.59.0.3

    refundAmount

    number

    该 itemOrderId 需要退款的金额

    • 单位:分
    • 不能大于该 itemOrderId 实付金额,未填入该字段,则默认为对应子单最大退款金额

    2.59.0.3

    1. // bind:applyrefund 指定金额退使用示例
    2. applyRefund(event) {
    3. const { orderId } = event.detail;
    4. const itemOrderList = [
    5. {itemOrderId:'ot423412',refundAmount:100},
    6. {itemOrderId:'ot423413'},
    7. ]
    8. const extra = { orderId , itemOrderList };
    9. return new Promise(resolve => {
    10. resolve(extra);// extra 透传至服务端时,当中的 itemOrderList 会被删除
    11. });
    12. },

    bind:getgoodsinfo 说明

    • 需要返回 promise,开发者可以在 promise 中获取相关商品信息,并将商品信息作为返回值传入 resolve 函数。
    1. // bind:getgoodsinfo 使用示例
    2. // 非商品库商品
    3. getGoodsInfo(event) {
    4. const { goodsId } = event.detail;
    5. return new Promise(resolve => {
    6. // 在此处开发者可以进行商品数据请求,获取商品信息
    7. // 然后将商品信息传入 resolve 函数
    8. resolve({
    9. currentPrice: 9900,
    10. goodsName: '循礼门M+丨【释集烤肉】99元 原价206.4元超值套餐',
    11. goodsPhoto:
    12. 'https://p11.douyinpic.com/img/aweme-poi/product/spu/c050f399ac447daf2715e11e6976c2e2~noop.jpeg?from=3303174740',
    13. goodsLabels: [
    14. {type: 'EXPIRED_RETURNS'}, // 过期退
    15. {type: 'REFUND_ANYTIME'}, // 随时退
    16. {type: 'BOOK_IN_ADVANCE', value: 2} // 提前2日预约
    17. ],
    18. minLimits: 1,
    19. maxLimits: 2,
    20. dateRule: '周一至周日可用',
    21. validation: {
    22. phoneNumber: {
    23. required: true // 手机号是否必填, 为 ture则必填,false选填,默认选填
    24. }
    25. },
    26. extra: {}
    27. });
    28. });
    29. }
    30. // 商品库商品
    31. getGoodsInfo(event) {
    32. return new Promise(resolve => {
    33. // 在此处开发者可以进行商品数据请求,获取商品信息
    34. // 然后将商品信息传入 resolve 函数
    35. resolve({
    36. minLimits: 1,
    37. maxLimits: 2,
    38. dateRule: '周一至周日可用',
    39. validation: {
    40. phoneNumber: {
    41. required: true // 手机号是否必填
    42. }
    43. }
    44. });
    45. })
    46. }

    • 事件对象的 detail 为 object 类型,属性如下:

    属性名

    类型

    说明

    最低支持版本

    goodsId

    string

    商品 id

    2.43.0.0

    goodsType

    number

    商品类型

    2.43.0.0

    • 商品信息说明如下:

    字段名

    类型

    默认值

    必传

    说明

    currentPrice

    number

    注意:非商品库商品必传

    商品单价

    • 单位:分
    • 非商品库商品必传
    • 价格范围是 1 - 999999999
    • 必须为整型值,不能为浮点数

    goodsName

    string

    注意:非商品库商品必传

    商品名称

    • 非商品库商品必传(特别提醒 Bug & Tip )
    • 字段长度为区间值 [1, 256] 字节(字节与字符串说明见下方 Bug & Tip

    goodsPhoto

    string

    注意:非商品库商品必传

    商品图片

    • 非商品库商品必传
    • 字段长度为 [1, 512] 字节(字节与字符串说明见下方 Bug & Tip )
    • 图片类型支持 jpg、jpeg、gif、webp

    goodsLabels

    GoodsLabel[]

    商品标签

    • 最多设置三个标签
    • 商品库商品标

    minLimits

    number

    1

    起购份数

    • 范围是 1 - 99999(minLimits与maxLimits关系见 Bug & Tip )
    • 必须为整型值,不能为浮点数

    maxLimits

    number

    99999

    限购份数

    • 范围是 1 - 99999(minLimits与maxLimits关系见 Bug & Tip)
    • 必须为整型值,不能为浮点数

    dateRule

    string

    周一至周日可用

    使用规则

    • 如 “周一至周日可用”、“周一至周五可用”、“非节假日可用”
    • 字段长度最大长度为128字节(字节与字符串说明见下方 Bug & Tip )

    extra

    object

    开发者透传参数

    • 上传服务端时会对extra进行JSON.stringify处理

    GoodsLabel 类型说明

    object 类型,属性如下

    属性名

    类型

    默认值

    必传

    说明

    最低支持版本

    type

    string

    标签类别

    2.43.0.0

    value

    number

    天数

    • 取值范围为 1~99
    • 当 type 为 REFUNDABLE_DAYS 或者 BOOK_IN_ADVANCE 时必传
    • 必须为整型值,不能为浮点数

    2.43.0.0

    type 的合法值

    说明

    最低支持版本

    EXPIRED_RETURNS

    过期退

    2.43.0.0

    REFUND_ANYTIME

    随时退

    2.43.0.0

    RESERVATION_FREE

    免预约

    2.43.0.0

    REFUNDABLE_DAYS

    x 日内可退

    2.43.0.0

    BOOK_IN_ADVANCE

    提前 x 日预约

    2.43.0.0

    NON_REFUNDABLE

    不可退

    2.50.0.0

    最多设置三个标签,并且存在以下互斥关系:

    • REFUND_ANYTIME 与 REFUNDABLE_DAYS 互斥,即 “随时退” 与 “x 日内可退” 互斥。
    • RESERVATION_FREE 与 BOOK_IN_ADVANCE 互斥,即 “免预约” 与 “提前 x 日预约” 互斥。
    • NON_REFUNDABLE 与 REFUNDABLE_DAYS REFUND_ANYTIME互斥,即 “不可退”与“随时退” 、 “x 日内可退” 互斥。
    • 只做展现。

    bind:placeorder 说明

    由于在前端模板中进行下单需要用户登录,所以建议在此处完成登录或提醒用户打开设置给予相应权限。

    需要返回 promise,开发者可以在 promise 中完成用户登录,然后调用 resolve 函数。

    属性名

    类型

    说明

    最低支持版本

    goodsId

    string

    商品id

    2.43.0.0

    • 若无法完成相关逻辑,则一定要触发 reject 方法,否则可能会导致后续跳转失败。
    1. userLogin(event) {
    2. const { goodsId , goodsType } = event.detail
    3. return new Promise((resolve, reject) => {
    4. tt.login({
    5. success() {
    6. // 用户登录成功并获取信息,则调用 resolve 函数,跳转至提单页
    7. resolve();
    8. },
    9. fail() {
    10. // 用户登录失败,则跳转提单页失败
    11. reject();
    12. }
    13. });
    14. });
    15. },

    • 事件对象的 detail 为 object 类型,属性如下:

    属性名

    类型

    说明

    最低支持版本

    goodsId

    string

    商品 id

    2.43.0.0

    goodsType

    number

    商品类型

    2.43.0.0

    bind:error 说明

    • 当错误发生时触发。
    • 错误原因可能是因为必填参数不合法,服务端请求错误等。
    1. // 错误信息含义见下文 bind:error报错信息
    2. handleError(event) {
    3. const { errMsg ,errNo} = event.detail;
    4. }

    • 事件对象的detail 为 object 类型,属性如下:

    属性名

    类型

    说明

    最低支持版本

    errMsg

    string

    组件内部错误信息,如传入属性类型错误等

    2.43.0.0

    <pay-button ... //任意模式下均可使用bind:error bind:error="handleError" />

    bind:error 报错信息

    1. errorHandler(event){
    2. const { errNo , errMsg } = event.detail
    3. // do something
    4. // errNo(错误码,对应某种具体报错原因)
    5. // errMsg(报错信息)
    6. }

    errNo(错误码)

    含义

    21500

    mode 非法

    21501

    goods-id 非法

    21502

    goods-type 非法

    21503

    无 bind:getgoodsinfo

    21504

    无 bind:placeorder

    21505

    商品库商品获取商品信息,服务端内部错误

    21506

    商品库商品获取商品信息,服务端校验参数不通过

    21507

    支付能力查询,服务端内部错误

    21508

    支付能力查询,服务端校验参数不通过

    21509

    开发者 bind:getgoodsinfo 调用失败

    21510

    开发者 bind:placeorder 调用失败

    21511

    非商品库商品,商品标签校验不通过

    21512

    bind:getgoodsinfo 传入数据类型错误

    21513

    点击按钮后触发,获取商品信息中

    21514

    点击按钮后触发,获取商品信息失败

    21515

    点击按钮后触发,无支付能力

    21516

    无 bind:pay 方法

    21517

    创建订单(预下单),服务端错误

    21518

    订单数据错误,无法生成订单

    21521

    order-status 非法

    21522

    order-id 非法

    21523

    refund-id 非法

    21524

    订单为 1.0 版本,但缺少 refund-total-amount

    21526

    继续支付获取订单信息失败,服务端内部错误

    21527

    继续支付获取订单信息失败,服务端参数校验不通过

    21528

    申请退款获取订单信息失败,服务端内部错误

    21529

    申请退款获取订单信息失败,服务端参数校验不通过

    21530

    申请退款获取订单信息失败,服务端返回数据缺少商品信息

    21531

    申请退款获取订单信息失败,订单无可退款订单,订单可退份数等于0

    21532

    查看退款详情 获取退款详情失败

    21533

    bind:applyrefund 调用失败

    21534

    bind:applyrefund 返回类型错误

    21535

    申请退款失败,服务端错误

    21536

    获取小程序主体名称失败,服务端错误

    21537

    查询退款详情失败,服务端错误

    21546

    直跳提单页userLogin调用失败

    21547

    直跳提单页getExtraInfo调用失败

    10000

    支付失败

    10001

    调起微信失败

    10002

    微信未安装

    效果示例

    Case 1 :mode 为 1 或 不填 (组件的使用模式:已下单)

    Case

    示例

    操作效果

    order-status为 0 或不填时

     

    点击后拉起收银台。

     

    order-status 为 1 时

    点击后进入申请退款页面。

     

    order-status 为 2、3、4 时

     

    点击后进入退款详情页面。

     

    Case 2 :mode 为 2 (组件的使用模式:立即抢购)

    根据 goods-type 商品类别分为:

    • 商品库商品:
      • 库存大于 0:根据商品售卖时段,展示状态分为:即将开始立即抢购已结束
      • 库存等于 0:展示状态为已售罄
    • 非商品库商品:
      • 展示状态:立即抢购
    • 操作效果:点击后进入提单页。

    Case 3 :KA 解决方案退款场景

    • 常用于order-status 为 1 的情况:

     

    • 操作效果:点击后进入申请退款页面。

    官方代码示例

    Case 1 :mode 为 1 或不填

    • 继续支付:
    <pay-button order-status="{{0}}" order-id="xxx" bind:pay="onContinutePay" />
    • 申请退款:
      • 使用交易系统生成的新订单:
    1. <pay-button
    2. order-status="{{1}}"
    3. order-id="xxx"
    4. bind:refund="onRefund"
    5. bind:applyrefund="applyRefund"
    6. />
      • 对于交易系统之前的老订单,需传入 refund-total-amount:
    1. // 示例:老订单申请退款 200 元
    2. <pay-button
    3. order-status="{{1}}"
    4. order-id="xxx"
    5. bind:refund="onRefund"
    6. bind:applyrefund="applyRefund"
    7. refund-total-amount="{{20000}}"
    8. />
    • 退款中:
    <pay-button order-status="{{2}}" refund-id="xxx" />
    • 退款成功:
    <pay-button order-status="{{3}}" refund-id="xxx" />
    • 退款失败:
    <pay-button order-status="{{4}}" refund-id="xxx" />

    Case 2 :mode 为 2,立即抢购

    1. <pay-button
    2. mode="{{2}}"
    3. goods-type="{{1}}"
    4. goods-id="xxxx"
    5. bind:getgoodsinfo="getGoodsInfo"
    6. bind:placeorder="userLogin"
    7. bind:pay="onPay"
    8. />
    9. <pay-button
    10. mode="{{2}}"
    11. goods-type="{{2}}"
    12. goods-id="xxxx"
    13. bind:getgoodsinfo="getGoodsInfo"
    14. bind:placeorder="userLogin"
    15. bind:pay="onPay"
    16. />

    三、测试代码示例

    (1)下单(须真机调试否则抓取不到信息)

    ttml

    1. <pay-button
    2. mode="{{2}}"
    3. goods-type="{{1}}"
    4. goods-id="xxx"
    5. bind:getgoodsinfo="getGoodsInfo"
    6. bind:placeorder="userLogin"
    7. bind:pay="onPay"
    8. bind:error="bindError"
    9. />

     js

    1. Page({
    2. data: {
    3. goodId:''
    4. },
    5. getGoodsInfo(event) {
    6. return new Promise(resolve => {
    7. // 在此处开发者可以进行商品数据请求,获取商品信息
    8. // 然后将商品信息传入 resolve 函数
    9. resolve({});
    10. })
    11. },
    12. bindError(event){
    13. const { errNo , errMsg } = event.detail
    14. console.log('errMsg')
    15. console.log(event.detail)
    16. console.log(errMsg)
    17. console.log(errNo)
    18. },
    19. onPay(event) {
    20. console.log(event.detail);
    21. const { status, outOrderNo, result,orderId } = event.detail;
    22. if (status === 'success') {
    23. const { code } = result;
    24. console.log(result);
    25. if (code === 0) {
    26. // 继续支付成功
    27. console.log('支付成功');
    28. setTimeout(() => {
    29. tt.redirectTo({
    30. url: `usr://pages/orderDetail/orderDetail?orderId=${orderId}`,
    31. success: (res) => {
    32. console.log("redirectTo调用成功 ", res);
    33. },
    34. fail: (res) => {
    35. console.log("redirectTo调用失败 ", res);
    36. },
    37. });
    38. }, 1000)
    39. }
    40. } else {
    41. console.log('支付失败')
    42. }
    43. },
    44. userLogin(event) {
    45. console.log('用户登录');
    46. console.log(event);
    47. const { goodsId , goodsType } = event.detail
    48. return new Promise((resolve, reject) => {
    49. tt.login({
    50. success() {
    51. // 用户登录成功并获取信息,则调用 resolve 函数,跳转至提单页
    52. resolve();
    53. },
    54. fail() {
    55. // 用户登录失败,则跳转提单页失败
    56. reject();
    57. }
    58. });
    59. });
    60. },
    61. onShow(){
    62. },
    63. onReady: function () {
    64. },
    65. onLoad:function(options){
    66. });

    (2)订单详情 

    ttml

    1. <view class="order_wrap">
    2. <view class="order_top">
    3. <view class="title">订单已支付</view>
    4. <view class="btn">
    5. <view tt:if="{{orderOutId}}">
    6. <pay-button
    7. order-status="{{1}}"
    8. order-id="{{orderOutId}}"
    9. bind:refund="onRefund"
    10. bind:error="bindError"
    11. bind:applyrefund="applyRefund"
    12. />
    13. <pay-button order-status="{{2}}" refund-id="{{orderOutId}}" />
    14. </view>
    15. </view>
    16. </view>
    17. <view class="task_list">
    18. <view class="task_list_l">
    19. <image src="https://p11.douyinpic.com/img/aweme-poi/product/spu/c050f399ac447daf2715e11e6976c2e2~noop.jpeg?from=3303174740"></image>
    20. </view>
    21. <view class="task_list_r">
    22. <view class="task_rtop">
    23. <view class="task_list_tit">测试商品</view>
    24. <view class="task_list_concesson">
    25. </view>
    26. <view class="task_rbot" tt:if="{{orderOutId}}">
    27. <view class="rbot_time">orderid:{{orderOutId}}</view>
    28. </view>
    29. </view>
    30. </view>
    31. </view>
    32. <view>
    33. <consume-card
    34. order-id="{{orderOutId}}"
    35. bind:consume="orderChangeHandler"
    36. bind:refund="onRefund"
    37. bind:applyrefund="applyRefund"
    38. bind:error="bindError"
    39. ></consume-card>
    40. </view>
    41. <view class="apply_shop">
    42. <view>适用门店(1)</view>
    43. <view>测试</view>
    44. <view>营业时间 11:00-次日00:00</view>
    45. <view>世纪大厦8</view>
    46. <view>商家资质信息展示</view>
    47. </view>
    48. </view>

    js 

    1. Page({
    2. data: {
    3. orderInfo:{},
    4. orderOutId:''
    5. },
    6. orderChangeHandler(event){
    7. const { orderId } = event.detail
    8. //do something
    9. },
    10. bindError(event){
    11. const { errNo , errMsg } = event.detail
    12. console.log('errMsg')
    13. console.log(event.detail)
    14. console.log(errMsg)
    15. console.log(errNo)
    16. },
    17. // bind:applyrefund 使用示例
    18. applyRefund(event){
    19. const { orderId } = event.detail;
    20. const extra = { orderId }; // 开发者需要透传的参数,可自定义内容
    21. console.log(orderId)
    22. console.log(111)
    23. return new Promise(resolve => {
    24. resolve(extra);
    25. });
    26. },
    27. // bind:refund 使用示例
    28. onRefund(event) {
    29. const { status, result } = event.detail;
    30. console.log(event.detail);
    31. if (status === 'success') {
    32. const { refundId, outRefundNo } = result;
    33. console.log(result);
    34. } else {
    35. const { errMsg } = result;
    36. }
    37. },
    38. //核销订单后触发
    39. orderChangeHandler(event){
    40. const { orderId } = event.detail
    41. //do something
    42. },
    43. onLoad: function (options) {
    44. let that=this
    45. console.log(options);
    46. if(options.orderId){
    47. that.setData({
    48. orderOutId:options.orderId
    49. })
    50. console.log('调用接口');
    51. }
    52. }
    53. })

    四、报错解决

     由于在pay-button组件内部使用的原生跳转方法不生效,在路径前加上user://即可

     其他服务端错误不做叙述了,有问题可以留言交流

  • 相关阅读:
    python Zipf定律-高度偏斜分布
    css选择器
    猿创征文|信息抽取(2)——pytorch实现Bert-BiLSTM-CRF、Bert-CRF模型进行实体抽取
    【图像分类】Vision Transformer理论解读+实践测试
    记一次冲突:JsonSerialize注解标注的字段返回两次的错误
    Linux 安装docker-compose 编排工具并启动
    如何做好软件本地化翻译服务
    QT项目中通过数据封装实现Json结构和数据类之间的相互转换
    极客日报:达摩院实现全球最大AI预训练模型;苹果3nm芯片或将2023年问世;微软官宣加入JCP计划
    RK3399应用开发 | 编译安装 mesa 3D 图形库(23.0.0)
  • 原文地址:https://blog.csdn.net/m0_55969466/article/details/127445137