إدارة الاشتراكات وعمليات الشراء لمرة واحدة

قد تحتاجون إلى اتّخاذ إجراءات إدارية بشأن الاشتراكات أو عمليات الشراء لمرة واحدة كجزء من الأعمال اليومية. على سبيل المثال، قد تحتاج خدمة العملاء إلى ردّ الأموال بالكامل أو جزء منها للمستخدمين، أو قد تحتاجون إلى إبطال الحقوق في حالات معيّنة. يمكنكم إدارة الطلبات من Play Console، أو إذا أردتم إدارتها من نظامكم الخاص، يمكنكم إجراء ذلك باستخدام Google Play Developer API.

إلغاء الاشتراكات

يمكن للمستخدمين أو المطوّرين بدء عمليات إلغاء الاشتراكات.

عمليات الإلغاء التي يبدأها المستخدمون

يمكن للمستخدمين إلغاء اشتراك في Google Play في أي وقت باستخدام متجر Google Play. إذا كان ذلك منطبقًا، يجب أيضًا توفير خيار للمستخدمين لإلغاء اشتراكاتهم في تطبيقكم وعلى موقعكم الإلكتروني.

إنّ أسهل طريقة لتمكين المستخدمين من الإلغاء طوعًا هي توفير روابط في تطبيقكم تنقلهم مباشرةً إلى "متجر Google Play"، حيث يمكنهم عرض اشتراكاتهم وإدارتها.

عمليات الإلغاء التي يبدأها المطوّرون

بصفتكم مطوّرين، قد تحتاجون أيضًا إلى بدء عمليات الإلغاء من نظامكم الخلفي. تتيح لكم واجهة برمجة التطبيقات purchases.subscriptions.cancel إلغاء عملية شراء اشتراك. على سبيل المثال، يمكنكم استخدام هذه الطريقة لإيقاف خدمة قديمة. لا يؤدي إلغاء الاشتراك إلى ردّ الأموال، ويحتفظ المستخدم بإمكانية الوصول حتى نهاية مدة الفوترة الحالية.

تتيح لكم هذه الطريقة تحديد الأنواع التالية من عمليات الإلغاء في مَعلمة نص الطلب cancellationType:

  • USER_REQUESTED_STOP_RENEWALS: يؤدي هذا النوع إلى إلغاء الاشتراك كما لو أنّ المستخدمين ألغوه من "متجر Google Play". وستستمر أي دفعات على أقساط خلال المدة المتبقية من فترة الالتزام الحالية. من "متجر Google Play"، يمكن للمستخدمين استعادة الاشتراك قبل انتهاء صلاحيته، أو إعادة الاشتراك بعد انتهاء صلاحيته إذا كان ذلك مفعّلاً للخطة الأساسية.

  • DEVELOPER_REQUESTED_STOP_PAYMENTS: يؤدي هذا النوع إلى إلغاء الاشتراك ومنع أي دفعات أخرى. لا يمكن للمستخدمين استعادة الاشتراك أو إعادة الاشتراك فيه من "متجر Google Play"، ولكن يمكنكم السماح لهم بالاشتراك مرة أخرى داخل تطبيقكم.

السماح للمستخدمين باستعادة الاشتراكات التي لم تنتهِ صلاحيتها

في بعض السيناريوهات، قد يكون من المفيد السماح للمستخدمين باستعادة الاشتراكات التي لم تنتهِ صلاحيتها من مركز اشتراكات Play بعد بدء عملية الإلغاء بصفتكم مطوّرين. على سبيل المثال، قد تريدون توفير مسار مخصّص للإلغاء داخل التطبيق. استنادًا إلى منطق نشاطكم التجاري، يمكنكم تحديد عمليات الإلغاء التي يمكن للمستخدمين استعادتها والتي بدأتموها من نظامكم الخلفي.

للإشارة إلى أنّه يمكن للمستخدم استعادة عملية الإلغاء، أرسِلوا طلب POST إلى واجهة برمجة التطبيقات purchases.subscriptions.cancel، واضبطوا مَعلمة الطلب cancellationType على القيمة USER_REQUESTED_STOP_RENEWALS.

مثال:

  • رمز شراء الاشتراك 1a2b3c4d5e6f7g8h9i0j
  • اسم حزمة التطبيق com.your.app
  • رقم تعريف الاشتراك your-subscription-product

طلب HTTP POST:

https://androidpublisher.googleapis.com/androidpublisher/v3/applications/com.your.app/purchases/subscriptions/your-subscription-product/tokens/1a2b3c4d5e6f7g8h9i0j:cancel

نص الطلب:

{
  "cancellationType": "USER_REQUESTED_STOP_RENEWALS"
}

السماح للمستخدمين بإعادة الاشتراك في الاشتراكات المنتهية صلاحيتها

للسماح بإعادة الاشتراك في اشتراك منتهٍ الصلاحية، يجب تفعيل خيار إعادة الاشتراك في الخطة الأساسية للاشتراك، ثم إلغاء الاشتراك من خلال ضبط المَعلمة cancellationType على القيمة USER_REQUESTED_STOP_RENEWALS.

