通用接入

通用接入指南

鉴权、响应结构、错误码、计费、限流与最佳实践

所有 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
AuthorizationBearer <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": "余额不足,请先充值"
}
字段类型说明
successbooleantrue 成功 / false 失败
codenumber | string成功为 0;失败为错误码(如 invalid_credentials)
messagestring人类可读提示;失败时为重点排查信息
dataobject业务数据,结构因接口而异
billingobject计费信息,仅成功时返回

说明

  • HTTP 状态码与业务 code 不同:例如余额不足返回 HTTP 402,业务 code 为 insufficient_balance。请同时判断 success 字段与 HTTP 状态码。
  • billing 仅在调用成功时返回;调用失败不扣费,也不会返回 billing。

3. 错误码

常见错误码与排查方向如下;具体 message 以接口实时返回为准。

HTTPcode说明排查建议
400missing_link链接解析缺少 link检查 resolve-link 的 link 参数
400platform_mismatch平台不匹配接口 platform 与采购单 platform 需一致
400missing_purchase_order_id缺少采购单 ID传入 purchase_order_id
400weidian_direct_pay_not_allowed微店不允许创建即付款创建订单去掉 direct_pay 或设为 false
400batch_requires_multiple_orders批量支付至少 2 单pay-batch 传入多个采购单
400batch_order_limit_exceeded批量支付超过上限单次不超过 20 单
401missing_credentials缺少密钥检查 x-api-key / Authorization
401invalid_credentials密钥错误核对 App Key / App Secret
402insufficient_balance余额不足到控制台充值
403app_inactive应用停用控制台启用应用
403user_inactive用户停用联系管理员
403site_inactive站点停用联系管理员
403purchase_pay_disabled部署支付总开关未开启设置 OPEN_PURCHASE_ENABLE_PAY=true 并重启服务
4091688_alipay_withhold_not_signed1688授权账号未签约支付宝免密协议按响应中的签约地址完成签约后重试
4091688_alipay_channel_unavailable当前1688订单不支持支付宝协议支付检查订单交易方式和上游可用支付渠道
403platform_not_authorized客户未授权平台账号控制台完成对应平台授权
404api_product_not_available接口未上架在总后台确认产品状态
404purchase_order_not_found采购单不存在检查 purchase_order_id
409missing_external_order_id缺少平台订单号先创建订单获取 external_order_id
409ambiguous_purchase_order订单号匹配到多单改用 purchase_order_id
409invalid_purchase_status采购单状态不允许检查订单当前状态
422link_resolve_failed链接解析失败确认链接是商品详情页
429daily_limit_exceeded超出每日配额提升配额或次日重试
502provider_call_failed上游调用失败稍后重试
502batch_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" }。