tt.createOrder收藏我的收藏
收藏
我的收藏提供开发者交易系统中预下单能力,开发者通过调用该方法生成订单后,会调起小程序收银台进行支付。
使用限制
最低支持版本上注明行业 SDK ,表示仅在行业 SDK 上才支持,需要在代码中配置行业 SDK 的权限:行业 SDK 的权限配置。当完成行业 SDK 的权限配置后,可通过 tt.canIUse('createOrder') 判断该 API 是否可用。
语法
tt.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 | | 否 | 2.51.0.0 | |
tradeOption | Object | | 否 | 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 | 否 | 业务线
| 2.52.0.3 |
deliveryInfo | DeliveryInfo DeliveryInfo 说明在下文 | | 否(businessLine = 3 时,必填) | 配送信息 | 行业 SDK |
addressInfo | AddressInfo AddressInfo 说明见下文 | | 否(businessLine = 3 ,必填) | 地址信息 | 行业 SDK |
success | Function | | 否 | 接口调用成功的回调函数 | |
fail | Function | | 否 | 接口调用失败的回调函数 | |
complete | Function | | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) | |
Goods
属性名 | 类型 | 默认值 | 必填 | 说明 | 最低支持版本 |
quantity | number | | 是 | 购买数量 | 2.51.0.0 |
price | number | | 是 | 商品价格 | 2.51.0.0 |
goodsName | string | | 是 | 商品名称 | 2.51.0.0 |
goodsPhoto | string | | 是 | 商品图片 | 2.51.0.0 |
goodsId | string | | 是 | 商品ID | 2.51.0.0 |
goodsType | number | | 是 | 商品类型
| 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 |
goodsPage
属性名 | 类型 | 默认值 | 必填 | 说明 | 最低支持版本 |
path | string | -- | 是 | 商品详情页跳转路径,没有前导的“/”,长度 <= 512byte 示例:pages/xxxindexxx | 2.57.4.0 |
params | string | -- | 否 | 商品详情页路径参数,自定义的 json 结构,序列化成字符串存入该字段,平台不限制,但是写入的内容需要能够保证生成访问订单详情的 schema 能正确跳转到小程序内部的订单详情页,长度 <= 512byte 示例:{\"id\":\"xxxxxx\"} | 2.57.4.0 |
GoodsBookInfo
属性名 | 类型 | 默认值 | 必填 | 说明 | 最低支持版本 |
bookType | number | -- | 是 | 预约类型:
| 2.57.4.0 |
cancelPolicy | number | -- | 否 | 取消政策:
需要预约,此字段必传;不需要预约,此字段不填 | 2.57.4.0 |
advancedCancelHours | number | -- | 否 | 提前取消的小时限制(距离预约结束时间),cancelPolicy为 3 时有效 | 2.69.0.5 |
Sku
- •sku 为商品库商品,对应的 goods 必须是商品库
- •sku 为商品库商品,goodsInfo 可以不传
- •sku 为非商品库商品,需要传 goodsInfo
属性名 | 类型 | 默认值 | 必填 | 说明 | 最低支持版本 |
quantity | number | | 是 | 购买数量 | 2.67.0.0 |
skuId | string | | 是 | sku商品id | 2.67.0.0 |
skuType | number | | 是 | sku商品类型
| 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 | | 是 | 商品类型:
| 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 |
ExtraInfo
属性名 | 类型 | 默认值 | 必填 | 说明 | 最低支持版本 |
ticketName | string | | 否(非POI商品库的门票类SKU必传) | 门票票种 | 2.67.0.0 |
date | string | | 否(非POI商品库的门票类SKU必传) | 日期,示例 2022-01-10,现在仅支持天 | 2.67.0.0 |
Payment
属性名 | 类型 | 默认值 | 必填 | 说明 | 最低支持版本 |
totalAmount | number | | 是 | 订单总价 | 2.51.0.0 |
totalDiscountAmount | number | | 否 | 订单总折扣 | 2.52.0.3 |
feeDetailsList | FeeDetailsInfo[] FeeDetailsInfo 说明见下文 | | 否(存在配送费或包装费时,必传) | 费用明细列表 注意:仅支持外卖行业(即businessLine = 3) | 行业 SDK |
FeeDetailsInfo
属性名 | 类型 | 默认值 | 必填 | 说明 | 最低支持版本 |
feeType | number | | 是 | 费用类型
| 行业 SDK |
feeAmount | number | | 是 | 费用总金额 | 行业 SDK |
feeDiscountAmount | number | 0 | 否 | 费用总优惠金额 | 行业 SDK |
feeDesc | string | | 否 | 费用描述 | 行业 SDK |
ContactInfo
属性名 | 类型 | 默认值 | 必填 | 说明 | 最低支持版本 |
phoneNumber | string | | 否 (businessLine = 3 且 addressId 为空时,必填) | 联系人电话 | 2.51.0.0 |
contactName | string | | 否 (businessLine = 3 且 addressId 为空时,必填) | 联系人姓名 | 2.51.0.0 |
gender | number | | 否 (businessLine = 3 且 addressId 为空时,必填) | 联系人性别
| 行业 SDK |
StoreInfo
属性名 | 类型 | 默认值 | 必填 | 说明 | 最低支持版本 |
storeName | string | | 否 | 商店名称 | 2.51.0.0 |
storeIcon | string | | 否 | 商店头像 | 2.51.0.0 |
DiscountInfo
属性名 | 类型 | 默认值 | 必填 | 说明 | 最低支持版本 |
type | number | | 是 | 折扣算价类型
| 2.52.0.3 |
detail | Detail | | 是 | 折扣详情 | 2.52.0.3 |
useMergedMarketingApi | boolean | false | 否 | 是否使用了营销算价二合一 | 2.74.0.0 行业SDK |
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 | | 是 | 营销类型
| 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 | | 是 | 营销适用维度:
| 2.52.0.3 |
code | string | | 否 | 优惠券编码 | 2.74.0.0 行业SDK |
kind | number | | 否 | 营销类别
| |
creatorType | number | | 否 | 创建人类型
| |
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 | 行业 SDK |
bookType | boolean | -- | 是 | 订单类型 1: 实时单 2: 预约单 | 行业 SDK |
deliveryType | number | -- | 是 | 配送类型 1: 同城配送 2: 到店自提 | 行业 SDK |
receiptInfo | ReceiptInfo ReceiptInfo 说明见下文 | -- | 是 | 收货信息 | 行业 SDK |
bookInfo | DeliveryBookInfo DeliveryBookInfo说明见下文 | -- | 否(bookType = 2时,必填) | 预约信息 | 行业 SDK |
selfPickInfo | SelfPickInfo SelfPickInfo说明见下文 | -- | 否(deliveryType = 2 时,必填) | 自提信息 | 行业 SDK |
ReceiptInfo
属性名 | 类型 | 默认值 | 必填 | 说明 | 最低支持版本 |
startTime | number | -- | 是 | 预计收货开始时间(ms),13位毫秒时间戳 | 行业 SDK |
endTime | number | -- | 是 | 预计收货结束时间(ms),13位毫秒时间戳 | 行业 SDK |
DeliveryBookInfo
属性名 | 类型 | 默认值 | 必填 | 说明 | 最低支持版本 |
startTime | number | -- | 是 | 预定开始时间(ms),13位毫秒时间戳 | 行业 SDK |
endTime | number | -- | 是 | 预定结束时间(ms),13位毫秒时间戳 | 行业 SDK |
SelfPickInfo
属性名 | 类型 | 默认值 | 必填 | 说明 | 最低支持版本 |
startTime | number | -- | 是 | 预计自提开始时间(ms),13位毫秒时间戳 | 行业 SDK |
endTime | number | -- | 是 | 预计自提结束时间(ms),13位毫秒时间戳 | 行业 SDK |
shopInfo | PickUpShopInfo PickUpShopInfo 说明见下文 | -- | 是 | 自提店铺信息 | 行业 SDK |
PickUpShopInfo
属性名 | 类型 | 默认值 | 必填 | 说明 | 最低支持版本 |
shopId | string | -- | 否 | 自提店铺id | 行业 SDK |
shopName | string | -- | 是 | 自提店铺名称 | 行业 SDK |
address | string | -- | 是 | 自提店铺地址 | 行业 SDK |
phoneNumber | string | -- | 是 | 自提店铺电话 | 行业 SDK |
AddressInfo
属性名 | 类型 | 默认值 | 必填 | 说明 | 最低支持版本 |
addressId | string | -- | 否 | 抖音用户地址id | 行业 SDK |
locationInfo | LocationInfo LocationInfo说明见下文 | -- | 否(addressId 为空时,必填) | 地理位置信息 | 行业 SDK |
doorNumber | string | -- | 否(addressId 为空时,必填) | 门牌号 | 行业 SDK |
LocationInfo
属性名 | 类型 | 默认值 | 必填 | 说明 | 最低支持版本 |
provinceCode | string | -- | 是 | 省编码 | 行业 SDK |
provinceName | string | -- | 是 | 省名称 | 行业 SDK |
cityCode | string | -- | 是 | 市编码 | 行业 SDK |
cityName | string | -- | 是 | 市名称 | 行业 SDK |
districtCode | string | -- | 是 | 区编码 | 行业 SDK |
districtName | string | -- | 是 | 区名称 | 行业 SDK |
townCode | string | -- | 否 | 街道/镇编码 | 行业 SDK |
townName | string | -- | 否 | 街道/镇名称 | 行业 SDK |
locationAddress | string | -- | 是 | 具体位置地址 | 行业 SDK |
locationName | string | -- | 否 | poi 名称 | 行业 SDK |
回调成功
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 |
代码示例
不包含营销模块
tt.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:走融合链路(标准融合/完全融合) }, // 透传数据,开发者自定义字段 非必传 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)
tt.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:走融合链路(标准融合/完全融合) }, // 透传数据,开发者自定义字段 非必传 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 下单团购商品示例
tt.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:走融合链路(标准融合/完全融合) }, // 透传数据,开发者自定义字段 非必传 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
tt.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:走融合链路(标准融合/完全融合) }, // 透传数据,开发者自定义字段 非必传 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
tt.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:走融合链路(标准融合/完全融合) }, // 透传数据,开发者自定义字段 非必传 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); } }, });
外卖
预约自提
tt.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); }, });
立即配送
•使用抖音地址
tt.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); }, });
•使用非抖音地址
tt.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:为了不干扰主线流程,我们将低版本兼容接口放在“特殊场景处理方案-版本兼容”;
- •Tip:IDE 目前由于登录态原因不支持调试,调试 JSAPI 请以预览扫码的小程序调试结果为准。
- •Tip:当 businessLine = 3 即外卖业务线时,需要在代码中配置行业 SDK 的权限:行业 SDK 的权限配置,行业 SDK 的权限配置在基础库 2.74.0.0 抖音版本 23.0 以上支持,API 用法跟原来一致。