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 | 查询名下供应商渠道状态(启用/熔断/维护中) |
公共响应结构
{
"code": 0, // 0 成功,非 0 见错误码表
"message": "success", // 结果描述
"data": { ... }, // 业务数据,失败时为 null
"trace_id": "t_8f2c1a9e" // 链路 ID,排查问题时提供
}
02签名算法
使用注册后分配的 AccessKey / Secret 做 HMAC-SHA256 签名。签名结果为 hex 小写字符串。
请求头
| Header | 必填 | 说明 |
|---|---|---|
X-Access-Key | required | 平台分配的 AccessKey |
X-Nonce | required | 随机字符串(8–32 位),5 分钟内不可重复(防重放) |
X-Timestamp | required | Unix 秒级时间戳,偏差 ±300 秒内 |
X-Sign | required | HMAC-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请求头。
$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_id | string | required | 平台标准商品 ID(来自商品列表接口 / 映射管理) |
order_no | string | required | 下游订单号,全局唯一(幂等键,重复提交返回原单) |
qty | int | required | 购买数量,≥1 |
account | string | optional | 充值账号 / 直充目标(直充类商品必填) |
notify_url | string | optional | 本单回调地址(不填则使用控制台全局回调地址) |
channel_code | string | optional | 指定渠道编码(指定后跳过比价;需属于本人渠道) |
attach | string | optional | 透传参数,回调时原样带回(≤512 字符) |
成功响应 data
| 字段 | 说明 |
|---|---|
order_no | 下游订单号 |
trade_no | 平台订单号 |
channel | 最终选中的渠道编码 |
supplier_order_no | 供应商返回的订单号 |
status | submitted 已提交 / success 已完成 / failed 失败 / processing 处理中 |
price | 成交单价(供应商侧实际成本,以渠道返回为准) |
幂等
同一
order_no 重复提交不会重复下单,返回首次受理结果。order_no 建议包含日期与业务前缀,便于对账。04订单查询
GET
/api/v1/order/query
按 order_no 或 trade_no 查询(二选一)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
order_no | string | optional | 下游订单号(与 trade_no 二选一) |
trade_no | string | optional | 平台订单号 |
返回字段与下单 data 一致,另含 create_time、finish_time、supplier_msg(供应商返回信息)。
05商品列表
GET
/api/v1/goods/list
返回标准商品及各渠道报价(比价展示用)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
category_id | int | optional | 按分类筛选 |
keyword | string | optional | 商品名称模糊搜索 |
page / page_size | int | optional | 分页,默认 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 | 平台订单号 / 下游订单号 |
status | success / 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 秒内 |
1003 | Nonce 重复 | 每次请求生成新的随机数 |
1004 | IP 不在白名单 | 在控制台配置调用 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 命令,可直接粘贴到终端试调(密钥仅在浏览器本地计算,不会上传)。
// 点击上方「生成签名请求」,这里输出带签名的 cURL 命令
注意
调试工具仅生成签名与请求示例;正式调用请在控制台获取你自己的 AccessKey/Secret,并确保回调地址可公网访问。