Skip to main content
عند فشل الطلب، تُعيد Integration API رمز حالة HTTP قياسيًا وجسمًا بصيغة RFC 7807application/problem+json:

دليل الأخطاء

جميع مُعرِّفات type تقع تحت https://integration.fatorly.com/errors/:
الفرق بين 400 و422. يعني 400 أن الطلب نفسه مشوّه — JSON غير صالح أو ترويسة مفقودة أو حقل لا يجتاز التحقّق. أما 422 فيعني أن الطلب سليم البنية لكن الفاتورة الإلكترونية الناتجة لا تجتاز قواعد PINT-AE الإماراتية.
الفرق بين 500 و502. يعني 502 أن طلبك سليم لكن خطوة عليا فشلت — من الآمن إعادة المحاولة مع تباطؤ تدريجي. أما 500 فهو خلل غير متوقَّع؛ إن استمر تواصل مع الدعم مزوِّدًا traceId.

حدود معدل الطلبات

الطلبات محدودة لكل شركة. استجابة 429 تحمل ترويستين:
  • Retry-After — عدد الثواني قبل إعادة المحاولة.
  • X-RateLimit-Remaining — دائمًا 0 عند رفض الطلب.

التحقّق والحصّة

  • ترويسة Idempotency-Key إلزامية في كل POST (باستثناء …/validate)؛ وإغفالها هو السبب الأكثر شيوعًا لـ 400. راجع معرّف عدم التكرار.
  • يكون exemptionReasonCode مطلوبًا على أي سطر يكون فيه taxCategoryCode بقيمة E؛ وإغفاله يُطلق خطأ تحقّق.
  • يتعلّق 402 بخطتك لا بطلبك — فالطلب كان صالحًا. ولن تُجدي إعادة المحاولة حتى تُعاد الحصّة.

إخفاقات التسليم بعد الإرسال

الطلب POST /invoices/{id}/submit غير متزامن: يعيد 202 بالحالة Pending، بينما يجري التحقّق من قواعد PINT-AE والتسليم عبر Peppol في الخلفية. إذا فشل أيّ منهما تتحوّل حالة المستند إلى DeliveryFailed — أي أنّ نجاح 202 عند الإرسال لا يضمن التسليم.
  • اعرض كل المستندات الفاشلة عبر GET /invoices/failed — يحمل كل عنصر الحقل submissionError مع السبب (فشل قاعدة PINT-AE أو خطأ تسليم عبر Peppol).
  • أو استعلم عن مستند واحد عبر GET /invoices/{id} — عندما تكون حالته DeliveryFailed يتضمّن الردّ نفس الحقل submissionError.
للمعالجة: صحّح البيانات عبر PUT /invoices/{id}، ثم تحقّق عبر POST /invoices/{id}/validate حتى يعيد "valid": true، ثم أعد الإرسال عبر POST /invoices/{id}/submit.
يُجري POST /invoices/{id}/validate نفس الفحوص التي تجري في الخلفية عند الإرسال دون حفظ أي شيء — يمكنك استدعاؤه كما تشاء أثناء تصحيح المستند، وهو طلب POST الوحيد الذي لا يتطلّب ترويسة Idempotency-Key.

معالجة الأخطاء في الكود

  • اعتمد في منطق المعالجة على مُعرِّف type (أو status)، لا على نص title أو detail أبدًا.
  • أعِد محاولة الأخطاء العابرة (429 و500 و502 وأخطاء الشبكة والمهل المنتهية) مع تباطؤ تدريجي، وبنفس Idempotency-Key في طلبات POST كي لا تُكرّر مستندًا أبدًا.
  • لا تُعِد محاولة 400/401/402/403/404/409/422 دون تفكير — فهذه تحتاج إلى إصلاح (تصحيح الحمولة أو المفتاح أو صلاحياته أو خطتك)، لا إلى محاولة أخرى.
  • سجِّل قيمة traceId لأي خطأ 500/502 غير متوقَّع — يستطيع الدعم من خلالها الوصول إلى الطلب نفسه في سجلات المنصة.

ذات صلة