Erreurs

HIOBuy utilise deux formes d’erreur : les erreurs de protocole (HTTP non-2xx avec un objet error) et les résultats métier (HTTP 200 avec success: false sur certaines routes de commande).

Erreurs de protocole (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"
  }
}
ChampDescription
error.codeÉnumération lisible par machine — à utiliser pour la logique de branchement
error.messageExplication lisible par un humain (anglais)
error.request_idIdentique à l’en-tête de réponse x-request-id
error.categoryGroupe large : AUTH_ERROR, RATE_LIMIT_ERROR, VALIDATION_ERROR, CHANNEL_ERROR, INTERNAL_ERROR
error.upstreamRésumé optionnel de l’erreur fournisseur sur CHANNEL_UPSTREAM_ERROR (sanitisé)

Référence des codes d’erreur {#error-codes}

Le catalogue canonique lisible par machine est data/errors.catalog.json. Résumé :

CodeHTTPCatégorieQuand
INVALID_API_KEY401AUTH_ERRORJeton Bearer invalide ou manquant
CHANNEL_NOT_AUTHORIZED401AUTH_ERRORCanal non autorisé pour cette app
INSUFFICIENT_SCOPE403AUTH_ERROROpération non autorisée pour cette clé/app
FULFILLMENT_MODE_NOT_SUPPORTED403AUTH_ERROR/v1/fulfillment/* sur une app en fulfillment autonome
VALIDATION_ERROR400VALIDATION_ERRORChamps de corps manquants/invalides, currency non pris en charge
UNSUPPORTED_CHANNEL400VALIDATION_ERRORValeur channel inconnue
UNSUPPORTED_FIELD400VALIDATION_ERRORpar ex. currency sur les routes produit
NOT_FOUND404VALIDATION_ERRORCommande ou ressource inexistante
RATE_LIMIT_EXCEEDED429RATE_LIMIT_ERRORLimite de débit par minute
QUOTA_EXCEEDED429RATE_LIMIT_ERRORQuota quotidien de canal épuisé
PLATFORM_QUOTA_EXCEEDED429RATE_LIMIT_ERRORLimite de capacité globale de la plateforme
CHANNEL_CAPABILITY_NOT_SUPPORTED400CHANNEL_ERROROpération indisponible sur ce canal
CHANNEL_UPSTREAM_ERROR502CHANNEL_ERRORLa marketplace a rejeté l’appel
INTERNAL_ERROR500INTERNAL_ERRORÉchec inattendu de la passerelle — réessayez avec backoff
PARCEL_NOT_FOUND404VALIDATION_ERRORColis invalide ou pas encore reçu (fulfillment)
INVALID_SHIPPING_CHANNEL400VALIDATION_ERRORshipping_channel_code invalide
INSUFFICIENT_BALANCE402VALIDATION_ERRORSolde du wallet fulfillment insuffisant pour payer

Échecs métier (HTTP 200) {#business-failures}

La prévisualisation/création/le paiement d’approvisionnement peut retourner HTTP 200 avec success: false lorsque la marketplace refuse l’opération alors que la requête Gateway est valide.

{
  "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_..."
}
  • Vérifiez success avant de considérer l’appel comme terminé
  • Inspectez unavailable_lines (prévisualisation) ou failed_offers (création)
  • Succès partiel : 1688 peut retourner success: true avec failed_offers non vide

Échecs upstream produit {#upstream-product-errors}

Un Taobao口令 invalide, un produit manquant ou des timeouts fournisseur sur les routes produit retournent généralement 502 avec CHANNEL_UPSTREAM_ERROR — pas une enveloppe produit vide.

Gestion recommandée {#handling}

  1. Journalisez request_id sur tous les chemins d’erreur.
  2. Réessayez 429 et 500 avec backoff exponentiel ; ne réessayez pas 400 / 401 sans corriger l’entrée.
  3. Sur 502 CHANNEL_UPSTREAM_ERROR, affichez le message fournisseur aux opérations ; réessayez éventuellement une fois pour les interruptions transitoires.
  4. Création de commande : utilisez external_order_id / outer_purchase_id Taobao pour l’idempotence — voir Commandes d’approvisionnement.