Skip to main content

بنية استجابة الخطأ

تتبع جميع الأخطاء تنسيقًا موحدًا:

رموز حالة HTTP

رموز الخطأ الشائعة

MISSING_ACCESS_TOKEN

  • الرسالة: Access token is required
  • السبب: ترويسة X-Access-Token مفقودة
  • الإجراء: أدرج مفتاح API في الترويسة

INVALID_ACCESS_TOKEN / ERR_AUTH

  • الرسالة: The provided access token is invalid
  • السبب: مفتاح API غير صحيح أو منتهي الصلاحية أو ملغى
  • الإجراء:
    • تحقق من صحة مفتاح API
    • أنشئ مفتاحًا جديدًا إذا لزم الأمر
    • لا تسجّل قيم المفاتيح الحساسة
    • تواصل مع الدعم إذا استمرت المشكلة

NO_BALANCE / INSUFFICIENT_BALANCE

  • الرسالة: Insufficient balance
  • السبب: رصيد الحساب منخفض جدًا
  • الإجراء:
    • تحقق من الرصيد عبر /v3/account/balance قبل العمليات
    • اعرض الرصيد الحالي للمستخدم
    • اعرض خيار الشحن
    • لا تعيد المحاولة دون إضافة أموال

DUPLICATED_REF

  • الرسالة: This reference ID is already in use
  • السبب: تم استخدام المرجع في طلب سابق
  • الإجراء:
    • تحقق من حالة الطلب الموجود
    • أنشئ مرجعًا فريدًا جديدًا
    • لا تنشئ طلبات مكررة

IP_BLOCKED

  • الرسالة: Your IP has been temporarily blocked
  • السبب: محاولات مصادقة فاشلة كثيرة جدًا
  • الإجراء:
    • انتظر 15 دقيقة لإلغاء الحظر التلقائي
    • تحقق من صحة مفتاح API
    • تواصل مع الدعم إذا استمر الأمر

IP_NOT_ALLOWED

  • الرسالة: Your IP address is not whitelisted
  • السبب: قائمة IP البيضاء مفعّلة
  • الإجراء: أضف عنوان IP الخاص بك إلى القائمة البيضاء في لوحة التحكم

ERR_VALIDATION

  • الرسالة: Validation error
  • السبب: معلمات الطلب لا تستوفي المتطلبات
  • المشكلات الشائعة: حقول مفقودة، أنواع بيانات غير صالحة، عدم تطابق النمط
  • الإجراء:
    • تحقق من المدخلات على جانب العميل أولًا
    • تحقق من error.details للمشكلات الخاصة بالحقول
    • لا تعيد المحاولة دون إصلاح المشكلة

ERR_PHONE

  • الرسالة: Invalid phone number
  • السبب: رقم الهاتف غير صحيح أو غير موجود
  • الإجراء: استخدم /v3/internet/check-number للتحقق أولًا

ERR_STOCK

  • الرسالة: Product out of stock
  • السبب: المنتج/قيمة البطاقة المطلوبة غير متاحة
  • الإجراء:
    • تحقق من المخزون قبل الطلب
    • اعرض فئات بديلة
    • حاول مرة أخرى لاحقًا

NOT_FOUND

  • الرسالة: Resource not found
  • السبب: المورد المطلوب غير موجود
  • الحالات الشائعة: معرّف طلب غير صالح، مرجع غير صالح، مورد محذوف
  • الإجراء: تحقق من صحة المعرّف/المرجع، تحقق من الأخطاء الإملائية، تعامل بأناقة في واجهة المستخدم

RATE_LIMIT_EXCEEDED

  • الرسالة: Too many requests
  • السبب: تجاوز حد المعدل
  • الحدود: Sandbox: 60 طلب/دقيقة، الإنتاج: 120 طلب/دقيقة
  • الإجراء: نفّذ تراجعًا أسيًا مع منطق إعادة المحاولة

INTERNAL_SERVER_ERROR / INTERNAL_ERROR

  • الرسالة: Developer was notified and will check shortly
  • السبب: خطأ غير متوقع على خوادمنا
  • الإجراء:
    • لا تستردّ الأموال فورًا - انتظر 24 ساعة
    • احفظ requestId للدعم الفني
    • نفّذ منطق إعادة المحاولة مع تراجع
    • تواصل مع الدعم بالتفاصيل
    • نحن نُخطَر تلقائيًا

