رحلة الاشتراك في الباقات
من أول ما المستخدم يفتح صفحة الأسعار لحد ما اشتراكه يتفعّل. الصفحة دي بترتب القرارات اللي اتفقنا عليها، وفيها محاكاة صغيرة للفلو، وفي الآخر خطة البناء والأسئلة اللي لسه مفتوحة.
الفلو خطوة بخطوة
الدواير خطوات بيعملها النظام أو المستخدم، والمعيّنات نقاط قرار.
تحديد البلد والمنطقة الزمنية ipapi
أول ما الصفحة تفتح، السيرفر يكلّم ipapi بـ IP المستخدم ويرجع البلد والـ time zone والعملة. ده بيحدد حاجتين: العملة اللي هنعرض بيها الأسعار، والتوقيت اللي هنحجز بيه الحصص.
الخطة المجانية في ipapi حدها حوالي 1000 طلب في اليوم (30,000 في الشهر)، فلازم النداء يكون من الباك إند ونحفظ النتيجة (cache) للمستخدم أو للـ IP بدل ما نطلبها كل زيارة. ولو الطلب فشل نرجع لعملة افتراضية (USD) ونخلّي المستخدم يقدر يغيّر البلد بنفسه.
مين اللي بيشترك؟
الباقات منفصلة تمامًا حسب نوع المشترك، والمستخدم يختار المسار قبل ما يشوف الأسعار.
طالب بالغ
بيشترك لنفسه. عدد الأبناء مش موجود هنا، والاشتراك لحساب واحد.
ولي أمر
بيشترك لأبنائه. كل باقة ليها حد أقصى لعدد الأبناء، ويختار مين من أبنائه هيتضاف.
عرض الباقات بعملة المستخدم
نعرض باقات المسار اللي اختاره بالعملة اللي جت من الخطوة الأولى، ومعاها مفتاح لاختيار مدة الدفع.
اختيار الباقة
كل كارت بيوضح: اسم الباقة، عدد الحصص في الشهر وفي الأسبوع، مدة الحصة، المميزات، السعر والعملة، وعدد الأبناء المسموح (لباقات أولياء الأمور بس).
تأكيد الباقة
شاشة ملخص قبل الدفع: الباقة، المدة، السعر النهائي بالعملة، وتاريخ التجديد محسوب على توقيت المستخدم. يقدر يرجع يغيّر أو يأكد.
اختيار المحفظة ووسيلة الدفع
بعد التأكيد بس تظهر وسائل الدفع، ونعرض الوسائل المتاحة في بلد المستخدم وبالعملة بتاعته. النظام بيختار البوابة حسب البلد: MyFatoorah أو PayTabs، والتانية تشتغل كبديل لو الأولى فشلت.
الدفع وتفعيل الاشتراك
بنعتمد على إشعار البوابة (webhook / callback) مش على رجوع المستخدم للصفحة، ونتأكد من حالة العملية بطلب للبوابة نفسها. بعد النجاح نسجّل الاشتراك بالسعر والعملة اللي اتدفعت فعلًا، ونحدد تاريخ البداية والتجديد، ونفتح جدولة الحصص بالـ time zone بتاع المستخدم.
جرّب الفلو
محاكاة للخطوات من 1 لـ 6. الأسعار والباقات هنا أمثلة توضيحية بس، والبلد بيتحاكى بدل نداء ipapi الحقيقي.
كل مدة ليها سعر مستقل مخزّن، مش محسوب بالضرب، علشان نقدر نحط خصم مختلف لكل مدة ولكل عملة.
بيانات الباقة
الحقول اللي اتفقنا عليها، ومعاها اقتراح لطريقة تخزينها.
| الحقل | الاسم في الداتابيز | ملاحظات |
|---|---|---|
| اسم الباقة | name | ممكن يتخزن بالعربي والإنجليزي لو الموقع بلغتين. |
| نوع المشترك | audience | adult أو parent، وده اللي بيفصل الباقات. |
| عدد الحصص في الشهر | sessions_per_month | رقم صحيح. |
| عدد الحصص في الأسبوع | sessions_per_week | لازم يتوافق مع الشهري (مثلًا 2 أسبوعيًا ≈ 8 شهريًا). |
| مدة الحصة | session_minutes | بالدقايق. |
| المميزات | features[] | قائمة نصوص تتعرض كنقاط في الكارت. |
| عدد الأبناء المسموح | max_children | لباقات أولياء الأمور بس، وnull للطالب البالغ. |
| السعر والعملة | جدول plan_prices | صف لكل (باقة × عملة × مدة): plan_id, currency, period, amount. المدة: شهري، ربع سنوي، نصف سنوي، سنوي. |
| عملية الدفع | جدول payments | subscription_id, gateway, gateway_ref, amount, currency, status. الـ gateway قيمته myfatoorah أو paytabs. |
بوابات الدفع
بوابتين، وكل بلد ليه بوابة أساسية وبوابة بديلة في إعدادات النظام، بدل ما نثبّتها في الكود.
MyFatoorah
منتشرة في الخليج، وبتدعم وسائل محلية زي KNET في الكويت و mada و Apple Pay في السعودية، بجانب البطاقات. مناسبة كبوابة أساسية لدول الخليج.
PayTabs
شغالة في مصر والخليج، وبتدعم البطاقات و mada و Apple Pay ووسائل محلية حسب بلد حساب التاجر. مرشحة كأساسية لمصر وبديلة للخليج.
طبقة دفع موحدة
نعمل interface واحد في الكود (إنشاء عملية، التحقق من الحالة، استقبال الـ webhook، الاسترجاع) وكل بوابة ليها adapter خاص بيها. كده نضيف أو نبدّل بوابة من غير ما نلمس الفلو.
الوسائل المتاحة فعليًا (محافظ، KNET، ميزة، فوري…) بتختلف حسب بلد حساب التاجر في كل بوابة، فلازم تتأكد منها من لوحة التحكم أو من فريق المبيعات عندهم قبل ما نثبّت قائمة الوسائل لكل بلد.
خطة البناء
ترتيب مقترح بحيث كل مرحلة تعتمد على اللي قبلها.
نموذج البيانات
جداول الباقات والأسعار والاشتراكات، وربط الاشتراك بولي الأمر وأبنائه.
خدمة تحديد الموقع
endpoint في الباك إند يكلّم ipapi ويحفظ النتيجة، مع fallback لعملة افتراضية وإمكانية تغيير البلد يدويًا.
التسعير بالعملات
تحديد العملات المدعومة وإدخال سعر لكل باقة في كل عملة ولكل مدة، وتحديد العملة البديلة للبلاد غير المدعومة.
صفحة الباقات
اختيار نوع المشترك، مفتاح المدة الأربع، كروت الباقات بكل الحقول.
التأكيد والدفع
شاشة الملخص، ثم وسائل الدفع حسب البلد، وطبقة دفع موحدة فيها adapter لـ MyFatoorah وآخر لـ PayTabs، مع الـ webhooks والتجربة على بيئة الـ sandbox لكل بوابة.
تفعيل وإدارة الاشتراك
تفعيل بعد الدفع، التجديد التلقائي، الترقية والإلغاء، وجدولة الحصص بالـ time zone.