كل المقالات
دليل عمليمدة القراءة 8 دقائق

يمكن أن تستهدف استردادات إضافات اشتراكات Google Play عنصرًا واحدًا في كل مرة، لكن عميلك لا يستطيع إلا إلغاء الحزمة كاملة

يتيح Google Play للاشتراك الأساسي أن يحمل ما يصل إلى 49 إضافة على رمز شراء واحد. إليك كيف تعمل استردادات إضافات الاشتراك، وأي استدعاء API يسترد عنصرًا واحدًا دون المساس بالباقي، وأين يمنعه Google، وكم يكلفك كل مسار استرداد.

شخص على طاولة في مقهى يتفقد هاتف Android بجوار إيصال مفصّل، وهو نوع الشراء المجمّع الذي تُطبَّق فيه استردادات إضافات اشتراكات Google Play بندًا بندًا

أهم الخلاصات

  • تجمع ميزة الاشتراك مع الإضافات في Google Play اشتراكًا أساسيًا وما يصل إلى 49 إضافة، أي 50 عنصرًا إجمالًا، في عملية شراء واحدة، ويجب أن تشترك كل العناصر في فترة الفوترة المتكررة نفسها.
  • لا يستطيع مستخدمو Google Play إلغاء إضافة واحدة من Play Subscription Center. يمكنهم فقط إلغاء الاشتراك الأساسي وإضافاته معًا، لذا يجب أن تتم إزالة إضافة واحدة داخل تطبيق المطوّر.
  • تقبل الطريقة purchases.subscriptionsv2.revoke كائن itemBasedRefund مع productId واحد. إذا بقيت العناصر الأخرى نشطة، يُلغي Google هذا العنصر وحده ويسترد قيمته كاملة، ويستمر الاشتراك.
  • يمنع Google الاسترداد على مستوى العنصر عندما يكون الاشتراك في حالة رفض الدفع، وعندما يكون العنصر منتهيًا أو غير مملوك، وفي الاشتراكات المدفوعة مسبقًا.
  • في الاشتراك مع الإضافات، يسترد proratedRefund آخر طلب لكل عنصر بشكل تناسبي حسب الوقت المتبقي حتى التجديد التالي، ويُلغي الوصول إلى جميع العناصر دفعة واحدة.
  • لا تحمل إشعارات المطوّرين في الوقت الفعلي للاشتراك مع الإضافات قيمة subscriptionId، لذا يجب على الخادم استدعاء purchases.subscriptionsv2.get وقراءة كل lineItem لمعرفة العناصر التي لا يزال المستخدم يستحقها.
  • مسار الاسترداد الوحيد في Google Play الذي يطلب أدلة من المطوّر هو رد المبالغ (chargeback) المُحال إلى المراجعة عبر orders.reviewrefund، مع مهلة 24 ساعة. بالنسبة للطلبات المقدمة بعد 3 أغسطس 2026، يكلّف رد المبالغ الخاسر المطوّرَ سعر الشراء مطروحًا منه رسوم خدمة Play، مضافًا إليه رسوم البنك.

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

كيف يُبنى الاشتراك مع الإضافات

أعلن Google عن الدفع متعدد المنتجات للاشتراكات في مؤتمر I/O 2025. تبيع عملية شراء واحدة اشتراكًا أساسيًا مع إضافات اختيارية، تُفوتر معًا وفق جدول واحد. ويضع دليل المطوّرين من Google حدودًا صارمة:

  • الخطط الأساسية ذات التجديد التلقائي وحدها يمكنها حمل إضافات. الخطط المدفوعة مسبقًا لا يمكنها ذلك.
  • يجب أن تشترك كل العناصر في فترة الفوترة المتكررة نفسها. لا يُسمح بإضافات شهرية على اشتراك أساسي سنوي.
  • تحتوي عملية الشراء على 50 عنصرًا كحد أقصى، أي اشتراك أساسي واحد وما يصل إلى 49 إضافة.
  • الميزة غير متاحة في كوريا الجنوبية.

كل ذلك موجود على رمز شراء واحد. عند استدعاء purchases.subscriptionsv2.get، تحمل الاستجابة قائمة lineItems، بإدخال واحد لكل عنصر. لكل بند قيم productId و expiryTime و latestSuccessfulOrderId خاصة به. هذا الحقل الأخير هو ما يجعل الاسترداد لكل عنصر ممكنًا: لكل عنصر آخر طلب خاص به.