السماح للمستخدمين بإعادة الاشتراك في تطبيقكم فقط

إذا ضبطتم المَعلمة cancellationType على DEVELOPER_REQUESTED_STOP_PAYMENTS أو لم تضبطوها، لن يتمكّن المستخدمون من استعادة اشتراكهم من مركز اشتراكات Play.cancellationType ومع ذلك، يمكن للمستخدمين الاشتراك مرة أخرى في الاشتراك من خلال تطبيقكم إذا لزم الأمر.

يؤدي اتّخاذ هذا الإجراء إلى إرسال إشعار في الوقت الفعلي خاص بالمطوّرين من النوع SUBSCRIPTION_CANCELED. تعاملوا مع عمليات الإلغاء هذه كما هو موضّح في مقالة عمليات الإلغاء.

تأجيل الفوترة

يمكنكم تمديد فترة الحقوق لاشتراك بـ استخدام الـ subscriptionsv2.defer طريقة. عند تأجيل اشتراك يتضمّن ميزات إضافية، يتم تأجيل جميع العناصر في الاشتراك للمدة نفسها. خلال فترة التأجيل، يظل المستخدم مشتركًا في المحتوى، ولكن لا يتم تحصيل رسوم منه مقابل الوقت الإضافي. عند تأجيل الفوترة لاشتراك، يتم تعديل معلومات الحالة وفقًا لذلك وتظهر في حقل expiryTime في معلومات حالة الشراء:

  • بالنسبة إلى الاشتراكات المتكرّرة النشطة، يؤدي تأجيل الفوترة إلى تمديد تاريخ التجديد التالي.
  • بالنسبة إلى خطط الدفع المُسبَق، يؤدي تأجيل الفوترة إلى تمديد تاريخ انتهاء الصلاحية.

في ما يلي بعض الأمثلة على كيفية استخدام الفوترة المؤجّلة:

  • منح المستخدمين إمكانية الوصول بدون أي تكلفة كعرض خاص، مثل منح أسبوع واحد مجانًا للمشتركين الحاليين مقابل ملء استطلاع للرأي.
  • منح العملاء إمكانية الوصول بدون أي تكلفة كإجراء لخدمة العملاء، مثلاً بعد انقطاع الخدمة لفترة طويلة قد يكون أثّر في قدرتهم على استخدامها.

يمكن تأجيل الفوترة لمدة يوم واحد على الأقل وما يصل إلى عام واحد لكل طلب بيانات من واجهة برمجة التطبيقات. لتأجيل نهاية الحقوق أكثر، يُرجى طلب البيانات من واجهة برمجة التطبيقات مرة أخرى قبل حلول تاريخ انتهاء الصلاحية الجديد.

يؤدي اتّخاذ هذا الإجراء إلى إرسال إشعار في الوقت الفعلي خاص بالمطوّرين من النوع SUBSCRIPTION_DEFERRED. لمعرفة كيفية التعامل مع هذه الأحداث، يُرجى الاطّلاع على مقالة تأجيل الفوترة لمشترك في مقالة لمحة عن الاشتراكات.

مثال:

  1. تريد خدمة البث FitnessGoals تقديم عرض ترويجي لتشجيع ممارسة التمارين الرياضية بانتظام في فبراير.

  2. قرّرت الخدمة منح شهر إضافي من الخدمة لأي مشترك يمارس التمارين الرياضية مع FitnessGoals 10 مرات على الأقل خلال شهر فبراير.

  3. تتتبّع الخدمة نتائج التحدي، وفي 1 مارس، تطلب طريقة subscriptionsv2.defer لكل عملية شراء اشتراك نشط تعود إلى المستخدمين الذين استوفوا التحدي في فبراير.

  4. يحصل هؤلاء المستخدمون على ميزة شهر إضافي كامل من فيديوهات التمارين الرياضية المنتظمة بدون أي تكلفة، ويخبرون جميع أصدقائهم كيف تساعدهم FitnessGoals في الحفاظ على صحتهم.

ردّ الأموال وإبطال الحقوق

هناك العديد من الحالات التي قد تريدون فيها ردّ الأموال أو إبطال إمكانية الوصول إلى اشتراك أو عملية شراء لمرة واحدة.

ردّ الأموال بالكامل عن طلب معيّن باستخدام رقم تعريف الطلب

باستخدام واجهة برمجة التطبيقات orders.refund ، يمكنكم ردّ الأموال بالكامل عن أي طلب في غضون ثلاث سنوات من تاريخ الشراء. تتلقّى طريقة orders.refund مَعلمة `revoke` تشير إلى ما إذا كان يجب إبطال إمكانية الوصول بالإضافة إلى ردّ الأموال أم لا.

