创建订单会按商品的 fulfillment_type 执行:auto 本地自动发货,manual 等待人工履约,upstream 创建采购任务并由 Worker 调用上游。Provider API 当前使用绑定用户积分扣款,支付方式不等于履约方式。
POST /api/v1/provider/orders
Content-Type: application/json
{
"downstream_order_no": "D202608210001",
"sku_id": 3001,
"quantity": 1,
"trace_id": "trace-abc-001",
"manual_form_data": {}
}
| 字段 | 必填 | 说明 |
|---|
| downstream_order_no | 是 | 下游订单号,同一个 API Key 下必须唯一,最长 128 |
| sku_id | 是 | Provider SKU ID |
| quantity | 是 | 购买数量,范围 1 到 1000000 |
| trace_id | 否 | 下游链路追踪 ID,最长 128 |
| manual_form_data | 否 | 按商品 schema 校验/规范化并参与幂等摘要;有 schema 时保存并透传上游,不能只保存 hash |
callback_url 以及其他未定义的顶层字段不被接受。请求体必须是 JSON 对象;重复顶层 key 会返回 invalid_json。
表单规则按商品类型执行:manual 会校验 schema、required、未知字段、类型、长度、正则、数值范围和 options;auto 以及无 schema 的 upstream 会将表单归一化为空对象;有 schema 的 upstream 会保存并透传规范化后的表单。文本值会 trim 并进行 HTML escape,checkbox 会 trim、去重并排序。
唯一键是 credential_id + downstream_order_no。相同下游订单号重复请求时,如果 SKU、数量、trace_id 及规范化后的 manual_form_data 完全一致,则返回原订单;如果参数不同,返回 409 idempotency_conflict,不重复扣款、不重复发货。表单值可能含账号、邮箱、UID 或授权码,日志和管理列表应脱敏。
{
"ok": true,
"order_id": 9001,
"order_no": "2026082112345678",
"downstream_order_no": "D202608210001",
"status": "processing",
"amount": "10.00",
"currency": "CNY",
"trace_id": "trace-abc-001",
"error_message": null,
"items": [
{
"product_id": 2001,
"sku_id": 3001,
"title": { "zh-CN": "示例商品", "en": "示例商品" },
"quantity": 1,
"unit_price": "10.00",
"total_price": "10.00"
}
]
}
创建接口先保存本地订单、积分扣款和履约任务,再返回 processing;不会在请求内等待上游发货。订单状态包括 processing、delivered、failed。查询订单使用返回的数值型 order_id,只能查询当前 API Key 创建的订单。
已发货响应中的 fulfillment
"status": "delivered",
"fulfillment": {
"type": "card_key",
"status": "delivered",
"payload": "account@example.com----password",
"delivery_data": null
}
Protocol requirement: plain-text deliveries are returned in fulfillment.payload; fulfillment.delivery_data is null. Structured provider objects or arrays keep their structure. This avoids sending a scalar string or array where Dujiao-Next expects its JSON object type.
fulfillment 只在已保存交付结果时返回;可能是 card_key、apple_account 或 provider_delivery。上游采购成本不会覆盖响应中的本地销售金额。