Ошибки

HIOBuy использует две формы ошибок: protocol errors (HTTP не-2xx с объектом error) и business outcomes (HTTP 200 с success: false на некоторых order routes).

Protocol errors (HTTP 4xx / 5xx) {#protocol-errors}

{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "product_id, url, mi_id, or tao_password is required.",
    "request_id": "req_abc123",
    "category": "VALIDATION_ERROR"
  }
}
ПолеОписание
error.codeМашиночитаемый enum — используйте для branching logic
error.messageЧеловекочитаемое объяснение (английский)
error.request_idТо же значение, что и response header x-request-id
error.categoryКрупная группа: AUTH_ERROR, RATE_LIMIT_ERROR, VALIDATION_ERROR, CHANNEL_ERROR, INTERNAL_ERROR
error.upstreamОпциональная сводка vendor error при CHANNEL_UPSTREAM_ERROR (sanitized)

Справочник кодов ошибок {#error-codes}

Канонический машиночитаемый каталог: data/errors.catalog.json. Кратко:

КодHTTPКатегорияКогда
INVALID_API_KEY401AUTH_ERRORНеверный или отсутствующий Bearer token
CHANNEL_NOT_AUTHORIZED401AUTH_ERRORКанал не авторизован для этого приложения
INSUFFICIENT_SCOPE403AUTH_ERRORОперация не разрешена для этого ключа/приложения
FULFILLMENT_MODE_NOT_SUPPORTED403AUTH_ERROR/v1/fulfillment/* на self-fulfillment app
VALIDATION_ERROR400VALIDATION_ERRORОтсутствующие/неверные поля body, неподдерживаемый currency
UNSUPPORTED_CHANNEL400VALIDATION_ERRORНеизвестное значение channel
UNSUPPORTED_FIELD400VALIDATION_ERRORНапример, currency на product routes
NOT_FOUND404VALIDATION_ERRORЗаказ или ресурс не существует
RATE_LIMIT_EXCEEDED429RATE_LIMIT_ERRORRate limit за минуту
QUOTA_EXCEEDED429RATE_LIMIT_ERRORДневная квота канала исчерпана
PLATFORM_QUOTA_EXCEEDED429RATE_LIMIT_ERRORPlatform-wide capacity limit
CHANNEL_CAPABILITY_NOT_SUPPORTED400CHANNEL_ERRORОперация недоступна на этом канале
CHANNEL_UPSTREAM_ERROR502CHANNEL_ERRORМаркетплейс отклонил вызов
INTERNAL_ERROR500INTERNAL_ERRORНеожиданный сбой Gateway — повторите с backoff
PARCEL_NOT_FOUND404VALIDATION_ERRORНеверная или еще не поступившая inbound parcel (fulfillment)
INVALID_SHIPPING_CHANNEL400VALIDATION_ERRORНекорректный shipping_channel_code
INSUFFICIENT_BALANCE402VALIDATION_ERRORНедостаточно средств в fulfillment wallet для pay

Business failures (HTTP 200) {#business-failures}

Procurement preview/create/pay может вернуть HTTP 200 с success: false, когда маркетплейс отказывает в операции, но запрос Gateway был валидным.

{
  "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

Product upstream failures {#upstream-product-errors}

Неверный Taobao口令, отсутствующий товар или vendor timeouts на product routes обычно возвращают 502 с CHANNEL_UPSTREAM_ERROR, а не пустую оболочку товара.

Рекомендуемая обработка {#handling}

  1. Логируйте request_id на каждом error path.
  2. Повторяйте 429 и 500 с exponential backoff; не повторяйте 400 / 401 без исправления input.
  3. При 502 CHANNEL_UPSTREAM_ERROR покажите vendor message операторам; при временных сбоях можно повторить один раз.
  4. Order create: используйте external_order_id / Taobao outer_purchase_id для идемпотентности — см. заказы закупки.