الحساب التناسبي يبدأ من اليوم الأول

عندما يضيف المستخدم إضافة في منتصف الدورة، يفرض Google مبلغًا تناسبيًا فورًا حتى تتجدد الإضافة في تاريخ تجديد الاشتراك الأساسي نفسه. في مثال Google نفسه، إضافة شهرية بسعر $10 أُضيفت في 15 أغسطس بعد فترة تجريبية مدتها 7 أيام، فُرض عليها $2.90 لتغطية بقية أغسطس. لذا قد يكون للإضافة الواحدة طلب أول قصير بمبلغ غير معتاد قبل أول طلب كامل. تذكّر ذلك عندما تبحث عن الطلب الذي سيقع عليه الاسترداد.

عميلك لا يستطيع إلا إلغاء الحزمة كاملة

صفحة المساعدة الخاصة بالمستخدمين من Google واضحة في ذلك. يمكن للمستخدمين إلغاء الاشتراك الأساسي والإضافات معًا فقط، ولا يمكنهم حاليًا إلغاء إضافات منفردة من Google Play. والإيقاف المؤقت غير متاح أيضًا. إذا رفض المستخدم زيادة في السعر، يُلغي Google الاشتراك الأساسي وكل الإضافات معه.

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

مقارنة أدوات استرداد إضافات اشتراكات Google Play

يمنحك Google خمس طرق لإعادة الأموال في الاشتراك مع الإضافات. وهي تختلف فيما تسترده وفي ما إذا كان الوصول ينتهي.

الأداةما الذي يُستردماذا يحدث للوصول
استرداد من Play Console على طلب محددمبلغ تختاره من ذلك الطلبلا يُلغى أي شيء
orders.refund دون تعيين revokeالمبلغ الكامل لطلب واحدلا يُلغى أي شيء
subscriptionsv2.revoke مع itemBasedRefundآخر رسوم كاملة على عنصر واحدينتهي هذا العنصر وحده، إلا إذا كان آخر عنصر نشط
subscriptionsv2.revoke مع proratedRefundآخر طلب لكل عنصر، بشكل تناسبي حسب الوقت المتبقيتنتهي كل العناصر فورًا
subscriptionsv2.revoke مع fullRefundآخر رسوم كاملة على كل عنصرتنتهي كل العناصر فورًا

يضيف Google تحذيرًا صارمًا في دليل الإضافات: لا تستدعِ purchases.subscriptions.refund المُهمل على اشتراك مع إضافات. كما أن orders.refund لا يمكنه التعامل مع الطلبات الأقدم من ثلاث سنوات.

كيف يتصرف itemBasedRefund

يأخذ الكائن itemBasedRefund حقلًا إلزاميًا واحدًا، هو productId، الذي يحدد العنصر المراد إلغاؤه. ويصف Google نتيجتين:

  • عناصر أخرى لا تزال نشطة: يُلغى العنصر المحدد وحده ويُسترد بالكامل، ويستمر الاشتراك.
  • لا توجد عناصر نشطة أخرى: يُلغى العنصر ويُسترد بالكامل، ويُلغى الاشتراك كله.

يمكنك تحديد عنصر واحد في كل طلب. لاسترداد إضافتين، نفّذ استدعاءين.

متى يمنع Google الاسترداد على مستوى العنصر

يرفض Google طلب itemBasedRefund في ثلاث حالات. أن يكون الاشتراك في أي حالة من حالات رفض الدفع، وهذا يشمل فترة السماح وتعليق الحساب. أو أن يكون العنصر المحدد غير مملوك أو منتهيًا بالفعل. أو أن تكون عملية الشراء اشتراكًا مدفوعًا مسبقًا، حيث لا يُدعم رفض العناصر إطلاقًا.

ما الذي يفعله الاسترداد بمعرّف الطلب

يشير دليل Google إلى أن علامة revoke في orders.refund لا تُنهي الوصول إلا إذا كان الطلب هو الأحدث في الاشتراك. على طلب أقدم، ينجح الاسترداد ولا يُلغى أي شيء. ويعمل Play Console بالطريقة نفسها: استرد أحدث طلب فيُزال الاشتراك، واسترد طلبًا أقدم فيبقى نشطًا. مع الإضافات، اختر الطلب من latestSuccessfulOrderId الخاص بالبند الصحيح، وإلا فقد تسترد رسومًا غير التي قصدتها.

