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

قد تحتاج إلى اتخاذ إجراءات إدارية بشأن الاشتراكات أو عمليات الشراء لمرة واحدة كجزء من العمل اليومي. على سبيل المثال، قد يحتاج فريق خدمة العملاء إلى ردّ الأموال التي دفعها المستخدمون بالكامل أو ردّ جزء من الأموال، أو قد تحتاج إلى إبطال الأذونات في حالات معيّنة. يمكنك إدارة الطلبات من 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 أو لم تضبط المَعلمة cancellationType، لن يتمكّن المستخدمون من استعادة اشتراكهم من مركز الاشتراكات في Play. ومع ذلك، يمكن للمستخدمين الاشتراك مجددًا من خلال تطبيقك إذا لزم الأمر.

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

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

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

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

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

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

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

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

مثال:

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

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

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

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

إصدار عمليات ردّ الأموال وإلغاء عمليات الشراء

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

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

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

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

مثال:

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

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

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

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

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

مثال:

  • عملية شراء باستخدام الرمز المميّز للشراء 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 الشهرية. وقد استخدمت الخدمة بسعادة لبعض الوقت. تتواصل "ماريا" مع خدمة العملاء في اليوم الـ 15 من دورة الفوترة وتذكر أنّها ستنتقل إلى الخارج ولن تتمكّن من استخدام الخدمة بعد ذلك اعتبارًا من اليوم التالي.

  2. يحدّد فريق خدمة العملاء تفاصيل شراء اشتراك "ماريا" في نظامه ويُجري مكالمة مع purchases.subscriptionsv2.revoke لطلب استرداد جزء من الأموال المدفوعة.

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