إعدادات الدفع — Thawani Pay

حالة تكامل بوابة الدفع وما هو منفذ فعليًا وما يحتاج إعدادًا خارجيًا.

حالة التكامل

البيئة

UAT (تجريبي)

رابط الـ Webhook

/api/payments/thawani/webhook

  • THAWANI_API_KEY مُعيّن
  • THAWANI_PUBLISHABLE_KEY مُعيّن
  • THAWANI_WEBHOOK_SECRET مُعيّن

آخر حدث مستلم

لم يصل أي حدث بعد.

آخر خطأ

لا توجد أخطاء مسجلة.

منفّذ فعليًا

  • بنية طلبات محلية في PocketBase بحالات كاملة (pending → paid → refunded…).
  • إعادة جلب الأسعار والمخزون من واجهة متجر Hostinger في الـ Backend قبل إنشاء الجلسة.
  • حساب الإجمالي بالبيسة في الـ Backend فقط — لا يُوثق بالإجمالي القادم من الواجهة.
  • إنشاء جلسة دفع Thawani من الـ Backend فقط باستخدام مفاتيح البيئة.
  • تحويل العميل إلى صفحة الدفع المستضافة لدى Thawani.
  • استقبال Webhooks مع التحقق من توقيع HMAC-SHA256 ومنع التكرار والنوافذ الزمنية القديمة.
  • صفحات RTL عربية: /checkout و /checkout/success و /checkout/cancelled و /checkout/payment-pending و /checkout/payment-failed.
  • صفحة النجاح تعتمد على حالة الطلب من الـ Backend، لا على زيارة الرابط فقط.
  • سجل منفصل للمدفوعات والأحداث لمنع المعالجة المكررة.
  • صفحة إعدادات تعرض حالة التكامل وآخر حدث وآخر خطأ.

يحتاج إعدادًا خارجيًا

  • إضافة مفاتيح UAT الحقيقية من بوابة Thawani إلى متغيرات البيئة (THAWANI_API_KEY، THAWANI_PUBLISHABLE_KEY، THAWANI_WEBHOOK_SECRET).
  • تسجيل رابط الـ Webhook في بوابة Thawani: /api/payments/thawani/webhook
  • التحقق من ترميز التوقيع (hex) مقابل Webhook حقيقي في UAT — التوثيق الرسمي لـ Thawani يحدد صيغة HMAC-SHA256(body + "-" + thawani-timestamp) مع رأسي thawani-signature و thawani-timestamp، والترميز النهائي يُؤكد بالاختبار الفعلي.
  • تشغيل اختبارات القبول في بيئة UAT (إنشاء جلسة، دفع تجريبي، Webhook صالح/خاطئ/مكرر، فشل، إلغاء).
  • تثبيت المخزون: واجهة متجر Hostinger الحالية للقراءة فقط، لذا تثبيت المخزون بعد الدفع يتطلب إدارة يدوية أو تكامل مستقبلي.
  • التبديل إلى الإنتاج عبر THAWANI_ENV=production بعد نجاح كل اختبارات UAT.