ERR_SERVICE

  • الرسالة: Service temporarily unavailable
  • السبب: صيانة الخدمة أو مشكلة مؤقتة
  • الإجراء:
    • اعرض رسالة صيانة
    • أعد المحاولة بعد تأخير
    • راقب للحصول على حل

أفضل ممارسات التنفيذ

1. تحقق دائمًا من حقل success

2. تعامل مع رموز الخطأ المحددة

3. منطق إعادة المحاولة الذكي مع التراجع الأسي

4. رسائل خطأ مناسبة للمستخدم

5. سجّل Request IDs

أنماط متقدمة

نمط قاطع الدائرة (Circuit Breaker)

امنع الإخفاقات المتتالية بإيقاف الطلبات عند ارتفاع معدل الخطأ:

مراقبة الأخطاء

تتبّع أنماط الأخطاء للكشف المبكر عن المشكلات:

معالجة UNKNOWN_ERROR

هام: لا تُصدر أي استرداد فور ظهور UNKNOWN_ERROR. انتظر دائماً 24 ساعة لحل المشكلة.

اختبار سيناريوهات الخطأ

استخدم وضع Sandbox لاختبار معالجة الأخطاء:

مرجع سريع

التحقق المبكر

تحقق من المدخلات من جهة العميل قبل استدعاءات API

إعادة المحاولة بذكاء

استخدم backoff الأسي لأخطاء 5xx، ولا تُعِد المحاولة أبداً لأخطاء 4xx

سجّل السياق

أدرج دائماً requestId والسياق في السجلات لتسهيل التصحيح

ردود فعل واضحة

أظهر للمستخدمين رسائل خطأ واضحة وقابلة للتنفيذ

أخطاء دفع الفواتير

يغطي هذا القسم نقاط نهاية دفع الفواتير تحت https://api.oneclickdz.com/v3/bills. وهي تضيف الرموز أدناه إلى أخطاء المفاتيح الموصوفة أعلاه، والتي تنطبق هنا أيضاً.
يُرجع دفع الفواتير نفس المغلّف الذي تُرجعه كل خدمة أخرى — success وerror.code وerror.message وrequestId — كما تحمل كل استجابة ترويسة X-Request-Id.

الأخطاء المتزامنة

هذه الأخطاء يُرجعها الطلب نفسه. وهذه هي المجموعة الكاملة.يحمل AUTH_UNAVAILABLE ترويسة Retry-After: 5 ولم يبدأ أي شيء، لذا يمكن إعادة إرسال الطلب نفسه. أما PARTNER_UNAVAILABLE وSERVICE_UNAVAILABLE فلا يحملانها — تراجَع من جانبك، ومع SERVICE_UNAVAILABLE استعِد الحالة عبر GET /v3/bills/transactions/by-ref بدل إعادة الإرسال.

الأخطاء النهائية

لا تظهر هذه أبداً في جسم استجابة مستقل. تظهر داخل كائن error الخاص بالمعاملة، وفقط عندما تكون حالتها FAILED أو REFUNDED.تفرّع على code، ولا تتفرّع أبداً على message.

قاعدتان أهم من كل ما سبق

المعاملة التي تعود لغيرك هي 404 وليست 403. المعاملة التي تخص شريكاً آخر — أو البيئة الأخرى — يُبلَّغ عنها كغير موجودة، عن قصد، حتى لا تؤكد الواجهة أبداً وجود معاملة تخص شخصاً آخر. تعامل مع 404 على أنها “تحقق من المعرّف والمفتاح”، لا على أنها “تم رفض الوصول”.
UNKNOWN ليست خطأً. إنها حالة تعني أن النتيجة لم تُؤكَّد بعد، وتُحسم من تلقاء نفسها إلى SUCCESS أو REFUNDED. وطالما استمرت: لا تستردّ لعميلك أبداً، ولا تُعِد إرسال الدفعة، ولا تُظهر “فشل الدفع”. واصل الاستطلاع.

إلى أين تذهب بعد ذلك

نظرة عامة على دفع الفواتير

كيف يتكامل المسار بأكمله

استطلاع الحالة

التعامل مع UNKNOWN وREFUNDED

جلب المعاملة بالمعرّف

كائن المعاملة وحالاته

اختبار Sandbox

أعد إنتاج كل خطأ عند الطلب

الخطوات التالية

Endpoints الأساسية

استكشف جميع الـ endpoints

تنسيق الاستجابة

فهم استجابات API