创建订单

API文档最后更新: 2026-08-31

7. 订单

7.1 创建订单

  • 请求方式:POST

  • 请求地址:/orders/create

创建订单前不需要再次查询商品详情或下单模板。卡密商品只提交商品、规格和数量;充值商品还要提交第三方在商品对接时保存的下单模板版本和充值资料。请求中不提交价格,平台按下单时该账户的最新销售价格计算,金额最多保留两位小数;余额实际扣款、订单金额和返回的 data.amount 完全一致。如果价格在商品对接后发生变化,本单仍按下单时的最新价格成交。

请求:

{
  "clientOrderRef": "PO-20260728-0001",
  "productRef": 1001,
  "units": 1,
  "purchaseSchemaRevision": 1753776000,
  "orderCallbackUrl": "https://buyer.example.com/kys/orders/PO-20260728-0001/events",
  "purchaseEntries": [
    {
      "account": "13800138000",
      "region": "guangdong"
    }
  ]
}

请求字段:

字段

JSON 类型

必填

含义

clientOrderRef

string

是

第三方订单号

productRef

integer

是

要购买的商品编号

variantRef

integer

多规格是

规格编号;单规格商品不填时自动使用数字 0

units

integer

是

购买数量,必须符合下单模板中的 unitRule

purchaseSchemaRevision

integer

充值商品是

本地保存的下单模板版本;卡密商品不填

orderCallbackUrl

string

否

当前订单、卡密、退款、关联售后和对应商品变化的公网 HTTPS 接收地址

purchaseEntries

object[]

充值商品按模板

充值资料数组;卡密商品不填

purchaseEntries[].{fieldRef}

string 或 string[]

充值商品按模板

字段名使用模板返回的 fieldRef;多选字段提交字符串数组,其他字段提交字符串

返回字段:

字段

JSON 类型

必填

含义

code

integer

是

固定为 0,表示请求成功

message

string

是

本次请求的处理说明

data

object

是

新创建的订单

data.clientOrderRef

string

是

第三方订单号

data.platformOrderRef

string

是

平台订单号

data.productRef

integer

是

购买的商品编号

data.variantRef

integer

是

购买的规格编号

data.units

integer

是

购买数量

data.amount

number

是

实际扣款金额,单位为人民币元,最多保留两位小数

data.orderState

string

是

平台订单状态:pending 等待处理;processing 处理中;success 已完成;canceled 已取消;partially_refunded 部分退款;refunded 已退款

data.refundedAmount

number

是

累计已退款金额,单位为人民币元,最多保留两位小数

data.allowedActions

string[]

是

provideOtp 提交验证码;requestCancellation 申请取消;requestRefund 申请退款;openCase 创建售后;没有可执行操作时为空数组

data.createdAt

integer

是

订单创建时间,10 位 Unix 秒级时间戳

data.updatedAt

integer

是

订单最后更新时间,10 位 Unix 秒级时间戳

data.rechargeResult

string

充值商品是

最新充值返回信息,最多 100 个字符;订单刚创建且暂无结果时为空字符串,卡密商品不返回

data.card_list

object[]

否

pending 不返回;其他状态在卡密已经完整交付时返回

data.card_list[].card_no

string

是

卡号;没有单独卡号时为空字符串

data.card_list[].card_password

string

是

卡密或密码;没有单独密码时为空字符串

requestId

string

是

本次请求编号,排查问题时提供给平台

返回示例(对应第 6.4 节的充值模板和上面的下单请求,订单等待处理):

{
  "code": 0,
  "message": "success",
  "data": {
    "clientOrderRef": "PO-20260728-0001",
    "platformOrderRef": "202607280001",
    "productRef": 1001,
    "variantRef": 0,
    "units": 1,
    "amount": 100.00,
    "orderState": "pending",
    "refundedAmount": 0.00,
    "allowedActions": ["requestCancellation", "openCase"],
    "createdAt": 1785216000,
    "updatedAt": 1785216000,
    "rechargeResult": ""
  },
  "requestId": "req_01K0EXAMPLE"
}

充值商品的 entryMode:

  • purchaseEntries 中的每个对象代表一组下单资料,字段名直接使用模板返回的 fieldRef,字段值填写第三方用户输入的内容。

  • purchaseFields 为空:充值商品提交空数组。

  • singleEntry:purchaseFields 不为空时,purchaseEntries 必须只有一个对象;当前模板未开启批量时 units 必须为 1。

  • oneEntryPerUnit:每件商品提交一个对象,数组长度必须等于 units。

variantRef:

  • 单规格商品可以不填写,平台自动使用默认规格。

  • 多规格商品必须填写商品详情返回的规格编号。

如果模板或数量规则已经变化,平台会在扣款前返回 PURCHASE_SCHEMA_CHANGED。第三方重新查询 /goods/tpl、更新本地下单表单后,继续使用原来的 clientOrderRef 再次提交。

clientOrderRef 长度为 1 至 64 个字符,只能使用字母、数字、短横线和下划线,并且在当前采购账户内唯一:

  • 网络超时或没有收到明确结果时,必须使用原 clientOrderRef 和原下单内容重试。平台会返回第一次创建的原订单,不会再次扣款或重复下单。

  • 同一 clientOrderRef 不能改成另一件商品、另一规格、另一数量或不同充值资料,否则返回 IDEMPOTENCY_CONFLICT。

  • 重试时传入不同的 orderCallbackUrl 不会修改原订单,仍以原订单第一次保存的地址为准。

  • 请求在订单创建前因参数、模板、余额或库存校验失败时不会占用该编号;修正后仍可复用原编号。

orderCallbackUrl 选填:

  • 用于接收该订单的状态、卡密就绪和退款事件。

  • 不要求账户先保存默认回调地址,也不要求与默认地址使用相同域名。平台不会在下单前向该地址发送验证请求。

  • 填写时必须使用公网 HTTPS。URL 路径和查询参数可以按订单变化。

  • 订单创建成功后不能更换该订单的回调地址。

  • URL 不能包含用户名或密码、# 片段或 IP 地址,也不能返回 HTTP 跳转。URL 可以包含查询参数。

  • 提交该地址后,本订单的状态、卡密和退款消息优先发送到这里。

  • 订单成功创建后,平台自动创建或续期该商品订阅,并把该地址绑定为商品通知目标;后续 product.changed 只向该地址推送一次,不再同时推送账户默认地址。

  • 同一商品以后有新订单使用不同的 orderCallbackUrl 时,商品通知改发到最新地址。

  • 不填写 orderCallbackUrl 时,不会修改这个商品当前有效订阅已经绑定的地址。商品从未绑定过订单地址时,每条商品消息生成时使用当时的默认回调地址。取消订阅或执行 clearAll 会立即删除商品绑定;订阅到期后旧绑定不再使用,后续重新订阅或订单续期且没有提交新地址时清除旧绑定。

  • 不填写 orderCallbackUrl 时,平台不会在创建订单时复制默认地址。以后每条订单、卡密、退款或关联售后消息生成时,使用当时的账户默认回调地址。

  • 默认回调地址修改后只影响之后新生成的消息;已经进入发送流程的消息仍使用原地址。

  • 某条消息生成时既没有订单地址也没有默认地址,就不发送该条 Webhook。订单仍然正常创建,第三方通过订单详情查询状态、卡密和退款结果。

订单只有在余额扣款成功后才会创建。HTTP 2xx 表示订单已经创建,但不表示充值或发卡已经完成;最终结果看 orderState。余额不足时不会创建订单,也不会改用其他支付方式。