اشتراكات Discourse - توضيح "الإلغاء في نهاية الدورة"

متابعةً للنقاش من Discourse subscriptions - changing price - how to cancel auto-renewal instead of whole subscription:

طلب ميزة: سيكون من الجيد أن يتمكن المستخدم من اختيار إلغاء الاشتراك في نهاية الدورة، بدلاً من أن يكون قادرًا فقط على إلغائه فورًا.

لقد رأيت هذا في وثائق Stripe، تحت عنوان “إلغاء في نهاية الدورة”:

إذا كنت تريد بدلاً من ذلك إلغاء الاشتراك في نهاية فترة الفوترة الحالية (أي، للمدة الزمنية التي دفع العميل مقابلها بالفعل)، فقم بتحديث الاشتراك بقيمة cancel_at_period_end تساوي true:

يمكنك إعادة تنشيط الاشتراكات المجدولة للإلغاء (باستخدام المعلمة cancel_at_period_end) عن طريق تحديث cancel_at_period_end إلى false. يمكنك إعادة تنشيط الاشتراك في أي وقت حتى نهاية الفترة.

إعجاب واحد (1)

اتضح أن المستخدم يمكنه فعل ما طلبته (لقد غيرت “السماح” إلى “توضيح” في العنوان الآن)… لذا إليك اثنان جديدان ولكنهما مرتبطان…

طلبات الميزات: يجب أن توضح الصياغة الافتراضية النوعين المختلفين من الإلغاء. يجب أن تحتوي واجهة المسؤول على نفس عمود “الحالة” مثل واجهة المستخدم.

إليك بعض التفاصيل…

يبدو أن “إلغاء” في اشتراكات Discourse يعني شيئين مختلفين اعتمادًا على من يقوم بذلك! بالنسبة للمستخدم، فإنه يلغي فقط التجديد التلقائي؛ بالنسبة للمسؤول، فإنه يلغي الاشتراك بأكمله على الفور.

  1. إذا نقر المستخدم على أيقونة سلة المهملات في u/.../billing/subscriptions، يكون الاستعلام هو “هل أنت متأكد من أنك تريد إلغاء هذا الاشتراك؟”

    يؤدي اختيار “نعم” إلى تشغيل خطاف الويب customer.subscription.updated.

    جزآن بارزان من الاستجابة هما "cancel_at_period_end": true و "status": "active". لا تزال صفحة اشتراك المستخدم تعرض “الحالة: نشط” ولكن بالنسبة لـ “التجديدات” تذكر الآن “ملغاة”. يظل المستخدم في المجموعة المشتركة.

    بشكل مزعج، لا تشير واجهة المسؤول الآن إلى أنه تم إلغاء التجديد التلقائي - فهي تحتوي فقط على “الحالة: نشط”.

  2. إذا نقر المسؤول على “إلغاء” في /admin/plugins/discourse-subscriptions/subscriptions، يكون الاستعلام مرة أخرى هو “هل أنت متأكد من أنك تريد إلغاء هذا الاشتراك؟” (كما يسأل عن ما إذا كان سيتم استرداد المبلغ).

    يؤدي اختيار “نعم” إلى تشغيل خطاف الويب customer.subscription.deleted.

    تتضمن الاستجابة "status": "canceled". يتم حذف الاشتراك في كل مكان ويتم إزالة المستخدم من المجموعة المشتركة.