抖音开放平台Logo
开发者文档
“/”唤起搜索
控制台

plugin.createOrder

收藏
我的收藏
基础库 2.51.0 开始支持本方法,低版本需做兼容处理,这是一个异步方法。
提供开发者交易系统中预下单能力,开发者通过调用该方法生成订单后,会调起小程序收银台进行支付。

使用限制

在使用生服插件中的组件和 API 前,需要对行业插件有一个基本了解,可以参考文档:行业插件介绍,然后按照以下步骤及顺序使用插件中的能力:
1.参考 申请行业插件 完成插件的申请,注意只有小程序拥有生服类目资质才可见申请入口;
2.参考 使用行业插件 进行能力的调用;
行业插件在抖音 App 版本 31.8.0 及以上,小程序基础库版本 3.4x.0.0 及以上时支持。

语法

plugin.createOrder(options);

参数说明

options 为 object 类型,属性如下:
    针对旧版本开发者,保留支持 goodsList 下单(此场景 skuList 必须为空),新接入开发者推荐使用 skuList 下单(此场景 goodsList 必须为空)
    goodsList 和 skuList 不能同时为空;
    全融合版(非预约品)需使用goodsList下单,全融合版(预约品)需使用skuList下单;
属性名
类型
默认值
必填
说明
最低支持版本
goodsList
Goods[]
Goods说明见下文
下单商品
注意:目前仅支持单 SPU 商品下单
2.51.0.0
skuList
Sku[]
Sku说明见下文
下单商品信息(新)
(skuList目前只支持单个sku)
2.67.0.0
bookInfo
BookInfo
BookInfo说明见下文
预约信息
2.67.0.0
payment
Payment
Payment说明见下文
订单支付信息
2.51.0.0
contactInfo
ContactInfo
ContactInfo说明见下文
联系信息
2.51.0.0
storeInfo
StoreInfo
StoreInfo说明见下文
商店信息
2.51.0.0
note
string
订单备注
2.51.0.0
callbackData
Object
透传至服务端的信息,会被JSON.stringify处理,长度不能大于2048字节( 字节与字符串说明见下方 Bug & Tip
2.51.0.0
tradeOption
Object
透传至服务端的信息,会被JSON.stringify处理,长度不能大于2048字节( 字节与字符串说明见下方 Bug & Tip
2.74.0.0
callbackUrl
string
开发者自定义的预下单回调 URL(仅账号融合支持,完全融合不生效)
2.65.0.0
discountInfo
DiscountInfo
DiscountInfo说明见下文
折扣营销算价信息
2.52.0.3
discountId
string
折扣营销算价信息 ID(若同时存在 discountInfo 和 discountId 时,优先使用 discountId 对应的营销算价信息)
    注意:使用平台营销时,该字段不可用。
2.52.0.3
poiId
string
门店id,取值优先级:poiId > 货架/直播间的poiId > deliveryInfo里的poiId
businessLine
number
1
业务线
    1:团购
    3:外卖( 该业务线使用前,注意下方 Bug & Tip
2.52.0.3
deliveryInfo
DeliveryInfo
DeliveryInfo
说明在下文
否(businessLine = 3 时,必填)
配送信息
2.51.0.0
addressInfo
AddressInfo
AddressInfo
说明见下文
否(businessLine = 3 ,必填)
地址信息
2.51.0.0
success
Function
接口调用成功的回调函数
fail
Function
接口调用失败的回调函数
complete
Function
接口调用结束的回调函数(调用成功、失败都会执行)

Goods

属性名
类型
默认值
必填
说明
最低支持版本
quantity
number
购买数量
2.51.0.0
price
number
商品价格
2.51.0.0
goodsName
string
商品名称
字段长度为 1~256 字节( 字节与字符串说明见下方 Bug & Tip
2.51.0.0
goodsPhoto
string
商品图片
2.51.0.0
goodsId
string
商品ID
2.51.0.0
goodsType
number
商品类型
    1:商品库商品
    2:非商品库商品
2.51.0.0
discountAmount
number
折扣金额
2.67.0.0
goodsPage
object
商详页路径
2.67.0.0
goodsLabels
string[]
商品标签
2.51.0.0
dateRule
string
使用规则
2.51.0.0
goodsBookInfo
GoodsBookInfo
预约信息
    商品类型为预售券、日历房、门票需要传预约信息
2.57.4.0
merchantId
string
商户id(不同goods需指定同一个merchantId)
2.51.0.0

goodsPage

属性名
类型
默认值
必填
说明
最低支持版本
path
string
--
商品详情页跳转路径,没有前导的“/”,长度 <= 512byte
示例:pages/xxxindexxx
2.57.4.0
params
string
--
商品详情页路径参数,自定义的 json 结构,序列化成字符串存入该字段,平台不限制,但是写入的内容需要能够保证生成访问订单详情的 schema 能正确跳转到小程序内部的订单详情页,长度 <= 512byte
示例:{\"id\":\"xxxxxx\"}
2.57.4.0

GoodsBookInfo

属性名
类型
默认值
必填
说明
最低支持版本
bookType
number
--
预约类型:
    1:不需要预约
    2:在线预约
2.57.4.0
cancelPolicy
number
--
取消政策:
    1:预约后不可取消
    2:预约后可取消
    3:需提前 X 小时取消(最低支持版本 2.69.0.5)
需要预约,此字段必传;不需要预约,此字段不填
2.57.4.0
advancedCancelHours
number
--
提前取消的小时限制(距离预约结束时间),cancelPolicy 为 3 时有效
2.69.0.5

Sku

    sku 为商品库商品,对应的 goods 必须是商品库
    sku 为商品库商品,goodsInfo 可以不传
    sku 为非商品库商品,需要传 goodsInfo
    当商品为预约品(product_type=22)时,传入的price允许大于商品实付价(需保证total_amount=price*quantity-discount_amount),且不能超过3倍(仅即时预约场景下支持)
属性名
类型
默认值
必填
说明
最低支持版本
quantity
number
购买数量
2.67.0.0
skuId
string
sku商品id
2.67.0.0
skuType
number
sku商品类型
    1:商品库商品
    2:非商品库商品(融合预约品走加价时,固定传2)
2.67.0.0
price
number
价格(融合预约链路,该参数必填)
2.67.0.0
discountAmount
number
折扣金额
2.67.0.0
goodsInfo
GoodsInfo
GoodsInfo说明见下文
商品信息
2.67.0.0
extraInfo
ExtraInfo
ExtraInfo说明见下文
sku 额外商品属性
2.67.0.0

GoodsInfo

属性名
类型
默认值
必填
说明
最低支持版本
goodsName
string
商品名称字段长度为 1~256 字节
2.67.0.0
goodsPhoto
string
商品图片
2.67.0.0
goodsId
string
商品ID
2.67.0.0
goodsType
number
商品类型:
    1:商品库商品
    2:非商品库商品
2.67.0.0
goodsSubTitle
string
商品副标题
2.67.0.0
goodsPage
object
商详页路径
2.67.0.0
goodsLabels
string[]
商品标签
2.67.0.0
dateRule
string
使用规则
2.67.0.0
goodsBookInfo
object
预约信息
2.67.0.0
merchantId
string
商户id(不同goods需指定同一个merchantId)

ExtraInfo

属性名
类型
默认值
必填
说明
最低支持版本
ticketName
string
否(非POI商品库的门票类SKU必传)
门票票种
2.67.0.0
date
string
否(非POI商品库的门票类SKU必传)
日期,示例 2022-01-10,现在仅支持天
2.67.0.0
extSkuRule
string
三方自定义SKU规则,数据拓展点透传三方不落地

Payment

属性名
类型
默认值
必填
说明
最低支持版本
totalAmount
number
订单总价
2.51.0.0
totalDiscountAmount
number
订单总折扣
2.52.0.3
feeDetailsList
FeeDetailsInfo[]
FeeDetailsInfo 说明见下文
否(存在额外费用比如打包费、配送费、基建费、燃油费、税费时,必传)
费用明细列表
(航司或外卖场景可传)
2.51.0.0
limitPay
string[]
可选值
    alipay
    wx
    dy
最多只能传入2种,否则会提示无可用支付方式
2.51.0.0

FeeDetailsInfo

属性名
类型
默认值
必填
说明
最低支持版本
feeType
number
费用类型
    1: 配送费
    2: 包装费
    18:基建费
    19:燃油费
    20:税费
2.51.0.0
feeAmount
number
费用总金额
2.51.0.0
feeDiscountAmount
number
0
费用总优惠金额
2.51.0.0
feeDesc
string
费用描述
2.51.0.0

ContactInfo

属性名
类型
默认值
必填
说明
最低支持版本
phoneNumber
string
(businessLine = 3 且 addressId 为空时,必填)
联系人电话
2.51.0.0
contactName
string
(businessLine = 3 且 addressId 为空时,必填)
联系人姓名
2.51.0.0
gender
number
(businessLine = 3 且 addressId 为空时,必填)
联系人性别
    0: 未知
    1: 男
    2: 女
2.51.0.0

StoreInfo

属性名
类型
默认值
必填
说明
最低支持版本
storeName
string
商店名称
2.51.0.0
storeIcon
string
商店头像
2.51.0.0

DiscountInfo

属性名
类型
默认值
必填
说明
最低支持版本
type
number
折扣算价类型
    1 : 商户单维度,item 单价格我们按分摊比例计算
    2 : item 单维度,item 单价格由开发者计算
2.52.0.3
detail
Detail
折扣详情
2.52.0.3
useMergedMarketingApi
boolean
false
是否使用了营销算价二合一
2.74.0.0

Detail

属性名
类型
默认值
必填
说明
最低支持版本
orderDiscount
OrderDiscountDetail
订单算价结果
2.52.0.3
goodsDiscount
GoodsDiscount[]
商品算价结果
2.52.0.3
itemDiscount
ItemDiscount[]
单商品算价信息
2.52.0.3

OrderDiscount

属性名
类型
默认值
必填
说明
最低支持版本
orderTotalDiscountAmount
number
订单维度总优惠金额,单位: 分
2.52.0.3
goodsTotalDiscountAmount
number
商品(SKU)维度总优惠金额,单位: 分
2.52.0.3
marketingInfo
MarketingInfo[]
营销信息明细
2.52.0.3

MarketingInfo

属性名
类型
默认值
必填
说明
最低支持版本
id
string
营销 id
2.52.0.3
type
number
营销类型
    1: 用户身份
    2: 优惠券
    3: 积分
    4: 活动
2.52.0.3
discountAmount
number
该营销策略优惠金额,单位: 分
2.52.0.3
title
string
营销名称
2.52.0.3
note
string
营销备注(小于128字节)
无需营销备注时需传空字符串
2.52.0.3
subtype
string
营销子类型
2.52.0.3
value
number
不同 type 含义不同
2.52.0.3
discountRange
string
营销适用维度:
    1:订单维度
    2:商品维度
2.52.0.3
code
string
优惠券编码
2.74.0.0
kind
number
营销类别
    1:商家
    2:平台
creatorType
number
创建人类型
    1:抖音平台
    2:抖音来客—商家
    3:小程序商家
marketingExtend
object
透传字段

GoodsDiscount

属性名
类型
默认值
必填
说明
最低支持版本
goodsId
string
商品 ID
2.52.0.3
skuId
string
skuId,接入sku下单并使用营销时必填
2.74.0.0
quantity
number
购买数量
2.52.0.3
totalAmount
number
商品总价,单位:分
2.52.0.3
totalDiscountAmount
number
商品总折扣
2.52.0.3
marketingInfo
MarketingInfo[]
营销信息明细
2.52.0.3

ItemDiscount

属性名
类型
默认值
必填
说明
最低支持版本
goodsId
string
商品ID
2.52.0.3
skuId
string
skuId,接入sku下单并使用营销时必填
2.74.0.0
totalAmount
number
商品总价,用于校验原价是否一致
2.52.0.3
totalDiscountAmount
number
商品总折扣
2.52.0.3
marketingInfo
MarketingInfo[]
营销信息明细
2.52.0.3

BookInfo

属性名
类型
默认值
必填
说明
最低支持版本
itemBookInfoList
ItemBookInfo[]
--
每个 item 的预约信息,详见 ItemBookInfo
2.67.0.0

ItemBookInfo

属性名
类型
默认值
必填
说明
最低支持版本
poiId
string
--
预约门店的poiId
2.67.0.0
shopName
string
--
预约门店名称
2.67.0.0
outShopId
string
--
预约门店的外部店铺id
2.67.0.0
goodsId
string
--
商品 id
注意:在 2.77.0.0 版本之前此字段为必填,开发者可使用tt.canIUse('createOrder.object.bookInfo.itemBookInfoList.skuId')进行降级处理
2.67.0.0
skuId
string
--
Sku 商品id
2.77.0.0
bookStartTime
number
--
预定开始时间(ms),13位毫秒时间戳
2.67.0.0
bookEndTime
number
--
预定结束时间(ms),13位毫秒时间戳,注意:需满足当前时间< bookStartTime < bookEndTime,且bookEndTime必须在180天之内
2.67.0.0
reservationInfoList
ReservationInfo[]
--
留资信息
2.67.0.0

ReservationInfo

属性名
类型
默认值
必填
说明
最低支持版本
name
string
--
姓名
2.67.0.0
phoneNumber
string
--
电话号码
2.67.0.0
identificationNumber
string
--
身份证号码
2.67.0.0

DeliveryInfo

属性名
类型
默认值
必填
说明
最低支持版本
poiId
string
--
门店的poiId
2.51.0.0
bookType
number
--
订单类型
1: 实时单
2: 预约单
2.51.0.0
deliveryType
number
--
配送类型
1: 同城配送
2: 到店自提
2.51.0.0
receiptInfo
ReceiptInfo
ReceiptInfo 说明见下文
--
收货信息
2.51.0.0
bookInfo
DeliveryBookInfo
DeliveryBookInfo说明见下文
--
否(bookType = 2时,必填)
预约信息
2.51.0.0
selfPickInfo
SelfPickInfo
SelfPickInfo说明见下文
--
否(deliveryType = 2 时,必填)
自提信息
2.51.0.0

ReceiptInfo

属性名
类型
默认值
必填
说明
最低支持版本
startTime
number
--
预计收货开始时间(ms),13位毫秒时间戳
2.51.0.0
endTime
number
--
预计收货结束时间(ms),13位毫秒时间戳
2.51.0.0

DeliveryBookInfo

属性名
类型
默认值
必填
说明
最低支持版本
startTime
number
--
预定开始时间(ms),13位毫秒时间戳
2.51.0.0
endTime
number
--
预定结束时间(ms),13位毫秒时间戳
2.51.0.0

SelfPickInfo

属性名
类型
默认值
必填
说明
最低支持版本
startTime
number
--
预计自提开始时间(ms),13位毫秒时间戳
2.51.0.0
endTime
number
--
预计自提结束时间(ms),13位毫秒时间戳
2.51.0.0
shopInfo
PickUpShopInfo
PickUpShopInfo 说明见下文
--
自提店铺信息
2.51.0.0

PickUpShopInfo

属性名
类型
默认值
必填
说明
最低支持版本
shopId
string
--
自提店铺id
2.51.0.0
shopName
string
--
自提店铺名称
2.51.0.0
address
string
--
自提店铺地址
2.51.0.0
phoneNumber
string
--
自提店铺电话
2.51.0.0

AddressInfo

属性名
类型
默认值
必填
说明
最低支持版本
addressId
string
--
抖音用户地址id
2.51.0.0
locationInfo
LocationInfo
LocationInfo说明见下文
--
否(addressId 为空时,必填)
地理位置信息
2.51.0.0
doorNumber
string
--
否(addressId 为空时,必填)
门牌号
2.51.0.0

LocationInfo

属性名
类型
默认值
必填
说明
最低支持版本
provinceCode
string
--
省编码
2.51.0.0
provinceName
string
--
省名称
2.51.0.0
cityCode
string
--
市编码
2.51.0.0
cityName
string
--
市名称
2.51.0.0
districtCode
string
--
区编码
2.51.0.0
districtName
string
--
区名称
2.51.0.0
townCode
string
--
街道/镇编码
2.51.0.0
townName
string
--
街道/镇名称
2.51.0.0
locationAddress
string
--
具体位置地址
2.51.0.0
locationName
string
--
poi 名称
2.51.0.0

回调成功

object 类型,属性如下:
属性名
类型
说明
最低支持版本
orderId
string
内部商户订单号
2.51.0.0
outOrderNo
string
开发者订单号
2.51.0.0

回调失败

object 类型,属性如下:
属性名
类型
说明
最低支持版本
errNo
string
错误码,对应信息可查看 errNo 说明
2.51.0.0
errMsg
string
错误信息提示
2.51.0.0
errLogId
string
当预下单失败时会提供该数据,可供服务端排查问题
2.51.0.0
orderId
string
预下单成功,但用户支付失败
2.51.0.0
outOrderNo
string
预下单成功,但用户支付失败
2.51.0.0

代码示例

不包含营销模块

const plugin = tt.requirePlugin('tta5a3d31e3aecfb9b11'); plugin.createOrder({ goodsList: [ { quantity: 10, // 购买数量 必填 price: 1, // 商品价格 必填 goodsName: "测试商品", // 商品名称 必填 goodsPhoto: "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic.ibaotu.com%2Fgif%2F19%2F48%2F47%2F76Z888piCd6W.gif%21fwpaa50%2Ffw%2F700&refer=http%3A%2F%2Fpic.ibaotu.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1644654365&t=5fc9b5fdad0a16264a9a9c09c14b3af9", // 商品图片链接 必填 goodsId: "123", // 商品ID 必填 goodsType: 2, // 商品类型 必填 goodsLabels: ["不可退"], // 商品标签 非必填 dateRule: "", // 使用规则 非必填 }, ], payment: { totalAmount: 10, // 订单总价 必填 }, contactInfo: { phoneNumber: "12345678901", // 手机号 非必传 contactName: "test name", // 姓名 非必传 }, note: "for future", // 备注 非必传 storeInfo: { storeName: "test store", // 商店名称 非必传 storeIcon: "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic.ibaotu.com%2Fgif%2F19%2F48%2F47%2F76Z888piCd6W.gif%21fwpaa50%2Ffw%2F700&refer=http%3A%2F%2Fpic.ibaotu.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1644654365&t=5fc9b5fdad0a16264a9a9c09c14b3af9", // 商店头像 非必填 }, callbackData: { test: 999999 }, // 透传数据,开发者自定义字段 非必传 tradeOption:{ life_trade_flag :0 // 0:非融合链路(默认值) 1:走融合链路(标准融合/完全融合/预约品下单必传) order_relation_info: { related_order_id: 99999, //加价关联的首单item_order_id relation _type: multi_buy_as_one //固定值 }//融合预约品走加价时必传 }, // 透传数据,开发者自定义字段 非必传 success: (res) => { const { orderId, outOrderNo } = res; console.log("success res", res); console.log("orderId", orderId, "outOrderNo", outOrderNo); this.setData({ orderId, outOrderNo }); }, fail: (res) => { const { orderId, outOrderNo, errNo, errMsg, errLogId } = res; if (errLogId) { console.log("预下单失败", errNo, errMsg, errLogId); } if (orderId || outOrderNo) { console.log("支付失败", errNo, errMsg, orderId, outOrderNo); } console.log(errNo, errMsg); }, });

使用 skuList 下单门票类商品示例(商品库 spu & 非商品库 sku)

const plugin = tt.requirePlugin('tta5a3d31e3aecfb9b11'); plugin.createOrder({ skuList: [ { skuId: "xxx", // sku 商品Id 必传 skuType: 2, // sku 商品类型 必传 quantity: 10, // 数量 必传 price: 1, // 价格 非商品库 sku 商品必传 goodsInfo: { goodsName: "测试商品", // 商品名称 必填 goodsPhoto: "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic.ibaotu.com%2Fgif%2F19%2F48%2F47%2F76Z888piCd6W.gif%21fwpaa50%2Ffw%2F700&refer=http%3A%2F%2Fpic.ibaotu.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1644654365&t=5fc9b5fdad0a16264a9a9c09c14b3af9", // 商品图片链接 必填 goodsId: "123", // 商品ID 必填 goodsType: 1, // 商品类型 必填 goodsLabels: ["不可退"], // 商品标签 非必填 dateRule: "", // 使用规则 非必填 }, extraInfo: { ticketName: "child", // 票种,非商品库门票类 sku 必传 date: "2022-07-26", // 日期,非商品库门票类 sku 必传 }, }, ], bookInfo: { itemBookInfoList: [ { poiId: "12313131331", // 预约门店的 poiId,必填 shopName: "测试名称", // 预约店铺名称,必填 outShopId: "11121234434", // 预约门店的外部店铺id,必填 goodsId: "123", // 商品id,必填 bookStartTime: new Date(2022, 7, 25).getTime(), // 预定开始时间(ms),13位毫秒时间戳,必填 bookEndTime: new Date(2022, 7, 26).getTime(), //预定结束时间(ms),13位毫秒时间戳,必填 reservationInfoList: [ { // 留资信息 非必填 name: "xxx", // 姓名 非必填 phoneNumber: "xxx", // 电话 非必填 identificationNumber: "xxxxx", // 身份证号 非必填 }, ], }, ], }, payment: { totalAmount: 10, // 订单总价 必填 }, contactInfo: { phoneNumber: "12345678901", // 手机号 非必传 contactName: "test name", // 姓名 非必传 }, note: "for future", // 备注 非必传 storeInfo: { storeName: "test store", // 商店名称 非必传 storeIcon: "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic.ibaotu.com%2Fgif%2F19%2F48%2F47%2F76Z888piCd6W.gif%21fwpaa50%2Ffw%2F700&refer=http%3A%2F%2Fpic.ibaotu.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1644654365&t=5fc9b5fdad0a16264a9a9c09c14b3af9", // 商店头像 非必填 }, callbackData: { test: 999999 }, // 透传数据,开发者自定义字段 非必传 tradeOption:{ life_trade_flag :0 // 0:非融合链路(默认值) 1:走融合链路(标准融合/完全融合/预约品下单必传) order_relation_info: { related_order_id: 99999, //加价关联的首单item_order_id relation _type: multi_buy_as_one //固定值 }//融合预约品走加价时必传 }, // 透传数据,开发者自定义字段 非必传 success: (res) => { const { orderId, outOrderNo } = res; console.log("success res", res); console.log("orderId", orderId, "outOrderNo", outOrderNo); this.setData({ orderId, outOrderNo }); }, fail: (res) => { const { orderId, outOrderNo, errNo, errMsg, errLogId } = res; if (errLogId) { console.log("预下单失败", errNo, errMsg, errLogId); } if (orderId || outOrderNo) { console.log("支付失败", errNo, errMsg, orderId, outOrderNo); } console.log(errNo, errMsg); }, });

使用 skuList 下单团购商品示例

const plugin = tt.requirePlugin('tta5a3d31e3aecfb9b11'); plugin.createOrder({ skuList: [ { skuId: "123", // sku 商品Id 必传 skuType: 1, // sku 商品类型 必传 quantity: 10, // 数量 必传 price: 1, // 价格 非商品库 sku 商品必传 goodsInfo: { goodsName: "测试商品", // 商品名称 必填 goodsPhoto: "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic.ibaotu.com%2Fgif%2F19%2F48%2F47%2F76Z888piCd6W.gif%21fwpaa50%2Ffw%2F700&refer=http%3A%2F%2Fpic.ibaotu.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1644654365&t=5fc9b5fdad0a16264a9a9c09c14b3af9", // 商品图片链接 必填 goodsId: "123", // 商品ID 必填 goodsType: 1, // 商品类型 必填 goodsLabels: ["不可退"], // 商品标签 非必填 dateRule: "", // 使用规则 非必填 }, }, { skuId: "456", // sku 商品Id 必传 skuType: 1, // sku 商品类型 必传 quantity: 2, // 数量 必传 price: 1, // 价格 非商品库 sku 商品必传 goodsInfo: { goodsName: "测试商品", // 商品名称 必填 goodsPhoto: "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic.ibaotu.com%2Fgif%2F19%2F48%2F47%2F76Z888piCd6W.gif%21fwpaa50%2Ffw%2F700&refer=http%3A%2F%2Fpic.ibaotu.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1644654365&t=5fc9b5fdad0a16264a9a9c09c14b3af9", // 商品图片链接 必填 goodsId: "123", // 商品ID 必填 goodsType: 1, // 商品类型 必填 goodsLabels: ["不可退"], // 商品标签 非必填 dateRule: "", // 使用规则 非必填 }, }, ], payment: { totalAmount: 10, // 订单总价 必填 }, contactInfo: { phoneNumber: "12345678901", // 手机号 非必传 contactName: "test name", // 姓名 非必传 }, note: "for future", // 备注 非必传 storeInfo: { storeName: "test store", // 商店名称 非必传 storeIcon: "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic.ibaotu.com%2Fgif%2F19%2F48%2F47%2F76Z888piCd6W.gif%21fwpaa50%2Ffw%2F700&refer=http%3A%2F%2Fpic.ibaotu.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1644654365&t=5fc9b5fdad0a16264a9a9c09c14b3af9", // 商店头像 非必填 }, callbackData: { test: 999999 }, // 透传数据,开发者自定义字段 非必传 tradeOption:{ life_trade_flag :0 // 0:非融合链路(默认值) 1:走融合链路(标准融合/完全融合/预约品下单必传) order_relation_info: { related_order_id: 99999, //加价关联的首单item_order_id relation _type: multi_buy_as_one //固定值 }//融合预约品走加价时必传 }, // 透传数据,开发者自定义字段 非必传 success: (res) => { const { orderId, outOrderNo } = res; console.log("success res", res); console.log("orderId", orderId, "outOrderNo", outOrderNo); this.setData({ orderId, outOrderNo }); }, fail: (res) => { const { orderId, outOrderNo, errNo, errMsg, errLogId } = res; if (errLogId) { console.log("预下单失败", errNo, errMsg, errLogId); } if (orderId || outOrderNo) { console.log("支付失败", errNo, errMsg, orderId, outOrderNo); } console.log(errNo, errMsg); }, });

使用 skuList 下单预约商品示例(即时预约)

const plugin = tt.requirePlugin('tta5a3d31e3aecfb9b11'); plugin.createOrder({ skuList: [ { skuId: "xxx", // sku 商品Id 必传 skuType: 1, // sku 商品类型 必传 quantity: 10, // 数量 必传 price: 1, // 价格 预约 商品必传 goodsInfo: { goodsName: "预约商品", // 商品名称 必填 goodsPhoto: "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic.ibaotu.com%2Fgif%2F19%2F48%2F47%2F76Z888piCd6W.gif%21fwpaa50%2Ffw%2F700&refer=http%3A%2F%2Fpic.ibaotu.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1644654365&t=5fc9b5fdad0a16264a9a9c09c14b3af9", // 商品图片链接 必填 goodsId: "123", // 商品ID 必填 goodsType: 1, // 商品类型 必填 goodsLabels: ["不可退"], // 商品标签 非必填 dateRule: "", // 使用规则 非必填 }, extraInfo: { ticketName: "child", // 票种,非商品库门票类 sku 必传 date: "2022-07-26", // 日期,非商品库门票类 sku 必传 }, }, ], bookInfo: { itemBookInfoList: [ { poiId: "12313131331", // 预约门店的 poiId,必填 shopName: "测试名称", // 预约店铺名称,必填 outShopId: "11121234434", // 预约门店的外部店铺id,必填 goodsId: "123", // 商品id,必填 bookStartTime: new Date(2022, 7, 25).getTime(), // 预定开始时间(ms),13位毫秒时间戳,必填 bookEndTime: new Date(2022, 7, 26).getTime(), //预定结束时间(ms),13位毫秒时间戳,必填 }, ], }, payment: { totalAmount: 10, // 订单总价 必填 }, contactInfo: { phoneNumber: "12345678901", // 手机号 非必传 contactName: "test name", // 姓名 非必传 }, note: "for future", // 备注 非必传 storeInfo: { storeName: "test store", // 商店名称 非必传 storeIcon: "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic.ibaotu.com%2Fgif%2F19%2F48%2F47%2F76Z888piCd6W.gif%21fwpaa50%2Ffw%2F700&refer=http%3A%2F%2Fpic.ibaotu.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1644654365&t=5fc9b5fdad0a16264a9a9c09c14b3af9", // 商店头像 非必填 }, callbackData: { test: 999999 }, // 透传数据,开发者自定义字段 非必传 tradeOption:{ life_trade_flag :0 // 0:非融合链路(默认值) 1:走融合链路(标准融合/完全融合/预约品下单必传) }, // 透传数据,开发者自定义字段 非必传 success: (res) => { const { orderId, outOrderNo } = res; console.log("success res", res); console.log("orderId", orderId, "outOrderNo", outOrderNo); this.setData({ orderId, outOrderNo }); }, fail: (res) => { const { orderId, outOrderNo, errNo, errMsg, errLogId } = res; if (errLogId) { console.log("预下单失败", errNo, errMsg, errLogId); } if (orderId || outOrderNo) { console.log("支付失败", errNo, errMsg, orderId, outOrderNo); } console.log(errNo, errMsg); }, });

使用 skuList创建预约品加价单

const plugin = tt.requirePlugin('tta5a3d31e3aecfb9b11'); plugin.createOrder({ skuList: [ { skuId: "xxx", // sku 商品Id 必传 skuType: 2, // sku 商品类型 必传 固定传2 quantity: 10, // 数量 必传 price: 1, // 价格 预约 商品必传 goodsInfo: { goodsName: "额外加价", // 商品名称 必填 goodsPhoto: "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic.ibaotu.com%2Fgif%2F19%2F48%2F47%2F76Z888piCd6W.gif%21fwpaa50%2Ffw%2F700&refer=http%3A%2F%2Fpic.ibaotu.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1644654365&t=5fc9b5fdad0a16264a9a9c09c14b3af9", // 商品图片链接 必填 goodsId: "123", // 商品ID 必填 goodsType: 2, // 商品类型 必填 固定传2 goodsLabels: ["不可退"], // 商品标签 非必填 dateRule: "", // 使用规则 非必填 }, extraInfo: { ticketName: "child", // 票种,非商品库门票类 sku 必传 date: "2022-07-26", // 日期,非商品库门票类 sku 必传 }, }, ], payment: { totalAmount: 10, // 订单总价 必填 }, contactInfo: { phoneNumber: "12345678901", // 手机号 非必传 contactName: "test name", // 姓名 非必传 }, note: "for future", // 备注 非必传 storeInfo: { storeName: "test store", // 商店名称 非必传 storeIcon: "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic.ibaotu.com%2Fgif%2F19%2F48%2F47%2F76Z888piCd6W.gif%21fwpaa50%2Ffw%2F700&refer=http%3A%2F%2Fpic.ibaotu.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1644654365&t=5fc9b5fdad0a16264a9a9c09c14b3af9", // 商店头像 非必填 }, callbackData: { test: 999999 }, // 透传数据,开发者自定义字段 非必传 tradeOption:{ life_trade_flag :0 // 0:非融合链路(默认值) 1:走融合链路(标准融合/完全融合/预约品下单必传) order_relation_info: { related_order_id: 99999, //加价关联的首单item_order_id relation _type: multi_buy_as_one //固定值 }//融合预约品走加价时必传 }, // 透传数据,开发者自定义字段 非必传 success: (res) => { const { orderId, outOrderNo } = res; console.log("success res", res); console.log("orderId", orderId, "outOrderNo", outOrderNo); this.setData({ orderId, outOrderNo }); }, fail: (res) => { const { orderId, outOrderNo, errNo, errMsg, errLogId } = res; if (errLogId) { console.log("预下单失败", errNo, errMsg, errLogId); } if (orderId || outOrderNo) { console.log("支付失败", errNo, errMsg, orderId, outOrderNo); } console.log(errNo, errMsg); }, });

包含营销模块

传递 discountInfo

const plugin = tt.requirePlugin('tta5a3d31e3aecfb9b11'); plugin.createOrder({ goodsList: [ { quantity: 1, // 购买数量 必填 price: 40000, // 商品价格 必填 discountAmount: 10000, goodsName: "测试商品", // 商品名称 必填 goodsPhoto: "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic.ibaotu.com%2Fgif%2F19%2F48%2F47%2F76Z888piCd6W.gif%21fwpaa50%2Ffw%2F700&refer=http%3A%2F%2Fpic.ibaotu.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1644654365&t=5fc9b5fdad0a16264a9a9c09c14b3af9", // 商品图片链接 必填 goodsId: "unpoi_12345", // 商品ID 必填 goodsType: 2, // 商品类型 必填 goodsLabels: ["随时退", "免预约", "过期退"], // 商品标签 非必填 dateRule: "", // 使用规则 非必填, goodsPage: { path:"", params: {}, }, }, ], payment: { totalAmount: 40000, // 订单总价 必填 totalDiscountAmount: 10000, }, contactInfo: { phoneNumber: "12345678901", // 手机号 非必传 contactName: "test name", // 姓名 非必传 }, note: "for future", // 备注 非必传 merchantId: "", // 商户 ID 非必传 storeInfo: { storeName: "test store", // 商店名称 非必传 storeIcon: "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic.ibaotu.com%2Fgif%2F19%2F48%2F47%2F76Z888piCd6W.gif%21fwpaa50%2Ffw%2F700&refer=http%3A%2F%2Fpic.ibaotu.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1644654365&t=5fc9b5fdad0a16264a9a9c09c14b3af9", // 商店头像 非必填 }, callbackData: { test: 999999 }, // 透传数据,开发者自定义字段 非必传 tradeOption:{ life_trade_flag :0 // 0:非融合链路(默认值) 1:走融合链路(标准融合/完全融合/预约品下单必传) order_relation_info: { related_order_id: 99999, //加价关联的首单item_order_id, relation _type: multi_buy_as_one //固定值 }//融合预约品走加价时必传 }, // 透传数据,开发者自定义字段 非必传 discountInfo: { type: 2, detail: { orderDiscount: { orderTotalDiscountAmount: 0, goodsTotalDiscountAmount: 10000, marketingInfo: [ { discountAmount: 3999, discountRange: 2, id: "activity_id_39_99_yuan_MOCK_1651049756913", note: "活动优惠", subtype: "商家侧子营销类型默认值", title: "[活动] 满 90.00 减 39.99 元", type: 4, }, { discountAmount: 4000, discountRange: 2, id: "coupon_id_40_yuan_MOCK_1651049756913", note: "用券优惠", subtype: "商家侧子营销类型默认值", title: "[券] 减 40.00 元", type: 2, }, { discountAmount: 1, discountRange: 2, id: "membership_id_1_fen_MOCK_1651049756913", note: "会员优惠", subtype: "商家侧子营销类型默认值", title: "[会员] 本店第 4 种会员类型 减 0.01 元", type: 1, }, { discountAmount: 2000, discountRange: 2, id: "score_id_20_yuan_MOCK_1651049756913", note: "积分优惠", subtype: "商家侧子营销类型默认值", title: "[积分] 本店第 3 种积分类型 减 20.00 元", type: 3, }, ], }, goodsDiscount: [ { goodsId: "unpoi_12345", quantity: 1, totalAmount: 40000, totalDiscountAmount: 10000, marketingInfo: [ { discountAmount: 2000, discountRange: 2, id: "score_id_20_yuan_MOCK_1651049756913", note: "积分优惠", subtype: "商家侧子营销类型默认值", title: "[积分] 本店第 3 种积分类型 减 20.00 元", type: 3, }, { discountAmount: 4000, discountRange: 2, id: "coupon_id_40_yuan_MOCK_1651049756913", note: "用券优惠", subtype: "商家侧子营销类型默认值", title: "[券] 减 40.00 元", type: 2, }, { discountAmount: 3999, discountRange: 2, id: "activity_id_39_99_yuan_MOCK_1651049756913", note: "活动优惠", subtype: "商家侧子营销类型默认值", title: "[活动] 满 90.00 减 39.99 元", type: 4, }, { discountAmount: 1, discountRange: 2, id: "membership_id_1_fen_MOCK_1651049756913", note: "会员优惠", subtype: "商家侧子营销类型默认值", title: "[会员] 本店第 4 种会员类型 减 0.01 元", type: 1, }, ], }, ], itemDiscount: [ { goodsId: "unpoi_12345", totalAmount: 40000, totalDiscountAmount: 10000, marketingInfo: [ { discountAmount: 2000, discountRange: 2, id: "score_id_20_yuan_MOCK_1651049756913", note: "积分优惠", subtype: "商家侧子营销类型默认值", title: "[积分] 本店第 3 种积分类型 减 20.00 元", type: 3, }, { discountAmount: 4000, discountRange: 2, id: "coupon_id_40_yuan_MOCK_1651049756913", note: "用券优惠", subtype: "商家侧子营销类型默认值", title: "[券] 减 40.00 元", type: 2, }, { discountAmount: 3999, discountRange: 2, id: "activity_id_39_99_yuan_MOCK_1651049756913", note: "活动优惠", subtype: "商家侧子营销类型默认值", title: "[活动] 满 90.00 减 39.99 元", type: 4, }, { discountAmount: 1, discountRange: 2, id: "membership_id_1_fen_MOCK_1651049756913", note: "会员优惠", subtype: "商家侧子营销类型默认值", title: "[会员] 本店第 4 种会员类型 减 0.01 元", type: 1, }, ], }, ], }, }, success: (res) => { const { orderId, outOrderNo } = res; console.log("success res", res); console.log("orderId", orderId, "outOrderNo", outOrderNo); this.setData({ orderId, outOrderNo }); }, fail: (res) => { const { orderId, outOrderNo, errNo, errMsg, errLogId } = res; if (errLogId) { console.log("预下单失败", errNo, errMsg, errLogId); } if (orderId || outOrderNo) { console.log("支付失败", errNo, errMsg, orderId, outOrderNo); } }, });

传递 discountId

const plugin = tt.requirePlugin('tta5a3d31e3aecfb9b11'); plugin.createOrder({ goodsList: [ { quantity: 1, // 购买数量 必填 price: 40000, // 商品价格 必填 discountAmount: 10000, goodsName: "测试商品", // 商品名称 必填 goodsPhoto: "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic.ibaotu.com%2Fgif%2F19%2F48%2F47%2F76Z888piCd6W.gif%21fwpaa50%2Ffw%2F700&refer=http%3A%2F%2Fpic.ibaotu.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1644654365&t=5fc9b5fdad0a16264a9a9c09c14b3af9", // 商品图片链接 必填 goodsId: "unpoi_12345", // 商品ID 必填 goodsType: 2, // 商品类型 必填 goodsLabels: ["随时退", "免预约"], // 商品标签 非必填 dateRule: "", // 使用规则 非必填, goodsPage: { path:"", params: {}, }, }, ], payment: { totalAmount: 40000, // 订单总价 必填 totalDiscountAmount: 10000, }, contactInfo: { phoneNumber: "12345678901", // 手机号 非必传 contactName: "test name", // 姓名 非必传 }, note: "for future", // 备注 非必传 merchantId: "", // 商户 ID 非必传 storeInfo: { storeName: "test store", // 商店名称 非必传 storeIcon: "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic.ibaotu.com%2Fgif%2F19%2F48%2F47%2F76Z888piCd6W.gif%21fwpaa50%2Ffw%2F700&refer=http%3A%2F%2Fpic.ibaotu.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1644654365&t=5fc9b5fdad0a16264a9a9c09c14b3af9", // 商店头像 非必填 }, callbackData: { test: 999999 }, // 透传数据,开发者自定义字段 非必传 tradeOption:{ life_trade_flag :0 // 0:非融合链路(默认值) 1:走融合链路(标准融合/完全融合/预约品下单必传) order_relation_info: { related_order_id: 99999, //加价关联的首单item_order_id relation _type: multi_buy_as_one //固定值 }//融合预约品走加价时必传 }, // 透传数据,开发者自定义字段 非必传 discountId: "discount_test", // 营销信息对应ID success: (res) => { const { orderId, outOrderNo } = res; console.log("success res", res); console.log("orderId", orderId, "outOrderNo", outOrderNo); this.setData({ orderId, outOrderNo }); }, fail: (res) => { const { orderId, outOrderNo, errNo, errMsg, errLogId } = res; if (errLogId) { console.log("预下单失败", errNo, errMsg, errLogId); } if (orderId || outOrderNo) { console.log("支付失败", errNo, errMsg, orderId, outOrderNo); } }, });

外卖

预约自提

const plugin = tt.requirePlugin('tta5a3d31e3aecfb9b11'); plugin.createOrder({ businessLine: 3, skuList: [ { skuId: "7125710223771191340", // sku 商品Id 必传 skuType: 1, // sku 商品类型 必传 quantity: 2, // 数量 必传 price: 1, // 价格 非商品库 sku 商品必传 }, ], payment: { totalAmount: 7, // 订单总价 必填 feeDetailsList: [ { feeType: 1, // 费用类型 feeAmount: 5, }, ], }, deliveryInfo: { poiId: "5252345", bookType: 2, // 订单类型 deliveryType: 2, // 配送类型 bookInfo: { startTime: 1673686379, // 预约开始时间 endTime: 1673686380, // 预约结束时间 }, selfPickInfo: { startTime: 1673686379, // 自提开始时间 endTime: 1673686379, // 自提结束时间 shopInfo: { shopName: "自提店铺名", address: "自提地址", phoneNumber: "17283794820", }, }, receiptInfo: { startTime: 1673686379, // 收货开始时间 endTime: 1673686379, // 收货结束时间 }, }, success: (res) => { const { orderId, outOrderNo } = res; console.log("success res", res); console.log("orderId", orderId, "outOrderNo", outOrderNo); this.setData({ orderId, outOrderNo }); }, fail: (res) => { const { orderId, outOrderNo, errNo, errMsg, errLogId } = res; if (errLogId) { console.log("预下单失败", errNo, errMsg, errLogId); } if (orderId || outOrderNo) { this.setData({ orderId, outOrderNo }); console.log("支付失败", errNo, errMsg, orderId, outOrderNo); } console.log(errNo, errMsg); }, });

立即配送

使用抖音地址
const plugin = tt.requirePlugin('tta5a3d31e3aecfb9b11'); plugin.createOrder({ businessLine: 3, skuList: [ { skuId: "7125710223771191340", // sku 商品Id 必传 skuType: 1, // sku 商品类型 必传 quantity: 2, // 数量 必传 price: 1, // 价格 非商品库 sku 商品必传 }, ], payment: { totalAmount: 7, // 订单总价 必填 feeDetailsList: [ { feeType: 1, // 费用类型 feeAmount: 3, }, { feeType: 2, // 费用类型 feeAmount: 2, }, ], }, deliveryInfo: { poiId: "5252345", bookType: 1, // 订单类型 deliveryType: 1, // 配送类型 receiptInfo: { startTime: 1673686379, // 收货开始时间 endTime: 1673686379, // 收货结束时间 }, }, addressInfo: { addressId: "7152719985352212780", }, success: (res) => { const { orderId, outOrderNo } = res; console.log("success res", res); console.log("orderId", orderId, "outOrderNo", outOrderNo); this.setData({ orderId, outOrderNo }); }, fail: (res) => { const { orderId, outOrderNo, errNo, errMsg, errLogId } = res; if (errLogId) { console.log("预下单失败", errNo, errMsg, errLogId); } if (orderId || outOrderNo) { this.setData({ orderId, outOrderNo }); console.log("支付失败", errNo, errMsg, orderId, outOrderNo); } console.log(errNo, errMsg); }, });
使用非抖音地址
const plugin = tt.requirePlugin('tta5a3d31e3aecfb9b11'); plugin.createOrder({ businessLine: 3, skuList: [ { skuId: "7125710223771191340", // sku 商品Id 必传 skuType: 1, // sku 商品类型 必传 quantity: 2, // 数量 必传 price: 1, // 价格 非商品库 sku 商品必传 }, ], payment: { totalAmount: 7, // 订单总价 必填 feeDetailsList: [ { feeType: 1, // 费用类型 feeAmount: 3, }, { feeType: 2, // 费用类型 feeAmount: 2, }, ], }, contactInfo: { phoneNumber: "12345678901", // 手机号 非必传 contactName: "test name", // 姓名 非必传 gender: 1, }, deliveryInfo: { poiId: "5252345", bookType: 1, // 订单类型 deliveryType: 1, // 配送类型 receiptInfo: { startTime: 1673686379, // 收货开始时间 endTime: 1673686379, // 收货结束时间 }, }, addressInfo: { locationInfo: { provinceCode: "440000", provinceName: "广东省", cityCode: "440300", cityName: "深圳市", districtCode: "440303", districtName: "罗湖区", locationAddress: "广东省深圳市罗湖区东门街道人民北路3101号", }, doorNumber: "99号", // 门牌号 }, success: (res) => { const { orderId, outOrderNo } = res; console.log("success res", res); console.log("orderId", orderId, "outOrderNo", outOrderNo); this.setData({ orderId, outOrderNo }); }, fail: (res) => { const { orderId, outOrderNo, errNo, errMsg, errLogId } = res; if (errLogId) { console.log("预下单失败", errNo, errMsg, errLogId); } if (orderId || outOrderNo) { this.setData({ orderId, outOrderNo }); console.log("支付失败", errNo, errMsg, orderId, outOrderNo); } console.log(errNo, errMsg); }, });

Bug & Tip

    Tip:字符串是 UTF-8 编码,一个汉字 3 个字节,一个字母 1 个字节,一个数字为 1 个字节;
    Tip:如果抖音版本过低,没有这个 JSAPI,可以使用 tt.canIUse('createOrder') 判断是否在当前版本可用;
    Tip:IDE 目前由于登录态原因不支持调试,调试 JSAPI 请以预览扫码的小程序调试结果为准。