الأخطاء

كل استجابة غير ناجحة تستخدم مظروفاً واحداً متوقَّعاً. اقرأcode لتفريع سلوك التكامل، واعرض messageالقابلة للقراءة على المشغلين.

مظروف الخطأ

{
  "code": "INVALID_SIGNATURE",
  "message": "Invalid X-Signature header.",
  "correlationId": "01J7XKQE4E30000000000000"
}

كل استجابة — سواء نجحت أم فشلت — تتضمن header استجابةX-Correlation-Id. سجّله. عند حاجتك لدعم الشركاء لتتبّع استدعاء محدد، هذا المعرّف يمكّننا من إيجاد الطلب بالضبط في ثوانٍ.

اتفاقيات حالة HTTP

الحالةالمعنى
200 OKنجاح متزامن.
400 Bad Requestطلب مشوّه أو خطأ عميل دائم — لا تُعِد المحاولة.
401 Unauthorizedمفتاح API أو التوقيع أو حالة الاتصال غير صالحة.
422 Unprocessable Entityقاعدة أعمال رفضت كتابة متزامنة (التحقق من الاستبدال) — مُخطط، لا يوجد endpoint حيّ يُرجِع 422 بعد.
503 Service Unavailableالتكامل موقوف أو المستقبِل غير جاهز — أعد المحاولة وفق جدول التباعد لديك.

رموز الأخطاء

codeالحالةالمعنى
MISSING_API_KEY401Header X-Api-Key غير موجود.
INVALID_API_KEY401مفتاح API غير معروف أو مُلغى أو من بيئة خاطئة.
INVALID_SIGNATURE401توقيع HMAC لا يطابق الجسم الخام تحت أي سر توقيع نشط.
SIGNATURE_EXPIRED401الطابع الزمني للتوقيع خارج نافذة السماح ٥ دقائق.
INTEGRATION_NOT_CONNECTED401التاجر لم يُفعِّل التكامل بعد.
INTEGRATION_ALREADY_DISCONNECTED401التاجر فصل التكامل. مطلوب اعتمادات جديدة.
INTEGRATION_PAUSED503التاجر أوقف التكامل. أعد المحاولة وفق جدول التباعد.
MISSING_IDEMPOTENCY_KEY400مُخطط. محجوز لنقاط الكتابة المتزامنة القادمة (التحقق من الاستبدال/تأكيده، فحص الإرجاع). الـ endpoint الحالي /events يمنع التكرار على eventId ولا يحتاج Idempotency-Key. راجع أمان إعادة المحاولة.
UNKNOWN_EVENT_TYPE400eventType غير مُتعرَّف عليه عند المستقبِل.
INVALID_PAYLOAD400جسم الحدث ليس JSON صالحاً أو ينقصه حقل إلزامي.
INVALID_REQUEST400مُعامِلات الاستعلام غير صالحة — مثلاً عدم إرسال أيٍّ من phone وcustomerId أو إرسالهما معاً في بحث العميل.
EVENT_HANDLER_NOT_REGISTERED503نوع الحدث صحيح لكن المستقبِل لم يُطلق معالجاً له بعد. أعد المحاولة وفق جدول التباعد — تسليم لاحق سينجح.
WRONG_EVENT_DIRECTION400هذا النوع مُصدَّر من قروش (webhook صادر) ولا يجب إرساله إلى /events. أوقف إعادة المحاولة.

رموز معالجة الأحداث

تُرجَع من POST /events عندما يفشل حدث في فحوصات الأعمال.400 يعني أن الحدث لا يمكن معالجته كما أُرسل. لعيوب الـ payload: صحّح البيانات وأرسل حدثاً جديداً. أما الرموز المعتمدة على حالة التاجر (ربط فرع غير مؤكد، ربط عميل مفقود، عميل مجمّد، برنامج أو بطاقة غير نشطة) فيمكنك إعادة تسليم نفس الحدث بعد أن يصحح التاجر الإعداد — التسليمات الفاشلة لا تُخزَّن أبداً، فإعادة التسليم تُعالَج من جديد. 503 يعني أعد المحاولة وفق جدول التباعد لديك.

codeالحالةالمعنى
CUSTOMER_MAPPING_NOT_FOUND400لا يوجد ربط لـ externalCustomerId — أرسل CustomerSynced أولاً.
BRANCH_MAPPING_NOT_FOUND400لا يوجد ربط لـ externalBranchId — أرسل BranchSynced أولاً.
BRANCH_MAPPING_UNCONFIRMED400الفرع معروف لكن التاجر لم يؤكد الربط في لوحة قروش بعد.
CUSTOMER_INACTIVE400حساب العميل مجمّد لدى هذا المتجر.
MISSING_STAMP_CARD_ID400earnType = "Stamps" بدون stampCardId.
STAMP_CARD_NOT_FOUND400stampCardId غير معروف لهذا المتجر.
STAMP_CARD_INACTIVE400بطاقة الأختام غير نشطة.
STAMP_CARD_FREE_ENTRY_ONLY400طريقة الكسب الوحيدة للبطاقة هي FreeEntry — لا تُحتسب أبداً من فاتورة شريك.
NO_ACTIVE_POINTS_PROGRAM400لا يوجد برنامج نقاط نشط لهذا المتجر.
NO_ACTIVE_EARNING_METHOD400لا توجد طريقة كسب نشطة على برنامج النقاط أو بطاقة الأختام.
PARTNER_INVOICE_ALREADY_EARNED400سبق احتساب الكسب لهذه الفاتورة (externalInvoiceId) — تُرفض حتى مع eventId جديد.
SUBSCRIPTION_LAPSED503اشتراك التاجر في قروش غير نشط. أعد المحاولة — التسليم بعد التجديد سينجح.
CONCURRENCY_CONFLICT503تحديث متزامن على السجل تعارض مع هذا الحدث. أعد المحاولة.