قد تحتاج إلى اتّخاذ إجراءات إدارية بشأن الاشتراكات أو عمليات الشراء لمرة واحدة كجزء من العمل اليومي. على سبيل المثال، قد تحتاج خدمة العملاء إلى ردّ الأموال التي دفعها المستخدمون بالكامل أو ردّ جزء منها، أو قد تحتاج إلى إبطال الأذونات في حالات معيّنة. يمكنك إدارة الطلبات من Play Console، أو إذا كنت تريد إدارتها من نظامك الخاص، يمكنك إجراء ذلك باستخدام Google Play Developer API.
إلغاء الاشتراكات
يمكن للمستخدمين أو المطوّرين بدء عمليات إلغاء الاشتراكات.
عمليات الإلغاء التي يبدأها المستخدم
يمكن للمستخدمين إلغاء اشتراك Google Play في أي وقت باستخدام "متجر Play". في حال توفّر اشتراكات، يجب أن توفّر للمستخدمين أيضًا خيار إلغاء اشتراكاتهم في تطبيقك وعلى موقعك الإلكتروني.
إنّ أسهل طريقة لتمكين المستخدمين من إلغاء اشتراكاتهم طوعًا هي توفير روابط لصفحات في التطبيق تؤدي إلىمتجر Play، حيث يمكنهم عرض اشتراكاتهم وإدارتها.
عمليات الإلغاء التي يبدأها المطوّر
بصفتك مطوّرًا، قد تحتاج أيضًا إلى بدء عمليات الإلغاء من الخلفية.
يتيح لك purchases.subscriptions.cancel
API إلغاء عملية شراء اشتراك.
على سبيل المثال، يمكنك استخدام هذه الطريقة لإيقاف خدمة قديمة.
لا يؤدي إلغاء الاشتراك إلى استرداد الأموال، ويحتفظ المستخدم بإمكانية الوصول إلى التطبيق حتى نهاية مدة الفوترة الحالية.
تتيح لك هذه الطريقة تحديد الأنواع التالية من عمليات الإلغاء في مَعلمة نص الطلب cancellationType:
USER_REQUESTED_STOP_RENEWALS: لإلغاء الاشتراك كما لو أنّ المستخدمين ألغوه من "متجر Play". ستستمر أي دفعات مقسّطة خلال المدة المتبقية من فترة الالتزام الحالية. من "متجر Play"، يمكن للمستخدمين استعادة الاشتراك قبل انتهاء صلاحيته، أو إعادة الاشتراك بعد انتهاء صلاحيته إذا كان هذا الخيار مفعّلاً للخطة الأساسية.
DEVELOPER_REQUESTED_STOP_PAYMENTS: لإلغاء الاشتراك ومنع أي دفعات أخرى لا يمكن للمستخدمين استعادة الاشتراك أو إعادة الاشتراك فيه من "متجر Play"، ولكن يمكنك السماح لهم بالاشتراك مرة أخرى داخل تطبيقك.
السماح للمستخدمين باستعادة الاشتراكات غير المنتهية الصلاحية
في بعض الحالات، قد يكون من المفيد السماح للمستخدمين باستعادة الاشتراكات غير المنتهية الصلاحية من مركز اشتراكات Play بعد أن تبدأ عملية الإلغاء بصفتك مطوّرًا. على سبيل المثال، قد تحتاج إلى توفير مسار إلغاء مخصّص داخل التطبيق. استنادًا إلى منطق عملك، يمكنك تحديد عمليات الإلغاء التي تم إجراؤها من الخلفية والتي يمكن للمستخدمين استعادتها.
للإشارة إلى أنّ المستخدم يمكنه استعادة عملية الإلغاء، أرسِل طلب POST إلى واجهة برمجة التطبيقات purchases.subscriptions.cancel، واضبط مَعلمة الطلب cancellationType على القيمة USER_REQUESTED_STOP_RENEWAL.
مثال:
- رمز الشراء المميز للاشتراك
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_RENEWAL"
}
السماح للمستخدمين بإعادة الاشتراك في الاشتراكات المنتهية الصلاحية
للسماح بإعادة الاشتراك في اشتراك منتهي الصلاحية، عليك تفعيل خيار إعادة الاشتراك في الخطة الأساسية للاشتراك، ثم إلغاء الاشتراك من خلال ضبط المَعلمة cancellationType على القيمة USER_REQUESTED_STOP_RENEWAL.
السماح للمستخدمين بإعادة الاشتراك في تطبيقك فقط
إذا ضبطت المَعلمة cancellationType على DEVELOPER_REQUESTED_STOP
_PAYMENTS أو لم تضبطها، لن يتمكّن المستخدمون من استعادة اشتراكهم من مركز اشتراكات Play.cancellationType ومع ذلك، يمكن للمستخدمين الاشتراك مجددًا من خلال تطبيقك إذا لزم الأمر.
يؤدي اتّخاذ هذا الإجراء إلى إرسال SUBSCRIPTION_CANCELED إشعار في الوقت الفعلي خاص بالمطوّرين. تعامَل مع عمليات الإلغاء هذه على النحو الموضّح في مقالة عمليات الإلغاء.
تأجيل الفوترة
يمكنك تمديد فترة الاستحقاق الخاصة باشتراك باستخدام الطريقة subscriptionsv2.defer. عند تأجيل اشتراك يتضمّن ميزات إضافية، يتم تأجيل جميع العناصر في الاشتراك لمدة التأجيل نفسها. خلال فترة التأجيل، يظل المستخدم مشتركًا في المحتوى الخاص بك، ولكن لن يتم تحصيل رسوم منه مقابل الوقت الإضافي. عند تأجيل فوترة اشتراك، يتم تعديل معلومات الحالة وفقًا لذلك، وتظهر في الحقل expiryTime ضمن معلومات حالة الشراء على النحو التالي:
- بالنسبة إلى الاشتراكات المتكرّرة النشطة، يؤدي تأجيل الفوترة إلى تمديد تاريخ التجديد التالي.
- بالنسبة إلى خطط الدفع المُسبَق، يؤدي تأجيل الفوترة إلى تمديد وقت انتهاء الصلاحية.
في ما يلي بعض الأمثلة على كيفية استخدام الفوترة المؤجّلة:
- يمكنك منح المستخدمين إمكانية الوصول إلى المحتوى بدون تكلفة كعرض خاص، مثل منح المشتركين الحاليين أسبوعًا مجانيًا مقابل ملء استطلاع حول ملاحظاتهم.
- يمكنك منح العملاء إذن الوصول بدون تكلفة كإجراء متّخذ في إطار خدمة العملاء، مثلاً بعد انقطاع الخدمة لفترة طويلة قد يكون أثّر في قدرتهم على استخدام خدمتك.
يمكن تأجيل الفوترة لمدة يوم واحد على الأقل ولمدة تصل إلى عام واحد لكل طلب بيانات من واجهة برمجة التطبيقات. لتأجيل انتهاء صلاحية إذن الوصول أكثر من ذلك، عليك استدعاء واجهة برمجة التطبيقات مرة أخرى قبل حلول تاريخ انتهاء الصلاحية الجديد.
يؤدي اتّخاذ هذا الإجراء إلى إرسال SUBSCRIPTION_DEFERRED إشعار في الوقت الفعلي خاص بالمطوّرين. راجِع مقالة تأجيل الفوترة للمشترك في لمحة عن الاشتراكات للتعرّف على كيفية التعامل مع هذه الأحداث.
مثال:
تريد خدمة البث FitnessGoals إطلاق عرض ترويجي لتشجيع ممارسة التمارين الرياضية بانتظام في شباط (فبراير).
قرّرت الشركة تقديم شهر إضافي من الخدمة لأي مشترك يتدرّب مع FitnessGoals 10 مرات على الأقل خلال شهر فبراير.
يتتبّعون نتائج التحدي، وفي 1 آذار (مارس)، يستدعون طريقة subscriptionsv2.defer لكل عملية شراء اشتراك نشط تخص المستخدمين الذين أتموا التحدي في شباط (فبراير).
يحصل هؤلاء المستخدمون على شهر كامل إضافي من فيديوهات التمارين الرياضية المنتظمة بدون أي تكلفة، ويخبرون جميع أصدقائهم عن المزايا التي يقدّمها تطبيق FitnessGoals لمساعدتهم في الحفاظ على صحتهم.
ردّ الأموال وإلغاء الاشتراكات
هناك العديد من الحالات التي قد تحتاج فيها إلى ردّ الأموال المدفوعة مقابل اشتراك أو عملية شراء لمرة واحدة أو إبطال إمكانية الوصول إليهما.
ردّ الأموال المدفوعة في أحد الطلبات بالكامل باستخدام معرّف الطلب
باستخدام واجهة برمجة التطبيقات orders.refund، يمكنك ردّ الأموال بالكامل مقابل أي طلب خلال ثلاث سنوات من تاريخ الشراء.
يتلقّى الإجراء orders.refund مَعلمة إلغاء تشير إلى ما إذا كان يجب إلغاء الإذن بالوصول بالإضافة إلى ردّ الأموال.
إذا أصدرت عملية إبطال مع طلب استرداد الأموال المدفوعة مقابل شراء اشتراك، سيتم إنهاء الاشتراك على الفور وسيؤدي ذلك إلى إرسال SUBSCRIPTION_REVOKEDإشعار في الوقت الفعلي للمطوّر. اطّلِع على دليل إدارة مراحل نشاط الاشتراك، قسم عمليات الإبطال، لمعرفة كيفية التعامل مع هذه الأحداث.
مثال:
للاحتفال ببداية بطولة كأس العالم الجديدة، قرّر تطبيق الرياضات الإلكترونية Football-Not-Soccer إجراء سحب على قمصان افتراضية مجانية لجميع المستخدمين الذين يشترون مجموعات الفريق الجديدة في أول 24 ساعة.
يستخدم تطبيق Football-Not-Soccer واجهة برمجة التطبيقات
orders.refundبدون تمرير مَعلمة الإلغاء لردّ الأموال التي دفعها الفائزون مقابل شراء القمصان.
إبطال اشتراك وردّ أمواله باستخدام الرمز المميز للشراء
في بعض حالات الاستخدام، قد تحتاج إلى إلغاء إذن الوصول إلى اشتراك أحد المستخدمين وردّ الأموال المدفوعة. توفّر ميزة "الفوترة في Play" طرقًا لإلغاء عمليات الدفع، بما في ذلك ردّ الأموال بالكامل وردّ الأموال على أساس تناسبي من خلال واجهة برمجة التطبيقات subscriptionsv2.revoke. باستخدام نقطة النهاية هذه، يمكنك تحديد revocationContext
لتحديد طريقة احتساب المبلغ الذي سيتم ردّه.
يؤدي اتّخاذ هذا الإجراء إلى إرسال SUBSCRIPTION_REVOKEDإشعار في الوقت الفعلي خاص بالمطوّرين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": {} كنوع استرداد الأموال.
مثال:
لدى "ماريا" اشتراك يتجدّد تلقائيًا لمدة 30 يومًا في خطة البث الشهري من SuperMovies. واجهت "ماريا" بعض المشاكل الفنية التي تمنعها من الوصول إلى المحتوى. تتواصل مع خدمة العملاء في اليوم الثالث من دورة الفوترة وتوضّح أنّها لم تتمكّن من الوصول إلى الاشتراك.
يحدّد فريق خدمة العملاء تفاصيل شراء اشتراك "ماريا" في النظام ويطلب ردّ الأموال المدفوعة بالكامل من خلال الاتصال بـ
purchases.subscriptionsv2.revoke.أخبر فريق خدمة العملاء "ماريا" بأنّه سيتم ردّ 100% من سعر اشتراكها وأنّها لم تعُد مشتركة في الخطة.
ردّ الأموال بشكل نسبي
إذا كنت بحاجة إلى إنهاء اشتراك وردّ جزء من الأموال المدفوعة مقابل المدة المتبقية من الاشتراك، عليك إصدار عملية ردّ جزء من الأموال. استخدِم الدالة
purchases.subscriptionsv2.revoke
واضبط "proratedRefund": {} كنوع استرداد الأموال.
مثال:
لدى "ماريا" اشتراك يتجدّد تلقائيًا لمدة 30 يومًا في خطة البث الشهري من SuperMovies. وقد استخدمت الخدمة بسعادة لبعض الوقت. تتواصل "ماريا" مع خدمة العملاء في اليوم الـ 15 من دورة الفوترة وتخبرهم بأنّها ستنتقل إلى الخارج ولن تتمكّن من استخدام الخدمة اعتبارًا من اليوم التالي.
يحدّد فريق خدمة العملاء تفاصيل شراء اشتراك "ماريا" في النظام ويطلب ردّ الأموال المدفوعة بشكل نسبي من خلال الاتصال بالدالة
purchases.subscriptionsv2.revoke.أخبرت خدمة العملاء "ماريا" بأنّه سيتم ردّ حوالي% 50 من سعر اشتراكها، وأنّه سيتم إيقاف الخدمة على الفور.