رحلة الاشتراك في الباقات

من أول ما المستخدم يفتح صفحة الأسعار لحد ما اشتراكه يتفعّل. الصفحة دي بترتب القرارات اللي اتفقنا عليها، وفيها محاكاة صغيرة للفلو، وفي الآخر خطة البناء والأسئلة اللي لسه مفتوحة.

الفلو خطوة بخطوة

الدواير خطوات بيعملها النظام أو المستخدم، والمعيّنات نقاط قرار.

1

تحديد البلد والمنطقة الزمنية ipapi

أول ما الصفحة تفتح، السيرفر يكلّم ipapi بـ IP المستخدم ويرجع البلد والـ time zone والعملة. ده بيحدد حاجتين: العملة اللي هنعرض بيها الأسعار، والتوقيت اللي هنحجز بيه الحصص.

GET https://ipapi.co/{ip}/json/ { "country_code": "EG", "timezone": "Africa/Cairo", "utc_offset": "+0300", "currency": "EGP" }

الخطة المجانية في ipapi حدها حوالي 1000 طلب في اليوم (30,000 في الشهر)، فلازم النداء يكون من الباك إند ونحفظ النتيجة (cache) للمستخدم أو للـ IP بدل ما نطلبها كل زيارة. ولو الطلب فشل نرجع لعملة افتراضية (USD) ونخلّي المستخدم يقدر يغيّر البلد بنفسه.

2

مين اللي بيشترك؟

الباقات منفصلة تمامًا حسب نوع المشترك، والمستخدم يختار المسار قبل ما يشوف الأسعار.

طالب بالغ

بيشترك لنفسه. عدد الأبناء مش موجود هنا، والاشتراك لحساب واحد.

ولي أمر

بيشترك لأبنائه. كل باقة ليها حد أقصى لعدد الأبناء، ويختار مين من أبنائه هيتضاف.

3

عرض الباقات بعملة المستخدم

نعرض باقات المسار اللي اختاره بالعملة اللي جت من الخطوة الأولى، ومعاها مفتاح لاختيار مدة الدفع.

شهريربع سنوينصف سنويسنوي
4

اختيار الباقة

كل كارت بيوضح: اسم الباقة، عدد الحصص في الشهر وفي الأسبوع، مدة الحصة، المميزات، السعر والعملة، وعدد الأبناء المسموح (لباقات أولياء الأمور بس).

5

تأكيد الباقة

شاشة ملخص قبل الدفع: الباقة، المدة، السعر النهائي بالعملة، وتاريخ التجديد محسوب على توقيت المستخدم. يقدر يرجع يغيّر أو يأكد.

6

اختيار المحفظة ووسيلة الدفع

بعد التأكيد بس تظهر وسائل الدفع، ونعرض الوسائل المتاحة في بلد المستخدم وبالعملة بتاعته. النظام بيختار البوابة حسب البلد: MyFatoorah أو PayTabs، والتانية تشتغل كبديل لو الأولى فشلت.

7

الدفع وتفعيل الاشتراك

بنعتمد على إشعار البوابة (webhook / callback) مش على رجوع المستخدم للصفحة، ونتأكد من حالة العملية بطلب للبوابة نفسها. بعد النجاح نسجّل الاشتراك بالسعر والعملة اللي اتدفعت فعلًا، ونحدد تاريخ البداية والتجديد، ونفتح جدولة الحصص بالـ time zone بتاع المستخدم.

جرّب الفلو

محاكاة للخطوات من 1 لـ 6. الأسعار والباقات هنا أمثلة توضيحية بس، والبلد بيتحاكى بدل نداء ipapi الحقيقي.

كل مدة ليها سعر مستقل مخزّن، مش محسوب بالضرب، علشان نقدر نحط خصم مختلف لكل مدة ولكل عملة.

بيانات الباقة

الحقول اللي اتفقنا عليها، ومعاها اقتراح لطريقة تخزينها.

