오류

HIOBuy는 두 가지 오류 형태를 사용합니다. 프로토콜 오류(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_ERRORself-fulfillment 앱에서 /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 200success: 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 실패 {#upstream-product-errors}

잘못된 Taobao口令, 없는 상품, 상품 라우트의 벤더 타임아웃은 보통 빈 상품 셸이 아니라 502CHANNEL_UPSTREAM_ERROR를 반환합니다.

권장 처리 방식 {#handling}

  1. 모든 오류 경로에서 request_id를 기록합니다.
  2. 429500은 지수 백오프로 재시도하고, 400 / 401은 입력을 수정하기 전에는 재시도하지 마세요.
  3. 502 CHANNEL_UPSTREAM_ERROR에서는 운영팀에 벤더 메시지를 노출하고, 일시적 장애라면 선택적으로 한 번 재시도합니다.
  4. 주문 생성: 멱등성을 위해 external_order_id / Taobao outer_purchase_id를 사용하세요 — Procurement orders 참고.