当前位置:   article > 正文

字节小程序交易组件使用指南_ext://microapp-trade-plugin/order-confirm

ext://microapp-trade-plugin/order-confirm

前言 

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

交易系统前端模板在页面维度上提供了提单页模板、退款页模板等,模板的入口是一个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. <!--
  3. 使用交易模板 1.0 生成的老订单,申请退款需要 refudnrefund-total-amount
  4. 若无需传入 extra 参数,则无需 bind:applyrefund 方法
  5. -->
  6. <pay-button
  7. order-status="{{1}}"
  8. order-id="xxx"
  9. bind:refund="onRefund"
  10. bind:applyrefund="applyRefund"
  11. refund-total-amount="{{20000}}"
  12. />
  • 退款中:
<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. <!-- 商品库商品 -->
  2. <pay-button
  3. mode="{{2}}"
  4. goods-type="{{1}}"
  5. goods-id="xxxx"
  6. bind:getgoodsinfo="getGoodsInfo"
  7. bind:placeorder="userLogin"
  8. bind:pay="onPay"
  9. />
  10. <!-- 非商品库商品 -->
  11. <pay-button
  12. mode="{{2}}"
  13. goods-type="{{2}}"
  14. goods-id="xxxx"
  15. bind:getgoodsinfo="getGoodsInfo"
  16. bind:placeorder="userLogin"
  17. bind:pay="onPay"
  18. />

三、测试代码示例

(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://即可

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/312248
推荐阅读
相关标签
  

闽ICP备14008679号