من يقرر الاسترداد، ومتى يُطلب منك تقديم أدلة

تُحسم معظم الاستردادات في الاشتراك مع الإضافات دونك، تمامًا مثل أي اشتراك آخر في Play. خلال 48 ساعة من الشراء، يمكن للمستخدم أن يطلب من Google عبر خيار الإبلاغ عن مشكلة، ويقرر Google. بعد ذلك، يحيله Google إليك. وإذا لم تؤكد شراء اشتراك جديد خلال ثلاثة أيام، يسترد Google للمستخدم أمواله تلقائيًا ويُلغي الشراء.

مسار واحد فقط يطلب روايتك. عندما يقدّم حامل البطاقة طلب رد مبالغ ويضع Google عليه علامة لمراجعة المطوّر، تتلقى PendingRefundReviewNotification ولديك 24 ساعة لاستدعاء orders.reviewrefund مع تفضيل الاسترداد وأدلة الاستخدام. أما ردود المبالغ نفسها فيقررها البنك، وقرار البنك نهائي.

تتبّع استردادات الإضافات على خادمك

يسرد مرجع RTDN من Google الإشعار SUBSCRIPTION_ITEMS_CHANGED للتغييرات على عنصر في حزمة اشتراك، والإشعار SUBSCRIPTION_REVOKED للاشتراك المُلغى قبل وقت انتهائه. ويقول دليل Google إن الإلغاء عبر subscriptionsv2.revoke يُطلق إشعار SUBSCRIPTION_REVOKED وكذلك VoidedPurchaseNotification، ويُسجَّل في Voided Purchases API.

المشكلة في subscriptionId. يقول Google إنه لا يُرسل في RTDN للاشتراكات مع الإضافات. لذا لا تعتمد على الإشعار لمعرفة العنصر الذي تغيّر. مع كل إشعار يخص حزمة:

  • استدعِ purchases.subscriptionsv2.get باستخدام purchaseToken.
  • اقرأ كل lineItem وقيمة expiryTime الخاصة به. يقول Google إن عليك تحديث expiryTime لجميع العناصر، لا للعنصر الذي تتوقعه فقط.
  • امنح الوصول أو أزله حسب كل productId، لا حسب رمز الشراء.
  • استعلم دوريًا من Voided Purchases API كخط دفاع احتياطي. فهو يغطي آخر 30 يومًا.

فترة السماح وتعليق الحساب ينطبقان على الحزمة

مشاكل الدفع تصيب كل العناصر دفعة واحدة. يختار Google أقصر فترة سماح بين العناصر النشطة ويطبقها على التجديد كله. خلال فترة السماح، يحتفظ المستخدم بكل العناصر. وفي تعليق الحساب، يُعلَّق الوصول إلى كل العناصر. إذا لم يتعافَ الدفع أبدًا، تنتهي العناصر المرفوضة وتستأنف العناصر الأخرى لبقية فترات الفوترة الخاصة بها.

مكتب مطوّر عليه حاسوب محمول يعرض رسومًا بيانية لتكاليف الخوادم بجوار فاتورة مفصّلة، تُتتبَّع فيها التكاليف المدفوعة وراء كل إضافة اشتراك في Google Play

كم يكلفك كل مسار استرداد ماليًا

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

استرداد أكثر من اللازم

الخطأ المكلف هو اللجوء إلى fullRefund أو proratedRefund عندما تكون الشكوى عن إضافة واحدة. كلاهما يُلغي كل العناصر، فتعيد سعر الاشتراك الأساسي أيضًا وتخسر مشتركًا كان يريد البقاء. أما itemBasedRefund فيعيد آخر رسوم لتلك الإضافة فقط. وعندما يكون ممنوعًا، فإن orders.refund على آخر طلب لذلك العنصر يعيد المال دون إنهاء أي شيء.

الاستردادات الجزئية والرسوم

