البيع بالاشتراك في التجارة الإلكترونية: علبة شهرية في المغرب لا تُرسَل إلا مدفوعة
البيع بالاشتراك في التجارة الإلكترونية: تصميم علبة شهرية، ورابط دفع عند كل استحقاق، والإرسال بعد الأداء فقط، والإيقاف المؤقت والمتأخرات والإلغاء.
البيع بالاشتراك في التجارة الإلكترونية هو أن تفوتروا زبونًا على فترات منتظمة — كل شهر أو كل أسبوع — مقابل شحنة تتكرر: علبة اكتشاف، أو إعادة تزويد بمنتج يستهلكه، أو طرد موسمي. ومع ChariPay، يصبح كل استحقاق في الاشتراك رابط دفع يُرسَل بالبريد الإلكتروني إلى زبونكم فيؤدّيه بالبطاقة، ويُعلَن لكم كل استحقاق مؤدّى عبر ويب هوك. والقاعدة الذهبية في جملة واحدة: لا ترسلوا إلا ما دُفع ثمنه. يساعدكم هذا الدليل على تصميم العرض، وربط الشحن بالأداء، ثم تدبير الإيقاف المؤقت والمتأخرات والإلغاء والطرود المتضررة.
البيع بالاشتراك في التجارة الإلكترونية: ما الذي تبيعونه فعلًا
ChariPay منصة دفع مغربية، مزوّد خدمات دفع (PSP) تشغّله Chari Money، مؤسسة أداء مرخَّصة من بنك المغرب. وبالنسبة إلى متجر إلكتروني، البيع بالاشتراك هو بيع وعد بتسليم منتظم بسعر ثابت. وتتكرر ثلاثة نماذج:
- علبة الاكتشاف: تشكيلة مختلفة كل شهر — شاي وتوابل، أو مستحضرات تجميل طبيعية، أو كتب للأطفال، أو منتجات محلية.
- إعادة التزويد: المنتج نفسه، يُسلَّم قبل أن ينفد — قهوة محمّصة، أو طعام الحيوانات الأليفة، أو حفاضات، أو مواد التنظيف.
- السلة الدورية: تشكيلة أسبوعية أو شهرية مُعدّة سلفًا، كسلة من الفواكه الجافة أو من المنتجات الطازجة.
وفي الحالات الثلاث، يحمل كل اشتراك مبلغًا ودورية. وعند كل استحقاق، تُنشئ ChariPay رابط دفع لاستعمال واحد وترسله بالبريد الإلكتروني إلى زبونكم، فيؤدّيه بالبطاقة في صفحة الدفع المستضافة مع 3-D Secure؛ وما دام لم يؤدِّ، يُرسَل تذكير كل يوم بالرابط نفسه. والإعداد الكامل، من سجل الزبون إلى الويب هوك، مفصّل في دمج الاشتراكات عبر API. وللصورة العامة عن استخلاص متجر إلكتروني، راجعوا دليل الدفع الإلكتروني للتجارة الإلكترونية في المغرب؛ أما العرض نفسه فمقدَّم في صفحة الاشتراكات والمدفوعات المتكررة.
تصميم عرض علبتكم الشهرية: الدورية والانطلاق والانتهاء
تُختصر صيغة الاشتراك في أربعة إعدادات، تُحدَّد عند إنشاء كل اشتراك:
| الاختيار | الإعداد | مثال |
|---|---|---|
| الدورية | أسبوعية أو شهرية أو سنوية — واليومية موجودة أيضًا، ونادرًا ما تفيد في الطرود | علبة شاي كل شهر |
| تاريخ الانطلاق | تاريخ الاستحقاق الأول؛ والانطلاق المؤجَّل يقوم مقام الفترة التجريبية المجانية | أول علبة في بداية الشهر الموالي |
| تاريخ الانتهاء | اختياري، يُحدَّد عبر API، لعرض محدود | علبة «ثلاثة أشهر من الاكتشاف»، أو اشتراك مُهدى لستة أشهر |
| المبلغ | ثابت، بالدرهم، والتوصيل مشمول إن أدرجتموه في السعر | سعر واحد معروض، دون إضافات عند الأداء |
ثلاثة حدود توجّه التصميم. أولًا، لا تغيير للصيغة أثناء الاشتراك: لنقل مشترك من العلبة الصغيرة إلى الكبيرة، ألغوا اشتراكه وأنشئوا اشتراكًا جديدًا للزبون نفسه — يُعاد استعمال سجله، والبريد الإلكتروني الذي تُرسَل إليه روابطه. ثانيًا، لا قسائم تخفيض ولا احتساب نسبي: المبلغ المطلوب عند كل استحقاق هو مبلغ الاشتراك؛ والعرض الترويجي يصبح صيغة مستقلة. ثالثًا، الاشتراك الواحد يقابل صيغة واحدة: الزبون الذي يأخذ علبتين مختلفتين له اشتراكان، أو اشتراك واحد بالمبلغ المجمَّع إن كنتم ترسلونهما معًا.
ومتى اتضحت صيغتكم، أنشئوها قبل الإعلان عنها. يُفتح وضع الاختبار بمجرد تفعيل حسابكم، دون موافقة تنتظرونها: ابدؤوا في وضع الاختبار — ثلاثة حقول (الاسم، والبريد الإلكتروني المهني، والمؤسسة)، ورابط تفعيل يصلكم بالبريد لاختيار كلمة المرور، ثم بوابة التاجر حيث تنشئون بأنفسكم مفتاح الاختبار بعد إعادة مصادقة؛ ولا يُعرض المفتاح كاملًا إلا مرة واحدة. ادفعوا ببطاقة الاختبار 4918 9141 0719 5005، CVV 123، وأي تاريخ انتهاء مستقبلي، ورمز 3-D Secure 555: هذه البطاقة هي الوحيدة المقبولة، ولا يتحرك أي مال حقيقي. ويجري التحقق من مؤسستكم (KYB) بالتوازي ولا يشترطه إلا الانتقال إلى الإنتاج. أنشئوا اشتراكًا تاريخ بدايته اليوم: يُنشأ الرابط الأول فورًا ويُعاد في currentCharge. أدّوه ببطاقة الاختبار، ثم، بدورية يومية (DAILY)، أدّوا استحقاق الغد، وراقبوا وصول الويب هوك الذي سيُطلق شحناتكم.
المنتجات والاشتراكات: وحدتان منفصلتان
توفّر ChariPay أيضًا واجهة مستضافة. لا موقع لكم بعد؟ انشروا منتجاتكم في واجهتكم المستضافة وتابعوا طلبياتكم — في انتظار الأداء، مدفوعة، مشحونة، مسلَّمة — من بوابة التاجر. وعبر API، تحمل وحدة المنتجات سعر كل منتج ومخزونه الاختياري وصفحة بيعه.
غير أن المنتجات والاشتراكات تبقيان وحدتين منفصلتين: لا شيء يربط تلقائيًا صفحة منتج باشتراك. صفحة بيع المنتج تستخلص طلبيات؛ أما الاشتراك فيُنشأ لزبون، من بوابة التاجر أو عبر API. ويتعايش الاثنان جيدًا — واجهة مستضافة للمبيعات بالوحدة، واشتراكات للعلب —، شرط أن تربطوا بينهما بأنفسكم.
وعبر API، يمرّ هذا الربط عبر metadata الذي يُحدَّد عند إنشاء الاشتراك: دوّنوا فيه مرجع العلبة، مثل { "box": "tea-spices", "size": "M" }. وهذا الـmetadata كائن مسطَّح لا يتجاوز 4 كيلوبايت، ويعود إليكم كما هو في كل حدث subscription.payment_*. فتعرف أداة الشحن لديكم أي علبة تُعدّ ولمن، دون إعادة إدخال. أما من بوابة التاجر، فسمّوا العلبة في وصف الاشتراك. ويبقى التوصيل نفسه من مسؤوليتكم: ChariPay تستخلص، وأنتم ترسلون مع الناقل الذي تختارونه.
لا ترسلوا إلا بعد أداء الاستحقاق
القاعدة التي تحمي مخزونكم: لا يخرج طرد إلا بعد استحقاق مستخلَص، يُعلنه الحدث subscription.payment_succeeded. ولا يُعتمد أبدًا على إعادة التوجيه: فإعادة التوجيه تعني أن المشتري عاد، لا أن الأداء قد تمّ.
ومن جهة الخادم، تختصر السلسلة في خمس خطوات:
- 1يصل الحدث
subscription.payment_succeededإلى نقطة استقبال الويب هوك لديكم. - 2تتحققون من توقيعه، ثم تزيلون التكرار على
Chari-Event-Id. - 3تتعرّفون على المشترك من خلال
metadataالاشتراك أوexternalIdالخاص باشتراككم، وكلاهما يعود في الحدث. - 4تنشئون أمر التجهيز في أداتكم — أو السطر في ملف شحنات اليوم.
- 5تجيبون بـ
2xxبعد تسجيل الأمر.
تجنّبكم الخطوة 3 الخطأ المعهود المتمثل في مطابقة أداء مع مشترك حسب المبلغ: فمشتركان في العلبة نفسها يؤدّيان المبلغ نفسه. ومنطق الربط العام مشروح في ربط الأداء بالطلبية، وإنشاء الاشتراكات مع metadata الخاص بها في دمج الاشتراكات عبر API.
ودون مطوّر، يبقى المبدأ هو نفسه: قبل كل جولة تجهيز، راجعوا في بوابة التاجر صفحة كل اشتراك، التي تعرض حالة كل استحقاق من استحقاقاته، ولا تُعدّوا إلا الاستحقاقات المستخلَصة.
الإيقاف المؤقت خلال العطلة، والاستئناف عند العودة
يسافر مشترك، أو ينتقل إلى مسكن آخر، أو لديه ببساطة مخزون يكفيه: بدل أن تخسروه، اقترحوا عليه إيقافًا مؤقتًا. والإيقاف والاستئناف متاحان من بوابة التاجر أو عبر API؛ وخلال الإيقاف لا يُرسَل أي رابط دفع ولا ترسلون شيئًا. وعند الاستئناف، لا تُفوتَر بأثر رجعي الفترات التي انقضت خلال الإيقاف.
وحتى يبقى الإيقاف خدمةً لا سهوًا:
- اتفقوا مع المشترك على تاريخ عودته ودوّنوه في ملف الزبون؛
- استأنفوا الاشتراك في ذلك التاريخ، من بوابة التاجر أو عبر API؛
- أخبروه باستئناف الشحنات، في رسالتكم المعتادة.
الإيقاف المُدار جيدًا يكلّف أقل من إلغاء يعقبه تسجيل جديد: يحتفظ المشترك باشتراكه، وتحتفظون أنتم بالمشترك.
عند التأخر: لا إرسال، وما يراه المشترك
حين لا يُؤدّى استحقاق، يكون ما يلي تلقائيًا: يتلقى المشترك كل يوم تذكيرًا بالبريد الإلكتروني بالرابط نفسه؛ وما دام استحقاق غير مؤدّى، لا تُفتح أي فترة جديدة؛ ويبقى الرابط قابلًا للأداء 14 يومًا بعد تاريخ الاستحقاق، ثم، دون أداء، يُلغى الاشتراك تلقائيًا ويتلقى خادمكم subscription.canceled.
وبالنسبة إلى لوجستيكم، القاعدة بسيطة: لا يخرج شيء ما دام الاستحقاق غير مؤدّى. وقد تلقى المشترك رابط الاستحقاق، ثم تذكيراته، ليؤدّي ثمن علبته بالبطاقة؛ وكلمة منكم — «علبتكم جاهزة وستُرسل فور توصلنا بالأداء» — تشجعه على ذلك. وإن أدّى، فلا تُعدّوا علبته إلا بعد تأكيد استخلاص الاستحقاق، في بوابة التاجر أو عبر API؛ وإن أُلغي الاشتراك في النهاية، فأخرجوا المشترك من توقعاتكم.
والمسار الكامل خطوة بخطوة، وقراراتكم، ورسائل جاهزة، كلها في استحقاق اشتراك غير مؤدّى.
توقّع المخزون انطلاقًا من قائمة المشتركين
تُجهَّز العلبة قبل أن يُدفع ثمنها: لا بد من الشراء والتركيب والتغليف. وقائمة اشتراكاتكم، بحالاتها، هي أداتكم الأولى للتوقع. وتُقرأ عبر API (GET /v1/subscriptions)؛ وفي بوابة التاجر، تتابعون المشتركين أنفسهم استحقاقًا باستحقاق، من صفحة كل اشتراك.
| الحالة | بالنسبة إلى الشحنة المقبلة |
|---|---|
| في انتظار الانطلاق | أُرسل الرابط الأول ولم يُؤدَّ بعد: لا يخرج شيء قبل الأداء الأول |
| نشط | تُحتسب؛ ويخرج الطرد بعد أداء الاستحقاق — ويظهر الاستحقاق الذي ينتظر الأداء في صفحة الاشتراك |
| موقوف مؤقتًا | لا شيء يُحتسب إلى حين الاستئناف |
| منتهٍ | خارج توقعاتكم |
| ملغى | خارج توقعاتكم |
ويمنحكم الاستحقاق القادم لكل اشتراك مَعلمًا إضافيًا: يظهر في قائمة بوابة التاجر، وعبر API في الحقل nextRunDate. فتعرفون أي المشتركين سيتلقون رابط الدفع في الأيام القادمة، وتُعدّون العلب تبعًا لذلك. وللمبيعات بالوحدة التي تتقاسم المخزون نفسه، تدبّر وحدة المنتجات مخزونًا اختياريًا لكل منتج: اخصموا منه ما تحجزونه للمشتركين.
الإلغاء واسترداد مبلغ شحنة معيبة
قد يرغب مشترك في التوقف. فتلغون اشتراكه من بوابة التاجر أو عبر API، بطلب منه؛ وإن كان قد اشترك في عرض محدود، فتاريخ الانتهاء يوقفه من تلقاء نفسه. والإلغاء نهائي ويسري دون أي استحقاق إضافي: لا يُرسَل أي رابط جديد، ولا يُستردّ شيء مما استُخلص سلفًا.
حالة أخرى: تصل علبة متضررة أو ناقصة. استردّوا لزبون، كليًا أو جزئيًا، من بوابة التاجر أو عبر API. الاسترداد مجاني؛ ويُخصم مبلغه من رصيدكم المتاح، وإذا لم يكفِ الرصيد تُوقَف العملية بدل إحداث رصيد مدين. والاسترداد ليس فوريًا من جهة البنك: نبّهوا المشترك إلى أنه لن يظهر فورًا في كشف حسابه.
جزئي أم كلي؟ منتج مكسور في علبة من ستة يُستردّ جزئيًا؛ وعلبة ضائعة تُستردّ كليًا — أو يُعاد إرسالها، حسب شروطكم. والمسطرة الكاملة في استرداد مبلغ لزبون.
أسئلة شائعة
كيف أطلق علبة شهرية في المغرب مع الأداء بالبطاقة؟
حدّدوا صيغتكم — المبلغ، والدورية الشهرية، وتاريخ الانطلاق —، ثم أنشئوا اشتراكًا لكل زبون، من بوابة التاجر أو عبر API؛ أما تاريخ الانتهاء، إن وُجد، فيُحدَّد عبر API. وعند كل استحقاق، يتلقى الزبون بالبريد الإلكتروني رابط دفع يؤدّيه بالبطاقة في الصفحة المستضافة مع 3-D Secure؛ وما دام لم يؤدِّ، يُرسَل تذكير كل يوم بالرابط نفسه.
هل يمكن بيع اشتراك من الواجهة المستضافة؟
ليس مباشرةً: المنتجات والاشتراكات وحدتان منفصلتان، ولا شيء يربط تلقائيًا صفحة منتج باشتراك. فالواجهة المستضافة تستخلص مبيعاتكم بالوحدة؛ أما الاشتراك فيُنشأ لزبون، من بوابة التاجر أو عبر API. واربطوا بينهما بأنفسكم: سمّوا العلبة في وصف الاشتراك، وعبر API دوّنوا مرجعها في metadata الخاص به، فيعود إليكم في كل حدث أداء خاص بالاشتراك.
متى أرسل علبة المشترك؟
بعد استخلاص الاستحقاق، كما يعلنه الحدث subscription.payment_succeeded، لا عند مجرد إعادة توجيه. تعرّفوا على المشترك من خلال metadata أو externalId الخاصين بالاشتراك، العائدين في الحدث، ثم ابدؤوا التجهيز. ودون مطوّر، راجعوا في بوابة التاجر صفحة كل اشتراك قبل كل جولة تجهيز ولا تُعدّوا إلا الاستحقاقات المستخلَصة.
هل أرسل الطرد حين لا يُؤدّى استحقاق المشترك؟
لا: لا يخرج شيء ما دام الاستحقاق غير مؤدّى. ويتلقى المشترك كل يوم تذكيرًا بالبريد الإلكتروني بالرابط نفسه، الذي يبقى قابلًا للأداء 14 يومًا بعد تاريخ الاستحقاق. وبعد أداء الاستحقاق ترسلون؛ وإن أُلغي الاشتراك عند انتهاء صلاحية الرابط، فأخرجوه من توقعات مخزونكم ومن قائمة الشحنات المقبلة.
هل يمكن للمشترك تعليق الشحنات خلال العطلة؟
نعم. يطلب ذلك منكم، فتوقفون اشتراكه مؤقتًا من بوابة التاجر أو عبر API: لا يُرسَل أي رابط ولا ترسلون شيئًا. اتفقوا معه على تاريخ عودته، ودوّنوه، ثم استأنفوا الاشتراك في ذلك التاريخ. ويحتفظ باشتراكه دون حاجة إلى تسجيل جديد في خدمتكم، ولا تُفوتَر عليه الفترات التي انقضت خلال الإيقاف.
هل يمكن بيع اشتراك لمدة محدودة؟
نعم، بفضل تاريخ الانتهاء الاختياري الذي يُحدَّد عبر API عند إنشاء الاشتراك: علبة لثلاثة أشهر أو اشتراك مُهدى لستة أشهر يتوقف من تلقاء نفسه في ذلك التاريخ، بالحالة «منتهٍ». وأعلنوا بوضوح المدة وعدد الشحنات في عرضكم، حتى يعرف المشترك ما يشتريه بالضبط ومتى تتوقف الاستحقاقات.
كيف أستردّ مبلغ علبة وصلت متضررة؟
من بوابة التاجر أو عبر API: كليًا لعلبة ضائعة أو غير صالحة، وجزئيًا لمنتج مكسور. والاسترداد مجاني، يُخصم من رصيدكم المتاح، ويُوقَف إن لم يكفِ الرصيد. وهو ليس فوريًا من جهة البنك: نبّهوا المشترك. ولا يمسّ الاسترداد الاشتراك نفسه: لإيقافه، يجب إلغاؤه.
الخطوة التالية
أنشئوا صيغتكم في وضع الاختبار بتاريخ بداية هو اليوم وبدورية يومية (DAILY)، وأدّوا الرابط الأول ببطاقة الاختبار، ثم رابط الغد، واربطوا تجهيز الطلبيات بـsubscription.payment_succeeded: ابدؤوا في وضع الاختبار. ولمعرفة ما يحدث حين لا يؤدّي مشترك استحقاقه، اقرؤوا بعد ذلك استحقاق اشتراك غير مؤدّى.
بقلم فريق ChariPay.