错误码
HIOBuy 有两类错误形态:协议错误(非 2xx,含 error 对象)与 业务失败(部分订单路由 HTTP 200 且 success: false)。
协议错误(HTTP 4xx / 5xx) {#protocol-errors}
{
"error": {
"code": "INBOUND_VALIDATION_FAILED",
"message": "Some inbound information is missing or invalid.",
"request_id": "req_abc123",
"category": "VALIDATION_ERROR",
"field": "tracking_number",
"details": {
"fields": [
{
"field": "items[0].name",
"code": "REQUIRED",
"message": "Product name is required."
}
]
}
}
}| 字段 | 说明 |
|---|---|
error.code | 机器可读枚举,用于分支 |
error.message | 人类可读说明(英文) |
error.request_id | 与响应头 x-request-id 一致 |
error.category | 粗分类:AUTH_ERROR / RATE_LIMIT_ERROR / VALIDATION_ERROR / CHANNEL_ERROR / INTERNAL_ERROR |
error.field | 可选,与本错误最相关的字段路径 |
error.details | 可选对象;校验类可含 details.fields |
error.upstream | 可选,渠道上游摘要(已脱敏) |
字段级 details.fields[].code:REQUIRED | INVALID_VALUE | INVALID_FORMAT | OUT_OF_RANGE。
HTTP 状态原则
| HTTP | 场景 |
|---|---|
400 | JSON 无法解析 / 通用校验 |
401 | API Key 无效 |
403 | 已认证但无能力(含履约门禁) |
404 | 资源不存在或无权 |
409 | 状态 / 唯一性冲突 |
422 | 可解析但业务校验失败 |
429 | 限流 / 配额 |
500 / 502 / 503 | 内部或上游故障 |
错误码参考 {#error-codes}
机器可读权威目录见 data/errors.catalog.json。摘要:
| Code | HTTP | Category | When |
|---|---|---|---|
INVALID_API_KEY | 401 | AUTH_ERROR | 无效或缺失 Bearer Token |
UNAUTHORIZED | 401 | AUTH_ERROR | 缺少或无效的 API Key(同 INVALID_API_KEY) |
CHANNEL_NOT_AUTHORIZED | 401 | AUTH_ERROR | App 未授权该渠道 |
FORBIDDEN | 403 | AUTH_ERROR | Key 有效但无权限(如渠道未开通) |
INSUFFICIENT_SCOPE | 403 | AUTH_ERROR | API Key 缺少该路由所需 scope |
CHANNEL_NOT_ENABLED | 403 | AUTH_ERROR | 该 App 未启用此 channel |
CHANNEL_AUTH_REQUIRED | 403 | AUTH_ERROR | 尚未完成该 channel 授权 |
CHANNEL_AUTH_EXPIRED | 403 | AUTH_ERROR | 授权已过期,需在 Portal 重新授权 |
CHANNEL_AUTH_REVOKED | 403 | AUTH_ERROR | 授权已撤销 |
FULFILLMENT_MODE_NOT_SUPPORTED | 403 | AUTH_ERROR | 当前履约模式不支持(如 self 调用履约接口) |
FULFILLMENT_ACCESS_REQUIRED | 403 | AUTH_ERROR | (预留)缺少有效履约访问授权 |
FULFILLMENT_ACCESS_SUSPENDED | 403 | AUTH_ERROR | (预留)履约访问已暂停 |
WAREHOUSE_AUTH_REQUIRED | 403 | AUTH_ERROR | 仓库代履约但未完成仓库授权 |
WAREHOUSE_AUTH_EXPIRED | 403 | AUTH_ERROR | 仓库授权已过期 |
WAREHOUSE_AUTH_INVALID | 403 | AUTH_ERROR | 仓库拒绝开发者鉴权 |
VALIDATION_ERROR | 400 | VALIDATION_ERROR | 请求参数不合法 / 币种不支持等 |
UNSUPPORTED_CHANNEL | 400 | VALIDATION_ERROR | 未知 channel 值 |
UNSUPPORTED_FIELD | 400 | VALIDATION_ERROR | 该路由不允许此字段 |
NOT_FOUND | 404 | VALIDATION_ERROR | 路由或资源不存在 |
CHANNEL_CAPABILITY_NOT_SUPPORTED | 400 | CHANNEL_ERROR | 该渠道不支持此接口 |
CHANNEL_UPSTREAM_ERROR | 502 | CHANNEL_ERROR | 阿里官方接口失败(已脱敏) |
WAREHOUSE_UPSTREAM_ERROR | 502 | CHANNEL_ERROR | 仓库/履约商上游失败(已脱敏) |
INTERNAL_ERROR | 500 | INTERNAL_ERROR | 服务内部错误 — 可退避重试 |
RATE_LIMIT_EXCEEDED | 429 | RATE_LIMIT_ERROR | 超过每分钟/突发限流 |
QUOTA_EXCEEDED | 429 | RATE_LIMIT_ERROR | 当日渠道配额已用尽 |
PLATFORM_QUOTA_EXCEEDED | 429 | RATE_LIMIT_ERROR | 平台该渠道月度总容量已达上限 |
PAYMENT_DECLINED | 402 | VALIDATION_ERROR | 支付被拒绝 |
PAYMENT_INSUFFICIENT_FUNDS | 402 | VALIDATION_ERROR | 余额不足(采购支付) |
ORDER_ALREADY_PAID | 409 | VALIDATION_ERROR | 订单已支付 |
ORDER_CANCELLED | 409 | VALIDATION_ERROR | 订单已取消 |
PRODUCT_UNAVAILABLE | 422 | VALIDATION_ERROR | 商品不可售 / 已下架 |
IDEMPOTENCY_CONFLICT | 409 | VALIDATION_ERROR | 外部单号/幂等键冲突 |
EXTERNAL_ORDER_ID_ALREADY_EXISTS | 409 | VALIDATION_ERROR | external_order_id 在当前 App 内已使用 |
PARCEL_NOT_FOUND | 404 | VALIDATION_ERROR | 无效或尚未入库的包裹号 |
INVALID_SHIPPING_CHANNEL | 400 | VALIDATION_ERROR | 无效的 shipping_channel_code |
INSUFFICIENT_BALANCE | 402 | VALIDATION_ERROR | 履约钱包余额不足(支付/退运确认等) |
SHIPMENT_ALREADY_PAID | 409 | VALIDATION_ERROR | 国际运输单已支付 |
SHIPMENT_NOT_FOUND | 404 | VALIDATION_ERROR | 运输单不存在或无权限 |
SHIPMENT_NOT_INTERCEPTABLE | 409 | VALIDATION_ERROR | 当前状态无法申请拦截 |
SHIPMENT_INTERCEPTION_ALREADY_REQUESTED | 409 | VALIDATION_ERROR | 已经提交过拦截申请 |
INVALID_INTERCEPTION_REASON | 422 | VALIDATION_ERROR | 拦截 reason CODE 不合法 |
INTERCEPTION_REMARK_REQUIRED | 422 | VALIDATION_ERROR | reason = OTHER 时 remark 必填 |
SHIPMENT_CREATE_EXCEPTION | 400 | VALIDATION_ERROR | 创单被拒绝(未填物品属性、包裹未入库等,见 message) |
SHIPMENT_NOT_CANCELLABLE | 409 | VALIDATION_ERROR | 当前状态不可取消运输单 |
SHIPMENT_ALREADY_CANCELLED | 409 | VALIDATION_ERROR | 运输单已取消 |
PACKAGE_ALREADY_CONSOLIDATED | 409 | VALIDATION_ERROR | 包裹已在其他运输单中 |
INBOUND_TRACKING_ALREADY_SHIPPED | 409 | VALIDATION_ERROR | 物流单号已关联已发货包裹 |
INBOUND_TRACKING_ALREADY_EXISTS | 409 | VALIDATION_ERROR | 物流单号已存在 |
INBOUND_VALIDATION_FAILED | 422 | VALIDATION_ERROR | 入库预报字段校验失败 |
INBOUND_NOT_FOUND | 404 | VALIDATION_ERROR | Inbound 不存在或无权 |
PACKAGE_NOT_FOUND | 404 | VALIDATION_ERROR | 包裹不存在或无权访问 |
INBOUND_NOT_EDITABLE | 409 | VALIDATION_ERROR | 当前状态不可取消/修改 |
INBOUND_ALREADY_RECEIVED | 409 | VALIDATION_ERROR | 已到仓,不可取消预报 |
INBOUND_PACKAGE_MISMATCH | 409 | VALIDATION_ERROR | 无法关联到给定入库/包裹 |
INVALID_TRACKING_NUMBER | 422 | VALIDATION_ERROR | 物流单号格式无效 |
PACKAGE_COUNT_INVALID | 422 | VALIDATION_ERROR | package_count 非法 |
TOTAL_VALUE_INVALID | 422 | VALIDATION_ERROR | total_value 非法 |
UNSUPPORTED_CURRENCY | 422 | VALIDATION_ERROR | 币种不支持(Inbound:CNY/USD/KRW) |
UNCLAIMED_PACKAGE_NOT_FOUND | 404 | VALIDATION_ERROR | 无人认领包裹不存在 |
TRACKING_NUMBER_MISMATCH | 422 | VALIDATION_ERROR | 认领时完整物流单号不匹配 |
PACKAGE_ALREADY_CLAIMED | 409 | VALIDATION_ERROR | 包裹已被认领 |
PACKAGE_NOT_CLAIMABLE | 409 | VALIDATION_ERROR | 当前状态不可认领 |
CLAIM_ATTEMPTS_EXCEEDED | 429 | RATE_LIMIT_ERROR | 同一 ucp 认领失败次数过多 |
RETURN_NOT_FOUND | 404 | VALIDATION_ERROR | 退运单不存在或无权 |
RETURN_NOT_CONFIRMABLE | 409 | VALIDATION_ERROR | 当前状态不可确认退运 |
RETURN_NOT_CANCELLABLE | 409 | VALIDATION_ERROR | 当前状态不可取消退运 |
RETURN_ALREADY_RETURNED | 409 | VALIDATION_ERROR | 已退货 |
RETURN_ALREADY_CANCELLED | 409 | VALIDATION_ERROR | 已取消 / 已作废 |
RETURN_FEE_NOT_READY | 409 | VALIDATION_ERROR | 退运费用未就绪 |
RETURN_FEE_CHANGED | 409 | VALIDATION_ERROR | 确认金额与当前费用不一致 |
PACKAGE_NOT_RETURNABLE | 409 | VALIDATION_ERROR | 包裹状态不可退运 |
INVALID_RETURN_REASON | 422 | VALIDATION_ERROR | 退运原因 CODE 非法 |
INVALID_RETURN_ADDRESS | 422 | VALIDATION_ERROR | 退货地址非法 |
RETURN_VALIDATION_FAILED | 422 | VALIDATION_ERROR | 退运字段校验失败 |
VALUE_ADDED_SERVICE_NOT_FOUND | 422 | VALIDATION_ERROR | 增值服务 CODE 不存在 |
VALUE_ADDED_SERVICE_UNAVAILABLE | 422 | VALIDATION_ERROR | 增值服务当前不可用 |
VALUE_ADDED_SERVICE_INVALID_STAGE | 422 | VALIDATION_ERROR | 增值服务阶段不匹配 |
VALUE_ADDED_SERVICE_QUANTITY_INVALID | 422 | VALIDATION_ERROR | 增值服务数量非法 |
SERVICE_REQUEST_NOT_FOUND | 404 | VALIDATION_ERROR | 服务申请不存在 |
RESOURCE_NOT_FOUND | 404 | VALIDATION_ERROR | 关联资源不存在 |
RESOURCE_NOT_ELIGIBLE_FOR_SERVICE | 409 | VALIDATION_ERROR | 资源状态不可申请服务 |
SERVICE_FEE_NOT_READY | 409 | VALIDATION_ERROR | 服务报价未就绪 |
SERVICE_FEE_CHANGED | 409 | VALIDATION_ERROR | 服务确认金额不一致 |
SERVICE_REQUEST_VALIDATION_FAILED | 422 | VALIDATION_ERROR | 服务申请字段校验失败 |
TRANSACTION_NOT_FOUND | 404 | VALIDATION_ERROR | 账务流水不存在或不属于当前 App |
INVOICE_NOT_FOUND | 404 | VALIDATION_ERROR | 发票不存在或不属于当前 App |
TRANSACTION_NOT_INVOICEABLE | 409 | VALIDATION_ERROR | 流水不可开票 |
TRANSACTION_ALREADY_INVOICED | 409 | VALIDATION_ERROR | 流水已开票 |
TRANSACTION_INVOICE_PENDING | 409 | VALIDATION_ERROR | 流水开票处理中 |
INVOICE_NOT_DOWNLOADABLE | 409 | VALIDATION_ERROR | 发票未开具,不可下载 |
INVOICE_VALIDATION_FAILED | 422 | VALIDATION_ERROR | 发票申请校验失败 |
INVOICE_CURRENCY_MISMATCH | 422 | VALIDATION_ERROR | 发票币种不一致 |
INVALID_INVOICE_TITLE | 422 | VALIDATION_ERROR | 发票抬头非法 |
INVALID_TAX_NUMBER | 422 | VALIDATION_ERROR | 税号非法 |
INVALID_BILLING_ADDRESS | 422 | VALIDATION_ERROR | billing_address 缺失或无效 |
TICKET_NOT_FOUND | 404 | VALIDATION_ERROR | 工单不存在或不属于当前 Application |
TICKET_NOT_REPLYABLE | 409 | VALIDATION_ERROR | 工单不可回复(如已关闭) |
TICKET_ALREADY_CLOSED | 409 | VALIDATION_ERROR | 工单已关闭 |
INVALID_TICKET_CATEGORY | 422 | VALIDATION_ERROR | 工单分类非法 |
INVALID_TICKET_PRIORITY | 422 | VALIDATION_ERROR | 工单优先级非法 |
INVALID_RELATED_RESOURCE | 422 | VALIDATION_ERROR | 关联资源类型非法 |
TICKET_VALIDATION_FAILED | 422 | VALIDATION_ERROR | 工单字段校验失败 |
RELATED_RESOURCE_NOT_FOUND | 404 | VALIDATION_ERROR | 关联业务资源不存在或不属于当前 App |
MESSAGE_REQUIRED | 422 | VALIDATION_ERROR | 消息内容必填 |
MESSAGE_TOO_LONG | 422 | VALIDATION_ERROR | 消息超过 10000 字符 |
业务失败(HTTP 200) {#business-failures}
采购 preview/create/pay 在市场拒绝但 Gateway 请求合法时,可能返回 HTTP 200 且 success: false。
{
"channel": "1688",
"success": false,
"code": "ORDER_CREATE_FAILED",
"message": "One or more lines could not be purchased.",
"failed_offers": [
{
"offer_id": "...",
"spec_id": "...",
"error_code": "STOCK_NOT_ENOUGH",
"error_message": "Insufficient stock"
}
],
"request_id": "req_..."
}- 先检查
success - 查看
unavailable_lines(preview)或failed_offers(create) - 部分成功:1688 可能
success: true且failed_offers非空
商品上游失败 {#upstream-product-errors}
无效淘宝口令、商品不存在或厂商超时等,商品路由通常返回 502 CHANNEL_UPSTREAM_ERROR,而不是空商品壳。
建议处理 {#handling}
- 每条错误路径记录
request_id。 - 对
429/500指数退避重试;未修正输入前不要重试400/401。 - 对
502 CHANNEL_UPSTREAM_ERROR,向运维展示厂商信息;瞬时故障可再试一次。 - 创单使用
external_order_id/ 淘宝outer_purchase_id做幂等 — 见 采购订单。
获取支持
需要集成帮助?请联系开发者支持 support@hiobuy.com · 预计 1–2 个工作日内回复