エラー

HIOBuy は2種類のエラー形式を使用します。プロトコルエラー (非 2xx HTTP と error オブジェクト) と、業務結果 (一部の注文ルートで HTTP 200 かつ success: false) です。

プロトコルエラー (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。分岐ロジックに使用します
error.message人が読める説明 (英語)
error.request_idx-request-id レスポンスヘッダーと同じ値
error.category大まかな分類: AUTH_ERROR, RATE_LIMIT_ERROR, VALIDATION_ERROR, CHANNEL_ERROR, INTERNAL_ERROR
error.upstreamCHANNEL_UPSTREAM_ERROR の場合の任意のベンダーエラー概要 (サニタイズ済み)

エラーコード一覧 {#error-codes}

正規の機械判読可能なカタログは data/errors.catalog.json です。概要:

コードHTTP分類発生条件
INVALID_API_KEY401AUTH_ERRORBearer トークンが無効または欠落
CHANNEL_NOT_AUTHORIZED401AUTH_ERRORこのアプリでチャネルが認可されていない
INSUFFICIENT_SCOPE403AUTH_ERRORこのキー/アプリでは操作が許可されていない
FULFILLMENT_MODE_NOT_SUPPORTED403AUTH_ERROR自社フルフィルメントアプリで /v1/fulfillment/* を使用
VALIDATION_ERROR400VALIDATION_ERROR本文フィールドの欠落/不正、未対応の currency
UNSUPPORTED_CHANNEL400VALIDATION_ERROR不明な channel
UNSUPPORTED_FIELD400VALIDATION_ERROR例: 商品ルートでの currency
NOT_FOUND404VALIDATION_ERROR注文またはリソースが存在しない
RATE_LIMIT_EXCEEDED429RATE_LIMIT_ERROR分単位のレート制限
QUOTA_EXCEEDED429RATE_LIMIT_ERROR日次チャネルクォータを使い切った
PLATFORM_QUOTA_EXCEEDED429RATE_LIMIT_ERRORプラットフォーム全体の容量制限
CHANNEL_CAPABILITY_NOT_SUPPORTED400CHANNEL_ERRORこのチャネルで操作を利用できない
CHANNEL_UPSTREAM_ERROR502CHANNEL_ERRORマーケットプレイスが呼び出しを拒否
INTERNAL_ERROR500INTERNAL_ERROR予期しない Gateway 障害。バックオフして再試行
PARCEL_NOT_FOUND404VALIDATION_ERROR無効、またはまだ入庫していない荷物 (フルフィルメント)
INVALID_SHIPPING_CHANNEL400VALIDATION_ERROR不正な shipping_channel_code
INSUFFICIENT_BALANCE402VALIDATION_ERROR支払いに必要なフルフィルメントウォレット残高が不足

業務上の失敗 (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 は failed_offers が空でない状態でも success: true を返す場合があります

商品アップストリームの失敗 {#upstream-product-errors}

商品ルートでの無効な Taobao口令、存在しない商品、ベンダータイムアウトは通常、空の商品シェルではなく CHANNEL_UPSTREAM_ERROR 付きの 502 を返します。

推奨される処理 {#handling}

  1. すべてのエラーパスで request_id をログに記録します。
  2. 429500 は指数バックオフで再試行します。入力を修正せずに 400 / 401 を再試行しないでください。
  3. 502 CHANNEL_UPSTREAM_ERROR では、ベンダーメッセージを運用担当に表示します。一時的な障害であれば任意で1回だけ再試行します。
  4. 注文作成では冪等性のために external_order_id / Taobao outer_purchase_id を使用します。Procurement orders を参照してください。