API Reference · v1

开放 API 文档

统一接口规范 · HMAC-SHA256 签名 · 同步返回 + 异步回调。所有接口基于 HTTPS + JSON。

01接口总览

接口地址(正式):https://api.xcx181.top/api/v1

请求与响应均为 application/json; charset=utf-8。所有请求需携带签名头(见 02 节),时间戳与服务器偏差不得超过 300 秒。

方法路径说明
POST/order/create统一下单,中转服务自动比价路由并转发供应商
GET/order/query按平台订单号或下游订单号查询订单状态
GET/goods/list获取标准商品列表(含各渠道价格,供比价展示)
GET/channel/status查询名下供应商渠道状态(启用/熔断/维护中)

公共响应结构

response.json
{
  "code": 0,              // 0 成功,非 0 见错误码表
  "message": "success",  // 结果描述
  "data": { ... },         // 业务数据,失败时为 null
  "trace_id": "t_8f2c1a9e" // 链路 ID,排查问题时提供
}

02签名算法

使用注册后分配的 AccessKey / Secret 做 HMAC-SHA256 签名。签名结果为 hex 小写字符串。

请求头

Header必填说明
X-Access-Keyrequired平台分配的 AccessKey
X-Noncerequired随机字符串(8–32 位),5 分钟内不可重复(防重放)
X-TimestamprequiredUnix 秒级时间戳,偏差 ±300 秒内
X-SignrequiredHMAC-SHA256 签名(hex 小写)

签名步骤

  • 构造待签名串(每段以换行符 \n 连接):
    sign_raw = access_key + "\n" + nonce + "\n" + timestamp + "\n" + body
    其中 body 为请求体原文(GET 请求为空字符串)。
  • 计算签名:sign = HMAC-SHA256(secret, sign_raw).hex()
  • 将 sign 放入 X-Sign 请求头。
sign.php · PHP 8 示例
$ak = 'ak_xxxxxxxxxxxx';
$sk = 'sk_xxxxxxxxxxxx';
$body = json_encode(['product_id' => '1001', 'order_no' => 'ORD001', 'qty' => 1], JSON_UNESCAPED_UNICODE);
$nonce = bin2hex(random_bytes(4));
$ts   = (string) time();

$signRaw = $ak . "\n" . $nonce . "\n" . $ts . "\n" . $body;
$sign = hash_hmac('sha256', $signRaw, $sk);   // hex 小写

$ch = curl_init('https://api.xcx181.top/api/v1/order/create');
curl_setopt_array($ch, [
  CURLOPT_POST           => true,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER     => [
    'Content-Type: application/json',
    "X-Access-Key: {$ak}",
    "X-Nonce: {$nonce}",
    "X-Timestamp: {$ts}",
    "X-Sign: {$sign}",
  ],
  CURLOPT_POSTFIELDS     => $body,
]);
echo curl_exec($ch);

03统一下单

POST /api/v1/order/create 同步返回受理结果,最终履约结果以异步回调为准

请求参数(body)

参数类型必填说明
product_idstringrequired平台标准商品 ID(来自商品列表接口 / 映射管理)
order_nostringrequired下游订单号,全局唯一(幂等键,重复提交返回原单)
qtyintrequired购买数量,≥1
accountstringoptional充值账号 / 直充目标(直充类商品必填)
notify_urlstringoptional本单回调地址(不填则使用控制台全局回调地址)
channel_codestringoptional指定渠道编码(指定后跳过比价;需属于本人渠道)
attachstringoptional透传参数,回调时原样带回(≤512 字符)

成功响应 data

字段说明
order_no下游订单号
trade_no平台订单号
channel最终选中的渠道编码
supplier_order_no供应商返回的订单号
statussubmitted 已提交 / success 已完成 / failed 失败 / processing 处理中
price成交单价(供应商侧实际成本,以渠道返回为准)
幂等
同一 order_no 重复提交不会重复下单,返回首次受理结果。order_no 建议包含日期与业务前缀,便于对账。

04订单查询

GET /api/v1/order/query 按 order_no 或 trade_no 查询(二选一)
参数类型必填说明
order_nostringoptional下游订单号(与 trade_no 二选一)
trade_nostringoptional平台订单号

返回字段与下单 data 一致,另含 create_time、finish_time、supplier_msg(供应商返回信息)。

05商品列表

GET /api/v1/goods/list 返回标准商品及各渠道报价(比价展示用)
参数类型必填说明
category_idintoptional按分类筛选
keywordstringoptional商品名称模糊搜索
page / page_sizeintoptional分页,默认 1 / 20,单页上限 100

每个商品返回 channels[]:渠道编码、渠道名称、当前报价、可用库存、渠道状态,便于你展示「多渠道比价」结果。

06渠道状态

GET /api/v1/channel/status 查询本人名下渠道的可用状态

状态取值:active 正常 / degraded 熔断降级 / maintaining 维护中 / disabled 已停用。可配合告警系统监控渠道健康度。

07回调通知

订单状态变更(成功 / 失败)时,中转服务以 POST 表单或 JSON 向你的 notify_url 发送通知,最多重试 5 次(间隔 0s / 15s / 60s / 300s / 900s)。

回调参数

参数说明
trade_no / order_no平台订单号 / 下游订单号
statussuccess / failed
account充值目标账号
supplier_msg供应商结果信息
attach下单时透传的参数,原样带回
timestamp / sign时间戳 / HMAC-SHA256 签名(密钥同 API Secret)

回调应答

你的服务端处理成功后请返回纯文本 success(或 HTTP 200 且 body 为 success);返回其他内容均视为失败并触发重试。请以订单号做幂等处理,避免重试导致重复入账。

提示
收不到回调时,先用「订单查询」接口主动查单兜底,再到控制台「回调记录」查看转发明细与失败原因,支持手动补发回调。

08错误码

code含义处理建议
0成功—
1001签名校验失败核对 AccessKey/Secret 与签名串拼接顺序(\n 分隔)
1002时间戳过期或非法校准服务器时间,偏差需在 ±300 秒内
1003Nonce 重复每次请求生成新的随机数
1004IP 不在白名单在控制台配置调用 IP 白名单
1005账号被禁用联系平台管理员
1101触发限流降低调用频率或购买更高配额
2001商品不存在 / 已下架核对 product_id,刷新商品列表
2002参数缺失或格式错误按文档检查必填参数与类型
2003订单号重复(幂等命中)返回首次受理结果,属正常情况
3001无可用渠道(全部失败/熔断)稍后重试或检查渠道配置与供应商状态
3002指定渠道不可用去掉 channel_code 走自动比价,或检查该渠道
3003供应商下单失败看 supplier_msg;一般会自动切换渠道后仍失败才返回
4001订单不存在核对 order_no / trade_no
5000系统繁忙携带 trace_id 稍后重试或联系客服

09在线调试(签名生成器)

填写你的密钥与请求体,生成带真实 HMAC-SHA256 签名的 cURL 命令,可直接粘贴到终端试调(密钥仅在浏览器本地计算,不会上传)。

generated-request.sh
// 点击上方「生成签名请求」,这里输出带签名的 cURL 命令
注意
调试工具仅生成签名与请求示例;正式调用请在控制台获取你自己的 AccessKey/Secret,并确保回调地址可公网访问。