الأخطاء
يستخدم HIOBuy شكلين للأخطاء: أخطاء البروتوكول (غير 2xx مع error) وإخفاقات الأعمال (HTTP 200 مع success: false في بعض مسارات الطلب).
Protocol errors (HTTP 4xx / 5xx) {#protocol-errors}
{
"error": {
"code": "INBOUND_VALIDATION_FAILED",
"message": "Some inbound information is missing or invalid.",
"request_id": "req_abc123",
"category": "VALIDATION_ERROR",
"field": "tracking_number",
"details": {
"fields": [
{
"field": "items[0].name",
"code": "REQUIRED",
"message": "Product name is required."
}
]
}
}
}| Field | Description |
|---|---|
error.code | Machine-readable enum — use for branching logic |
error.message | Human-readable explanation (English) |
error.request_id | Same as x-request-id response header |
error.category | Coarse grouping: AUTH_ERROR, RATE_LIMIT_ERROR, VALIDATION_ERROR, CHANNEL_ERROR, INTERNAL_ERROR |
error.field | Optional primary field path related to this error |
error.details | Optional object; validation may include details.fields: [{ field, code, message }] |
error.upstream | Optional vendor error summary on CHANNEL_UPSTREAM_ERROR (sanitized) |
Field-level details.fields[].code values: REQUIRED | INVALID_VALUE | INVALID_FORMAT | OUT_OF_RANGE.
HTTP status principles
| HTTP | When |
|---|---|
400 | Unparseable JSON / generic validation |
401 | Invalid API key |
403 | Authenticated but not allowed (including fulfillment mode gate) |
404 | Missing or inaccessible resource |
409 | State / uniqueness conflict |
422 | Parsed body fails business validation |
429 | Rate limit / quota |
500 / 502 / 503 | Internal or upstream failure |
مرجع رموز الأخطاء {#error-codes}
الكتالوج المعياري: data/errors.catalog.json. ملخص:
| Code | HTTP | Category | When |
|---|---|---|---|
INVALID_API_KEY | 401 | AUTH_ERROR | رمز Bearer غير صالح أو مفقود |
UNAUTHORIZED | 401 | AUTH_ERROR | مفتاح API مفقود/غير صالح |
CHANNEL_NOT_AUTHORIZED | 401 | AUTH_ERROR | القناة غير مصرّح بها لهذا التطبيق |
FORBIDDEN | 403 | AUTH_ERROR | المفتاح صالح لكن غير مسموح |
INSUFFICIENT_SCOPE | 403 | AUTH_ERROR | نطاق (scope) مطلوب للمسار مفقود |
CHANNEL_NOT_ENABLED | 403 | AUTH_ERROR | القناة غير مفعّلة لهذا التطبيق |
CHANNEL_AUTH_REQUIRED | 403 | AUTH_ERROR | تفويض القناة غير مكتمل |
CHANNEL_AUTH_EXPIRED | 403 | AUTH_ERROR | انتهى تفويض القناة — أعد التفويض في Portal |
CHANNEL_AUTH_REVOKED | 403 | AUTH_ERROR | تم إلغاء تفويض القناة |
FULFILLMENT_MODE_NOT_SUPPORTED | 403 | AUTH_ERROR | /v1/fulfillment/* على تطبيق self-fulfillment |
FULFILLMENT_ACCESS_REQUIRED | 403 | AUTH_ERROR | (محجوز) لم يُمنح وصول fulfillment |
FULFILLMENT_ACCESS_SUSPENDED | 403 | AUTH_ERROR | (محجوز) وصول fulfillment معلّق |
WAREHOUSE_AUTH_REQUIRED | 403 | AUTH_ERROR | fulfillment مستودع دون تفويض المستودع |
WAREHOUSE_AUTH_EXPIRED | 403 | AUTH_ERROR | انتهى تفويض المستودع |
WAREHOUSE_AUTH_INVALID | 403 | AUTH_ERROR | Warehouse rejected developer authentication |
VALIDATION_ERROR | 400 | VALIDATION_ERROR | حقول body ناقصة/غير صالحة، عملة غير مدعومة |
UNSUPPORTED_CHANNEL | 400 | VALIDATION_ERROR | قيمة channel غير معروفة |
UNSUPPORTED_FIELD | 400 | VALIDATION_ERROR | حقل غير مسموح في هذا المسار |
NOT_FOUND | 404 | VALIDATION_ERROR | المسار أو المورد غير موجود |
CHANNEL_CAPABILITY_NOT_SUPPORTED | 400 | CHANNEL_ERROR | العملية غير متاحة على هذه القناة |
CHANNEL_UPSTREAM_ERROR | 502 | CHANNEL_ERROR | رفض السوق الطلب (مُنقّى) |
WAREHOUSE_UPSTREAM_ERROR | 502 | CHANNEL_ERROR | فشل upstream المستودع/fulfillment (مُنقّى) |
INTERNAL_ERROR | 500 | INTERNAL_ERROR | فشل Gateway غير متوقع — أعد المحاولة مع backoff |
RATE_LIMIT_EXCEEDED | 429 | RATE_LIMIT_ERROR | تجاوز حد المعدل / الدقيقة |
QUOTA_EXCEEDED | 429 | RATE_LIMIT_ERROR | استنفاد الحصة اليومية للقناة |
PLATFORM_QUOTA_EXCEEDED | 429 | RATE_LIMIT_ERROR | حد السعة الشهرية للمنصة |
PAYMENT_DECLINED | 402 | VALIDATION_ERROR | رُفض الدفع |
PAYMENT_INSUFFICIENT_FUNDS | 402 | VALIDATION_ERROR | رصيد غير كافٍ |
ORDER_ALREADY_PAID | 409 | VALIDATION_ERROR | الطلب مدفوع مسبقًا |
ORDER_CANCELLED | 409 | VALIDATION_ERROR | الطلب ملغى مسبقًا |
PRODUCT_UNAVAILABLE | 422 | VALIDATION_ERROR | المنتج غير متاح / أُزيل |
IDEMPOTENCY_CONFLICT | 409 | VALIDATION_ERROR | تكرار external_shipment_id أو مفتاحidempotency |
EXTERNAL_ORDER_ID_ALREADY_EXISTS | 409 | VALIDATION_ERROR | external_order_id مستخدم في هذا التطبيق |
PARCEL_NOT_FOUND | 404 | VALIDATION_ERROR | طرد غير صالح أو لم يدخل بعد |
INVALID_SHIPPING_CHANNEL | 400 | VALIDATION_ERROR | shipping_channel_code غير صالح |
INSUFFICIENT_BALANCE | 402 | VALIDATION_ERROR | رصيد محفظة fulfillment منخفض |
SHIPMENT_ALREADY_PAID | 409 | VALIDATION_ERROR | International shipment already paid |
SHIPMENT_NOT_FOUND | 404 | VALIDATION_ERROR | Shipment missing or not owned |
SHIPMENT_NOT_INTERCEPTABLE | 409 | VALIDATION_ERROR | Current shipment state cannot request intercept |
SHIPMENT_INTERCEPTION_ALREADY_REQUESTED | 409 | VALIDATION_ERROR | Intercept already requested |
INVALID_INTERCEPTION_REASON | 422 | VALIDATION_ERROR | Intercept reason CODE is invalid |
INTERCEPTION_REMARK_REQUIRED | 422 | VALIDATION_ERROR | remark required when reason is OTHER |
SHIPMENT_CREATE_EXCEPTION | 400 | VALIDATION_ERROR | Create refused (missing item attributes, parcel not inbound, etc. — read message) |
SHIPMENT_NOT_CANCELLABLE | 409 | VALIDATION_ERROR | Shipment cannot be cancelled in current status |
SHIPMENT_ALREADY_CANCELLED | 409 | VALIDATION_ERROR | Shipment already cancelled |
PACKAGE_ALREADY_CONSOLIDATED | 409 | VALIDATION_ERROR | Parcel already in another shipment |
INBOUND_TRACKING_ALREADY_SHIPPED | 409 | VALIDATION_ERROR | التتبع مرتبط بطرد مشحون |
INBOUND_TRACKING_ALREADY_EXISTS | 409 | VALIDATION_ERROR | التتبع مسجّل مسبقًا |
INBOUND_VALIDATION_FAILED | 422 | VALIDATION_ERROR | أخطاء حقول الوارد في details.fields |
INBOUND_NOT_FOUND | 404 | VALIDATION_ERROR | الوارد مفقود أو غير مملوك |
PACKAGE_NOT_FOUND | 404 | VALIDATION_ERROR | الطرد مفقود أو غير مملوك |
INBOUND_NOT_EDITABLE | 409 | VALIDATION_ERROR | لا يمكن تعديل الوارد في هذه الحالة |
INBOUND_ALREADY_RECEIVED | 409 | VALIDATION_ERROR | تم الاستلام في المستودع |
INBOUND_PACKAGE_MISMATCH | 409 | VALIDATION_ERROR | تعذر الربط بالوارد/الطرد |
INVALID_TRACKING_NUMBER | 422 | VALIDATION_ERROR | تنسيق التتبع غير صالح |
PACKAGE_COUNT_INVALID | 422 | VALIDATION_ERROR | package_count غير صالح |
TOTAL_VALUE_INVALID | 422 | VALIDATION_ERROR | total_value غير صالح |
UNSUPPORTED_CURRENCY | 422 | VALIDATION_ERROR | عملة غير مدعومة (الوارد: CNY/USD/KRW) |
UNCLAIMED_PACKAGE_NOT_FOUND | 404 | VALIDATION_ERROR | طرد غير مُطالب به مفقود |
TRACKING_NUMBER_MISMATCH | 422 | VALIDATION_ERROR | فشل المطابقة الدقيقة عند المطالبة |
PACKAGE_ALREADY_CLAIMED | 409 | VALIDATION_ERROR | الطرد مُطالب به مسبقًا |
PACKAGE_NOT_CLAIMABLE | 409 | VALIDATION_ERROR | غير قابل للمطالبة في هذه الحالة |
CLAIM_ATTEMPTS_EXCEEDED | 429 | RATE_LIMIT_ERROR | محاولات مطالبة فاشلة كثيرة على ucp_* |
RETURN_NOT_FOUND | 404 | VALIDATION_ERROR | الإرجاع مفقود أو غير مملوك |
RETURN_NOT_CONFIRMABLE | 409 | VALIDATION_ERROR | لا يمكن تأكيد الإرجاع |
RETURN_NOT_CANCELLABLE | 409 | VALIDATION_ERROR | لا يمكن إلغاء الإرجاع |
RETURN_ALREADY_RETURNED | 409 | VALIDATION_ERROR | أُرجع مسبقًا |
RETURN_ALREADY_CANCELLED | 409 | VALIDATION_ERROR | أُلغي / أُبطل مسبقًا |
RETURN_FEE_NOT_READY | 409 | VALIDATION_ERROR | رسوم الإرجاع غير محسوبة بعد |
RETURN_FEE_CHANGED | 409 | VALIDATION_ERROR | مبلغ التأكيد ≠ fee.total |
PACKAGE_NOT_RETURNABLE | 409 | VALIDATION_ERROR | حالة الطرد تمنع الإرجاع |
INVALID_RETURN_REASON | 422 | VALIDATION_ERROR | رمز سبب إرجاع غير معروف |
INVALID_RETURN_ADDRESS | 422 | VALIDATION_ERROR | عنوان seller_return غير صالح |
RETURN_VALIDATION_FAILED | 422 | VALIDATION_ERROR | فشل التحقق من حقول الإرجاع |
VALUE_ADDED_SERVICE_NOT_FOUND | 422 | VALIDATION_ERROR | رمز VAS غير معروف |
VALUE_ADDED_SERVICE_UNAVAILABLE | 422 | VALIDATION_ERROR | VAS موجود لكنه غير متاح |
VALUE_ADDED_SERVICE_INVALID_STAGE | 422 | VALIDATION_ERROR | VAS غير مسموح في هذه المرحلة |
VALUE_ADDED_SERVICE_QUANTITY_INVALID | 422 | VALIDATION_ERROR | كمية VAS غير صالحة |
SERVICE_REQUEST_NOT_FOUND | 404 | VALIDATION_ERROR | طلب الخدمة مفقود |
RESOURCE_NOT_FOUND | 404 | VALIDATION_ERROR | المورد المرتبط مفقود |
RESOURCE_NOT_ELIGIBLE_FOR_SERVICE | 409 | VALIDATION_ERROR | الطرد/الشحنة غير مؤهل للخدمة |
SERVICE_FEE_NOT_READY | 409 | VALIDATION_ERROR | رسوم الخدمة غير جاهزة |
SERVICE_FEE_CHANGED | 409 | VALIDATION_ERROR | مبلغ التأكيد ≠ رسوم الخدمة |
SERVICE_REQUEST_VALIDATION_FAILED | 422 | VALIDATION_ERROR | فشل التحقق من طلب الخدمة |
TRANSACTION_NOT_FOUND | 404 | VALIDATION_ERROR | المعاملة مفقودة أو غير مملوكة |
INVOICE_NOT_FOUND | 404 | VALIDATION_ERROR | الفاتورة مفقودة أو غير مملوكة |
TRANSACTION_NOT_INVOICEABLE | 409 | VALIDATION_ERROR | لا يمكن فوترة المعاملة |
TRANSACTION_ALREADY_INVOICED | 409 | VALIDATION_ERROR | المعاملة مُفوترة مسبقًا |
TRANSACTION_INVOICE_PENDING | 409 | VALIDATION_ERROR | فاتورة قيد الانتظار |
INVOICE_NOT_DOWNLOADABLE | 409 | VALIDATION_ERROR | الفاتورة لم تُصدر بعد |
INVOICE_VALIDATION_FAILED | 422 | VALIDATION_ERROR | فشل التحقق من طلب الفاتورة |
INVOICE_CURRENCY_MISMATCH | 422 | VALIDATION_ERROR | عدم تطابق عملة الفاتورة |
INVALID_INVOICE_TITLE | 422 | VALIDATION_ERROR | عنوان فاتورة غير صالح |
INVALID_TAX_NUMBER | 422 | VALIDATION_ERROR | رقم ضريبي غير صالح |
INVALID_BILLING_ADDRESS | 422 | VALIDATION_ERROR | billing_address missing or invalid |
TICKET_NOT_FOUND | 404 | VALIDATION_ERROR | التذكرة مفقودة أو خارج Application |
TICKET_NOT_REPLYABLE | 409 | VALIDATION_ERROR | لا يمكن الرد على التذكرة (مثلًا مغلقة) |
TICKET_ALREADY_CLOSED | 409 | VALIDATION_ERROR | التذكرة مغلقة مسبقًا |
INVALID_TICKET_CATEGORY | 422 | VALIDATION_ERROR | فئة تذكرة غير صالحة |
INVALID_TICKET_PRIORITY | 422 | VALIDATION_ERROR | أولوية تذكرة غير صالحة |
INVALID_RELATED_RESOURCE | 422 | VALIDATION_ERROR | نوع related_resource غير صالح |
TICKET_VALIDATION_FAILED | 422 | VALIDATION_ERROR | فشل التحقق من حقول التذكرة |
RELATED_RESOURCE_NOT_FOUND | 404 | VALIDATION_ERROR | مورد الأعمال المرتبط مفقود |
MESSAGE_REQUIRED | 422 | VALIDATION_ERROR | نص الرسالة مطلوب |
MESSAGE_TOO_LONG | 422 | VALIDATION_ERROR | الرسالة تتجاوز 10000 حرف |
Business failures (HTTP 200) {#business-failures}
Procurement preview/create/pay may return HTTP 200 with success: false when the marketplace refuses the operation but the Gateway request was valid.
{
"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_..."
}- Check
successbefore treating the call as completed - Inspect
unavailable_lines(preview) orfailed_offers(create) - Partial success: 1688 may return
success: truewith non-emptyfailed_offers
Product upstream failures {#upstream-product-errors}
Invalid Taobao口令, missing product, or vendor timeouts on product routes typically return 502 with CHANNEL_UPSTREAM_ERROR — not an empty product shell.
Recommended handling {#handling}
- Log
request_idon every error path. - Retry
429and500with exponential backoff; do not retry400/401without fixing input. - On
502 CHANNEL_UPSTREAM_ERROR, surface vendor message to ops; optionally retry once for transient outages. - Order create: use
external_order_id/ Taobaoouter_purchase_idfor idempotency — see Procurement orders.
Get Support
Need integration help? Contact Developer Support at support@hiobuy.com · Response within 1–2 business days