الحقلالاسم في الداتابيزملاحظات
اسم الباقةnameممكن يتخزن بالعربي والإنجليزي لو الموقع بلغتين.
نوع المشتركaudienceadult أو parent، وده اللي بيفصل الباقات.
عدد الحصص في الشهرsessions_per_monthرقم صحيح.
عدد الحصص في الأسبوعsessions_per_weekلازم يتوافق مع الشهري (مثلًا 2 أسبوعيًا ≈ 8 شهريًا).
مدة الحصةsession_minutesبالدقايق.
المميزاتfeatures[]قائمة نصوص تتعرض كنقاط في الكارت.
عدد الأبناء المسموحmax_childrenلباقات أولياء الأمور بس، وnull للطالب البالغ.
السعر والعملةجدول plan_pricesصف لكل (باقة × عملة × مدة): plan_id, currency, period, amount. المدة: شهري، ربع سنوي، نصف سنوي، سنوي.
عملية الدفعجدول paymentssubscription_id, gateway, gateway_ref, amount, currency, status. الـ gateway قيمته myfatoorah أو paytabs.

بوابات الدفع

بوابتين، وكل بلد ليه بوابة أساسية وبوابة بديلة في إعدادات النظام، بدل ما نثبّتها في الكود.

MyFatoorah

منتشرة في الخليج، وبتدعم وسائل محلية زي KNET في الكويت و mada و Apple Pay في السعودية، بجانب البطاقات. مناسبة كبوابة أساسية لدول الخليج.

PayTabs

شغالة في مصر والخليج، وبتدعم البطاقات و mada و Apple Pay ووسائل محلية حسب بلد حساب التاجر. مرشحة كأساسية لمصر وبديلة للخليج.

طبقة دفع موحدة

نعمل interface واحد في الكود (إنشاء عملية، التحقق من الحالة، استقبال الـ webhook، الاسترجاع) وكل بوابة ليها adapter خاص بيها. كده نضيف أو نبدّل بوابة من غير ما نلمس الفلو.

تأكيد الباقة←اختيار البوابة حسب البلد←إنشاء الفاتورة / الـ payment page←صفحة الدفع←webhook←تحقق وتفعيل

الوسائل المتاحة فعليًا (محافظ، KNET، ميزة، فوري…) بتختلف حسب بلد حساب التاجر في كل بوابة، فلازم تتأكد منها من لوحة التحكم أو من فريق المبيعات عندهم قبل ما نثبّت قائمة الوسائل لكل بلد.

خطة البناء

ترتيب مقترح بحيث كل مرحلة تعتمد على اللي قبلها.

نموذج البيانات

جداول الباقات والأسعار والاشتراكات، وربط الاشتراك بولي الأمر وأبنائه.

خدمة تحديد الموقع

endpoint في الباك إند يكلّم ipapi ويحفظ النتيجة، مع fallback لعملة افتراضية وإمكانية تغيير البلد يدويًا.

التسعير بالعملات

تحديد العملات المدعومة وإدخال سعر لكل باقة في كل عملة ولكل مدة، وتحديد العملة البديلة للبلاد غير المدعومة.

صفحة الباقات

اختيار نوع المشترك، مفتاح المدة الأربع، كروت الباقات بكل الحقول.

التأكيد والدفع

شاشة الملخص، ثم وسائل الدفع حسب البلد، وطبقة دفع موحدة فيها adapter لـ MyFatoorah وآخر لـ PayTabs، مع الـ webhooks والتجربة على بيئة الـ sandbox لكل بوابة.

تفعيل وإدارة الاشتراك

تفعيل بعد الدفع، التجديد التلقائي، الترقية والإلغاء، وجدولة الحصص بالـ time zone.

أسئلة لسه محتاجة قرار

الأسعار في كل عملة هتتحط يدويًا ولا هتتحسب من الدولار بسعر صرف؟ الإدخال اليدوي بيدي أسعار “نضيفة” زي 299 جنيه، والتحويل أسهل في الإدارة.
أنهي بوابة أساسية لكل بلد؟ وهل التجديد التلقائي (حفظ البطاقة والخصم المتكرر) مفعّل في الحسابين، ولا التجديد هيكون بفاتورة جديدة كل مرة؟
المستخدمين من بلاد برّا الخليج ومصر هيدفعوا بالدولار عن طريق أنهي بوابة؟
لو ولي الأمر عنده أبناء أكتر من حد الباقة، نمنعه ولا نقترح عليه الباقة الأكبر؟
لو المستخدم سافر واتغيّر بلده، نغيّر العملة في التجديد ولا يفضل على عملة أول اشتراك؟