Errores

HIOBuy usa dos formas de error: errores de protocolo (HTTP no 2xx con un objeto error) y resultados de negocio (HTTP 200 con success: false en algunas rutas de pedidos).

Errores de protocolo (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"
  }
}
CampoDescripción
error.codeEnumeración legible por máquina; úsala para lógica de ramificación
error.messageExplicación legible por humanos (inglés)
error.request_idIgual que el encabezado de respuesta x-request-id
error.categoryAgrupación general: AUTH_ERROR, RATE_LIMIT_ERROR, VALIDATION_ERROR, CHANNEL_ERROR, INTERNAL_ERROR
error.upstreamResumen opcional del error del proveedor en CHANNEL_UPSTREAM_ERROR (saneado)

Referencia de códigos de error {#error-codes}

El catálogo canónico legible por máquina es data/errors.catalog.json. Resumen:

CódigoHTTPCategoríaCuándo
INVALID_API_KEY401AUTH_ERRORToken Bearer inválido o ausente
CHANNEL_NOT_AUTHORIZED401AUTH_ERRORCanal no autorizado para esta app
INSUFFICIENT_SCOPE403AUTH_ERROROperación no permitida para esta clave/app
FULFILLMENT_MODE_NOT_SUPPORTED403AUTH_ERROR/v1/fulfillment/* en una app con fulfillment propio
VALIDATION_ERROR400VALIDATION_ERRORCampos del cuerpo ausentes/invalidos, currency no compatible
UNSUPPORTED_CHANNEL400VALIDATION_ERRORValor channel desconocido
UNSUPPORTED_FIELD400VALIDATION_ERRORPor ejemplo, currency en rutas de producto
NOT_FOUND404VALIDATION_ERROREl pedido o recurso no existe
RATE_LIMIT_EXCEEDED429RATE_LIMIT_ERRORLímite de tasa por minuto
QUOTA_EXCEEDED429RATE_LIMIT_ERRORCuota diaria de canal agotada
PLATFORM_QUOTA_EXCEEDED429RATE_LIMIT_ERRORLímite de capacidad de toda la plataforma
CHANNEL_CAPABILITY_NOT_SUPPORTED400CHANNEL_ERROROperación no disponible en este canal
CHANNEL_UPSTREAM_ERROR502CHANNEL_ERROREl marketplace rechazó la llamada
INTERNAL_ERROR500INTERNAL_ERRORFallo inesperado de Gateway; reintenta con backoff
PARCEL_NOT_FOUND404VALIDATION_ERRORPaquete inválido o aún no ingresado (fulfillment)
INVALID_SHIPPING_CHANNEL400VALIDATION_ERRORshipping_channel_code incorrecto
INSUFFICIENT_BALANCE402VALIDATION_ERRORSaldo insuficiente en la billetera de fulfillment para pagar

Fallos de negocio (HTTP 200) {#business-failures}

Procurement preview/create/pay puede devolver HTTP 200 con success: false cuando el marketplace rechaza la operación pero la solicitud de Gateway era válida.

{
  "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_..."
}
  • Comprueba success antes de tratar la llamada como completada
  • Inspecciona unavailable_lines (preview) o failed_offers (create)
  • Éxito parcial: 1688 puede devolver success: true con failed_offers no vacío

Fallos upstream de productos {#upstream-product-errors}

Taobao口令 inválido, producto inexistente o timeouts del proveedor en rutas de producto normalmente devuelven 502 con CHANNEL_UPSTREAM_ERROR, no una estructura de producto vacía.

Manejo recomendado {#handling}

  1. Registra request_id en cada ruta de error.
  2. Reintenta 429 y 500 con backoff exponencial; no reintentes 400 / 401 sin corregir la entrada.
  3. En 502 CHANNEL_UPSTREAM_ERROR, muestra el mensaje del proveedor a operaciones; opcionalmente reintenta una vez si parece una interrupción transitoria.
  4. Creación de pedidos: usa external_order_id / outer_purchase_id de Taobao para idempotencia; consulta Pedidos de compra.