إذا أرسلتم طلب إبطال مع طلب ردّ الأموال لعملية شراء اشتراك، يتم إنهاء الاشتراك على الفور ويؤدي ذلك إلى إرسال إشعار في الوقت الفعلي خاص بالمطوّرين من النوع SUBSCRIPTION_REVOKED. يُرجى قراءة دليل إدارة دورة حياة الاشتراك ، قسم عمليات الإبطال، لمعرفة كيفية التعامل مع هذه الأحداث.

مثال:

  1. للاحتفال ببداية كأس العالم الجديد، قرّر تطبيق الرياضات الإلكترونية Football-Not-Soccer إجراء سحب على قمصان افتراضية مجانية لجميع المستخدمين الذين يشترون أطقمًا جديدة للفريق في أول 24 ساعة.

  2. يستخدم Football-Not-Soccer واجهة برمجة التطبيقات orders.refund بدون تمرير مَعلمة `revoke` لردّ الأموال التي دفعها الفائزون مقابل القمصان.

إبطال اشتراك وردّ الأموال عنه باستخدام رمز الشراء

في حالات استخدام معيّنة، قد تحتاجون إلى إبطال إمكانية وصول المستخدم إلى اشتراكه وردّ الأموال عنه. توفر ميزة "الفوترة في Play" طرقًا للإبطال، بما في ذلك ردّ الأموال بالكامل وردّ الأموال حسب الاستخدام من خلال subscriptionsv2.revoke واجهة برمجة التطبيقات. باستخدام نقطة النهاية هذه، يمكنكم تحديد revocationContext لتحديد كيفية احتساب عملية ردّ الأموال.

يؤدي اتّخاذ هذا الإجراء إلى إرسال إشعار في الوقت الفعلي خاص بالمطوّرين من النوع SUBSCRIPTION_REVOKED. يجب أن يتعامل تطبيقكم مع عمليات الإلغاء هذه كما هو موضّح في مقالة عمليات الإبطال.

مثال:

  • عملية شراء باستخدام رمز الشراء 1a2b3c4d5e6f7g8h9i0j
  • تطبيق باسم الحزمة com.your.app
  • نية ردّ الأموال حسب الاستخدام

طلب HTTP POST:

https://androidpublisher.googleapis.com/androidpublisher/v3/applications/com.your.app/purchases/subscriptionsv2/tokens/1a2b3c4d5e6f7g8h9i0j:revoke

نص الطلب:

{
  "revocationContext": {
    "proratedRefund": {}
  }
}

ردّ الأموال بالكامل

إذا كنتم بحاجة إلى إنهاء اشتراك وردّ المبلغ الكامل لمدّة الفوترة الحالية، أرسِلوا طلب ردّ الأموال بالكامل. استخدِموا الدالة purchases.subscriptionsv2.revoke ، واضبطوا "fullRefund": {} كنوع ردّ الأموال.

مثال:

  1. لدى ماريا اشتراك لمدة 30 يومًا يتم تجديده تلقائيًا في الخطة الشهرية لخدمة البث SuperMovies. واجهت ماريا بعض المشاكل الفنية التي تمنعها من الوصول إلى المحتوى. تتواصل ماريا مع خدمة العملاء في اليوم الثالث من دورة الفوترة وتذكر أنّها لم تتمكّن من الوصول إلى الاشتراك مطلقًا.

  2. تحدّد خدمة العملاء تفاصيل عملية شراء اشتراك ماريا في نظامها وتبدأ طلبًا إلى purchases.subscriptionsv2.revoke لطلب ردّ الأموال بالكامل.

  3. تخبر خدمة العملاء ماريا بأنّه سيتم ردّ 100% من سعر اشتراكها وأنّها لم تعد مشتركة في الخطة.

ردّ الأموال حسب الاستخدام

إذا كنتم بحاجة إلى إنهاء اشتراك وردّ جزء من الأموال عن الوقت المتبقي من الحقوق، أرسِلوا طلب ردّ الأموال حسب الاستخدام. استخدِموا الدالة purchases.subscriptionsv2.revoke ، واضبطوا "proratedRefund": {} كنوع ردّ الأموال.

مثال:

  1. لدى ماريا اشتراك لمدة 30 يومًا يتم تجديده تلقائيًا في الخطة الشهرية لخدمة البث SuperMovies. وقد استخدمت الخدمة بسعادة لبعض الوقت. تتواصل ماريا مع خدمة العملاء في اليوم الخامس عشر من دورة الفوترة وتذكر أنّها ستنتقل إلى الخارج ولن تتمكّن من استخدام الخدمة بعد ذلك بدءًا من اليوم التالي.

  2. تحدّد خدمة العملاء تفاصيل عملية شراء اشتراك ماريا في نظامها وتبدأ طلبًا إلى purchases.subscriptionsv2.revoke لطلب ردّ الأموال حسب الاستخدام.

  3. تخبر خدمة العملاء ماريا بأنّه سيتم ردّ حوالي 50% من سعر اشتراكها وأنّه تم إنهاء إمكانية الوصول إلى الخدمة على الفور.