通用接入指南
鉴权、响应结构、错误码、计费、限流与最佳实践
所有 BuyEasy 开放平台接口通用的接入约定,先读完本章再对接具体平台能力,可以少踩绝大多数坑。
1. 鉴权
所有接口通过 HTTP 请求头鉴权。请在 BuyEasy 开放平台控制台创建应用后获取 App Key 与 App Secret,并在每个请求中携带。
鉴权支持两种传法,任选其一即可(推荐同时使用头,系统会按优先级读取):
示例
curl "https://open.buyeasysaas.com/api/open/taobao/items/detail?item_url=..." \
-H "x-api-key: YOUR_APP_KEY" \
-H "Authorization: Bearer YOUR_APP_SECRET"| 请求头 | 说明 |
|---|---|
| x-api-key | 应用的 App Key |
| Authorization | Bearer <App Secret>,例如 Authorization: Bearer abc123 |
| x-api-secret | 也可直接传 App Secret(与 Authorization 二选一) |
说明
- App Secret 等同账号密码,请勿提交到代码仓库或前端代码;建议服务端持有,通过环境变量注入。
- 密钥错误或不匹配会返回 401 invalid_credentials。
2. 统一响应结构
所有接口返回统一 JSON 结构。成功时 success 为 true,失败时 success 为 false 并返回 code 与 message。
示例
// 成功
{
"success": true,
"code": 0,
"message": "success",
"data": { },
"billing": { "charged": 0.027, "unitPrice": 0.027, "multiplier": 1, "risk": null, "product": "淘宝商品详情", "callId": 1024 }
}
// 失败
{
"success": false,
"code": "insufficient_balance",
"message": "余额不足,请先充值"
}| 字段 | 类型 | 说明 |
|---|---|---|
| success | boolean | true 成功 / false 失败 |
| code | number | string | 成功为 0;失败为错误码(如 invalid_credentials) |
| message | string | 人类可读提示;失败时为重点排查信息 |
| data | object | 业务数据,结构因接口而异 |
| billing | object | 计费信息,仅成功时返回 |
说明
- HTTP 状态码与业务 code 不同:例如余额不足返回 HTTP 402,业务 code 为 insufficient_balance。请同时判断 success 字段与 HTTP 状态码。
- billing 仅在调用成功时返回;调用失败不扣费,也不会返回 billing。
3. 错误码
常见错误码与排查方向如下;具体 message 以接口实时返回为准。
| HTTP | code | 说明 | 排查建议 |
|---|---|---|---|
| 400 | missing_link | 链接解析缺少 link | 检查 resolve-link 的 link 参数 |
| 400 | platform_mismatch | 平台不匹配 | 接口 platform 与采购单 platform 需一致 |
| 400 | missing_purchase_order_id | 缺少采购单 ID | 传入 purchase_order_id |
| 400 | weidian_direct_pay_not_allowed | 微店不允许创建即付款 | 创建订单去掉 direct_pay 或设为 false |
| 400 | batch_requires_multiple_orders | 批量支付至少 2 单 | pay-batch 传入多个采购单 |
| 400 | batch_order_limit_exceeded | 批量支付超过上限 | 单次不超过 20 单 |
| 401 | missing_credentials | 缺少密钥 | 检查 x-api-key / Authorization |
| 401 | invalid_credentials | 密钥错误 | 核对 App Key / App Secret |
| 402 | insufficient_balance | 余额不足 | 到控制台充值 |
| 403 | app_inactive | 应用停用 | 控制台启用应用 |
| 403 | user_inactive | 用户停用 | 联系管理员 |
| 403 | site_inactive | 站点停用 | 联系管理员 |
| 403 | purchase_pay_disabled | 部署支付总开关未开启 | 设置 OPEN_PURCHASE_ENABLE_PAY=true 并重启服务 |
| 409 | 1688_alipay_withhold_not_signed | 1688授权账号未签约支付宝免密协议 | 按响应中的签约地址完成签约后重试 |
| 409 | 1688_alipay_channel_unavailable | 当前1688订单不支持支付宝协议支付 | 检查订单交易方式和上游可用支付渠道 |
| 403 | platform_not_authorized | 客户未授权平台账号 | 控制台完成对应平台授权 |
| 404 | api_product_not_available | 接口未上架 | 在总后台确认产品状态 |
| 404 | purchase_order_not_found | 采购单不存在 | 检查 purchase_order_id |
| 409 | missing_external_order_id | 缺少平台订单号 | 先创建订单获取 external_order_id |
| 409 | ambiguous_purchase_order | 订单号匹配到多单 | 改用 purchase_order_id |
| 409 | invalid_purchase_status | 采购单状态不允许 | 检查订单当前状态 |
| 422 | link_resolve_failed | 链接解析失败 | 确认链接是商品详情页 |
| 429 | daily_limit_exceeded | 超出每日配额 | 提升配额或次日重试 |
| 502 | provider_call_failed | 上游调用失败 | 稍后重试 |
| 502 | batch_payment_failed | 批量支付部分失败 | 查看逐单结果 |
4. 计费与余额
淘宝、1688、微店的商品查询类接口统一按 ¥0.027/次计费;订单采购与 AI 接口仍按各自产品配置计费。调用失败不扣费。
商品详情防刷只识别同一 App Key 以高度固定间隔连续抓取不同商品的自动化序列:第 100 次起 10 倍、第 500 次起 50 倍、第 1000 次起 100 倍。普通不规则访问不触发。
billing 字段包含实扣金额(charged)、基础单价(unitPrice)、倍率(multiplier)、风险说明(risk)、接口产品名(product)与调用记录 ID(callId),可用于对账。
查询当前余额:GET /api/open/account/balance。
示例
curl "https://open.buyeasysaas.com/api/open/account/balance" \
-H "x-api-key: YOUR_APP_KEY" \
-H "Authorization: Bearer YOUR_APP_SECRET"说明
- 余额不足会返回 402 insufficient_balance,请及时充值以避免调用中断。
5. 限流与每日配额
每个应用有每日调用配额(daily_limit)。超过配额返回 429 daily_limit_exceeded。
建议:在控制台为生产应用配置充足配额;客户端对 429 做指数退避重试。
6. 幂等键
创建订单、支付等写操作支持幂等键 Idempotency-Key(请求头)。相同 key 的重复请求会返回首次结果的缓存,不会产生重复扣费或重复下单。
建议:每次业务单号生成唯一的 Idempotency-Key;若需重新下单,必须使用新的业务单号与新的 Idempotency-Key。
示例
curl -X POST "https://open.buyeasysaas.com/api/open/taobao/orders/create" \
-H "x-api-key: YOUR_APP_KEY" \
-H "Authorization: Bearer YOUR_APP_SECRET" \
-H "Idempotency-Key: order-20260726-0001" \
-d '{ "out_order_id": "order-20260726-0001", "items": [] }'7. Webhook 回调
可在控制台为应用配置 Webhook URL。当采购订单状态发生变更(如已创建 / 已付款 / 已取消 / 已发货)时,BuyEasy 会向该地址推送 JSON 通知,便于你异步同步订单状态。
请对回调来源做签名校验,并对重复推送做幂等处理。
示例
{
"event": "purchase_order.status_changed",
"platform": "taobao",
"purchase_order_id": "po_001",
"external_order_id": "TB123",
"status": "paid",
"occurred_at": "2026-07-26T05:00:00Z"
}8. 最佳实践
接入前先调用 GET /api/open/health 确认服务可用。
推荐链路:先 resolve-link 解析商品链接 → items/detail 取详情 → orders/preview 预览 → orders/create 创建 → orders/pay 支付 → orders/detail 查询。
对所有失败做统一异常处理,优先依据 code 做分支;对 429 做退避重试。
记录 billing.callId 用于财务对账与工单排查。
说明
- health 接口不需要鉴权:GET /api/open/health,返回 { "status": "ok" }。