RFC-001: محول الدفع الإلكتروني
| الحقل | القيمة |
|---|---|
| الحالة | متوقف عند بوابة اعتماد المزود |
| المؤلف | فريق التطوير |
| آخر تحديث | 2026-08-24 |
القرار الحالي
الدفع النقدي CASH هو وسيلة الدفع الوحيدة المتاحة للعميل في الإنتاج. لا تستطيع
الشركة أو الإدارة تشغيل شام كاش أو البطاقة أو التحويل البنكي من الإعدادات.
يمكن تشغيل محول محاكاة محلي فقط عندما تكون البيئة غير إنتاجية ويحمل المتغير:
ONLINE_PAYMENTS_MODE=development
أما الإنتاج فيجب أن يحمل دائماً:
ONLINE_PAYMENTS_MODE=disabled
يفرض الكود وضع disabled عند NODE_ENV=production حتى لو كانت قيمة المتغير
خاطئة، ويرفض فحص ما قبل النشر أي وضع آخر.
سبب القرار
- لا تملك شام باص عقد تاجر معتمداً أو مواصفات webhook رسمية قابلة للتحقق.
- لا يجوز تخمين مسارات API أو التوقيع أو حالات التسوية من مكتبات غير رسمية.
- الشركات هي التي تستلم النقد من الركاب؛ المنصة لا تستلم أموال الحجز حالياً.
- تشغيل بوابة ناقصة يعرض الحجز والمحاسبة والاسترداد والتسوية لخطر مالي مباشر.
نشرت شام كاش قناة رسمية لطلب API في
https://shamcash.sy/ar/apiRequest، لكن طلب الوصول لا يعادل عقد تكامل مكتمل.
حدود المجال
يوفر OnlinePaymentAdapter واجهة موحدة للمزود المستقبلي من دون ربط الحجز باسم
بوابة محددة. المحول التطويري الحالي:
- ينشئ معرف محاكاة يبدأ بـ
DEV-فقط؛ - لا يتصل بأي خادم خارجي؛
- لا يقرأ بيانات اعتماد؛
- لا يغير حجزاً أو معاملة مالية؛
- لا يقبل webhook لعدم وجود عقد توقيع رسمي؛
- لا يعلن المزود متاحاً للعملاء أبداً.
تبقى قيم المزود القديمة في الأنواع وتقارير السجل لحفظ التاريخ المالي، ولا تعني إتاحة الوسيلة عند الدفع.
عقد API الحالي
تقبل مسارات إنشاء الدفع العامة CASH فقط. تعيد محاولة SHAMCASH أو CARD:
{
"code": "ONLINE_PAYMENTS_DEVELOPMENT_ONLY",
"available_methods": ["CASH"]
}
مع حالة HTTP 409. تعيد محاولة وسيلة غير معروفة 400. لا يقرأ الخادم بيانات
الحجز أو يكتب أي سجل مزود قبل رفض الوسيلة غير المتاحة.
مسار webhook الحالي إشارة جاهزية فقط:
- يعيد
404عندما يكون الوضع معطلاً؛ - يعيد
501 OFFICIAL_CONTRACT_REQUIREDفي التطوير؛ - لا يقرأ payload ولا يحدث قاعدة البيانات.
حماية قاعدة البيانات
يفرض الترحيل 00278_online_payments_development_only.sql ما يلي:
- إعادة كل إعدادات الشركات إلى النقد فقط ومسح بيانات المزود والبنك القديمة.
- قيد يمنع تفعيل وسيلة غير نقدية في
company_payment_settings. - triggers تمنع جلسات
anonوauthenticatedمن إدخال مزود غير نقدي فيpayment_transactionsوpassenger_payment_methodsوtrip_payments. - إبقاء دور الخدمة متاحاً للترحيلات والاستيراد التاريخي والتسوية المصرح بها.
تفاصيل الفوترة
تفاصيل الفوترة المهنية اختيارية ولا تستخدم إلا في تدفق بطاقة مستقبلي. لا يطلبها الحجز النقدي ولا يعرضها المستند إذا لم تكن موجودة. تبقى snapshot الفاتورة الصادرة ثابتة ولا تتغير بتعديل لاحق لبيانات العميل.
بوابة اعتماد مزود حقيقي
لا ينتقل أي مزود إلى sandbox متصل أو إنتاج قبل اكتمال جميع البنود:
- عقد التاجر وملكية التسوية والمسؤولية عن الاسترداد والنزاع.
- مواصفات رسمية ذات إصدار للمصادقة والإنشاء والحالة والإلغاء والاسترداد.
- عقد webhook رسمي يشمل التوقيع، الطابع الزمني، replay protection، وإعادة الإرسال.
- idempotency موثق لكل أمر مالي.
- sandbox وحساب اختبار من المزود.
- اختبارات عقد وحالات فشل وانقطاع وتأخير واستجابة مكررة.
- تسوية مالية وتقارير فروقات ومسار دعم وتشغيل وحوادث.
- مراجعة أمن وخصوصية وإدارة أسرار ودوران مفاتيح.
- إطلاق تدريجي ومراقبة ومفتاح إيقاف وخطة rollback.
- ترحيل وإصدار إنتاج منفصلان بعد موافقة صريحة.
الاختبارات المطلوبة
- قرار الوضع في التطوير والإنتاج.
- عدم تنفيذ أي اتصال شبكي في المحاكاة.
- رفض كل وسيلة غير نقدية في customer وadmin وdashboard وdriver.
- منع إعدادات الشركات من تشغيل الوسائل المخفية.
- عقد PostgreSQL لجلسات العميل ودور الخدمة.
- اختبار preflight يمنع نشر إنتاج بوضع تطويري.
- اختبارات عقد المزود الرسمية قبل أي إطلاق لاحق.
خارج النطاق الحالي
- تحصيل بطاقة حقيقية أو حفظ بطاقة.
- شام كاش حقيقي أو QR دفع خارجي.
- تحويل بنكي يرفق إثباتاً.
- استرداد إلكتروني أو chargeback.
- عمولة منصة أو احتفاظ المنصة بأموال العملاء.