إعدادات الدفع — 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.