يتيح لك Play Console إصدار استردادات جزئية على طلبات الاشتراك، ويقول Google إن نسبة الاسترداد تنطبق أيضًا على مستحقاتك ورسوم الخدمة. استرد نصف طلب فيعود معه نصف رسوم Google. أما تكاليفك الخاصة لتقديم تلك الإضافة فلا تعود.

رد المبالغ على حزمة

بالنسبة للطلبات المقدمة بعد 3 أغسطس 2026، ينقل Google تكاليف رد المبالغ إلى المطوّرين. عندما ينجح رد المبالغ، تدفع سعر الشراء مطروحًا منه رسوم خدمة Play، مضافًا إليه الرسوم التي يفرضها البنك. وطلب الحزمة الذي يضم عدة إضافات هو طلب أكبر قد تخسره. سجلات الاستخدام لكل إضافة، المربوطة بمعرّف الحساب المُموَّه، هي ما سترسله في مراجعة مدتها 24 ساعة.

قائمة تحقق لاستردادات الإضافات

  • وفّر طريقة داخل التطبيق لإزالة إضافة واحدة، لأن Google Play لا يوفرها.
  • خزّن productId و expiryTime و latestSuccessfulOrderId لكل lineItem مع كل إشعار.
  • استخدم itemBasedRefund افتراضيًا عندما تكون المشكلة في إضافة واحدة.
  • عندما يكون الاشتراك في فترة السماح أو تعليق الحساب، استرد طلب العنصر باستخدام orders.refund بدلًا من ذلك.
  • لا تستدعِ أبدًا purchases.subscriptions.refund المُهمل على حزمة.
  • سجّل استخدام الإضافات لكل حساب حتى يمكن إرسال الرد على مراجعة رد المبالغ خلال 24 ساعة.
  • أبلغ عن معدلات الاسترداد لكل إضافة، لا لكل اشتراك فقط، حتى لا تختبئ إضافة ضعيفة في أرقام الخطة الأساسية.

الأسئلة الشائعة

هل يمكن للمستخدم إلغاء إضافة واحدة فقط في اشتراك Google Play؟
ليس من Google Play. تقول صفحة المساعدة من Google إن المستخدمين لا يمكنهم إلا إلغاء الاشتراك الأساسي والإضافات معًا. يمكن لتطبيقك أن يوفر إزالة إضافة واحدة، وتنتهي حينها في نهاية فترة الفوترة الحالية.
كيف أسترد إضافة واحدة دون إلغاء الاشتراك؟
استدعِ purchases.subscriptionsv2.revoke مع itemBasedRefund يحدد productId الخاص بالإضافة. إذا بقيت العناصر الأخرى نشطة، يُلغي Google هذا العنصر وحده ويسترده بالكامل. يمكنك أيضًا استرداد آخر طلب للعنصر باستخدام orders.refund دون علامة revoke، فيعود المال ويبقى الوصول كما هو.
لماذا فشل استدعاء itemBasedRefund؟
يمنعه Google عندما يكون الاشتراك في حالة رفض الدفع، وعندما يكون العنصر غير مملوك أو منتهيًا، وفي الاشتراكات المدفوعة مسبقًا. تحقق من expiryTime للبند ومن حالة الاشتراك قبل الاستدعاء.
هل يعمل الاسترداد التناسبي على اشتراك مع إضافات؟
نعم، لكنه يُلغي كل شيء. يسترد Google آخر طلب لكل عنصر بشكل تناسبي حسب الوقت المتبقي حتى التجديد التالي، وينتهي الوصول إلى كل العناصر فورًا.
أي RTDN يخبرني بأن إضافة قد استُردت؟
يقول دليل Google إن الإلغاء يُطلق SUBSCRIPTION_REVOKED و VoidedPurchaseNotification، وإن SUBSCRIPTION_ITEMS_CHANGED يغطي التغييرات على عنصر في الحزمة. ولأن subscriptionId غير موجود في الحزم، استدعِ purchases.subscriptionsv2.get واقرأ كل lineItem لمعرفة ما تغيّر.

المصادر وقراءات إضافية

RefundHalt

الطيار الآلي للاستردادات في App Store وGoogle Play

تابع القراءة

طلب الاسترداد التالي في طريقه إليك بالفعل.

أعد RefundHalt في الوقت الذي تستغرقه لقراءة رسالة دعم أخرى عن استرداد لم تتمكن من الاعتراض عليه.