كل المقالات
Deep diveمدة القراءة 8 دقائق

إذا لم تؤكّد عملية شراء على Google Play خلال ثلاثة أيام، تسترد Google المبلغ، وإليك ما يكلّفك ذلك

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

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

أهم الخلاصات

  • يقوم Google Play تلقائيًا باسترداد المبلغ للمشتري وإلغاء عملية الشراء إذا لم يؤكّدها تطبيقك خلال ثلاثة أيام. إنه فشل في التكامل، وليس قرارًا من العميل، وهو قابل للمنع بالكامل من جهة الخادم.
  • يبدأ عدّاد الأيام الثلاثة عندما تصبح حالة الشراء PURCHASED، وليس عند بدء الدفع. عملية الشراء التي تظل في حالة PENDING لم تبدأ العدّاد ويجب عدم تأكيدها بعد.
  • استدعاءان يفيان بالمتطلب. استهلاك منتج قابل للاستهلاك عبر purchases.products.consume وتأكيد منتج غير قابل للاستهلاك أو اشتراك عبر purchases.products.acknowledge أو purchases.subscriptions.acknowledge كلاهما يُحتسب تأكيدًا.
  • الشراء الأولي للاشتراك فقط هو ما يحتاج إلى تأكيد. التجديدات لا تحتاج إليه، ويضع Google عليها علامة ACKNOWLEDGEMENT_STATE_ACKNOWLEDGED تلقائيًا.
  • الخطط المدفوعة مسبقًا الأقصر من أسبوع واحد يجب تأكيدها خلال نصف مدة الخطة، وهو موعد نهائي أضيق من الأيام الثلاثة القياسية.
  • الاسترداد يسحب سعر البيع، لكن الحوسبة، واستدعاءات واجهة برمجة النموذج، والتخزين، ومدفوعات المبدعين التي أنفقتها بالفعل لتسليم المنتج لا تُعاد. المال الذي تخسره أكبر من البند المذكور.
  • لا يوجد لدى Apple ما يعادل ذلك. يُعاد تسليم معاملة StoreKit غير المكتملة حتى تُنهيها، لكن Apple لا تستردها تلقائيًا أبدًا. هذا النوع من الفشل خاص بـ Google Play فقط.

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

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

ماذا تقول قاعدة الأيام الثلاثة فعليًا

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

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

يبدأ العدّاد عند PURCHASED، وليس عند الدفع

لا تبدأ نافذة الأيام الثلاثة عندما ينقر المستخدم على الشراء. تبدأ عندما تنتقل حالة الشراء إلى PURCHASED. يمكن أن تظل عملية الشراء في حالة PENDING أولًا، وهو ما يحدث مع المدفوعات النقدية، أو التحويلات المصرفية البطيئة، أو موافقة أحد الوالدين على طلب طفله. Google صريح: "تبدأ نافذة تأكيد الأيام الثلاثة فقط عندما تنتقل حالة الشراء من PENDING إلى PURCHASED."

لهذا نتيجتان. امنح الاستحقاق فقط عندما تكون الحالة PURCHASED، وليس أبدًا عند PENDING، وإلا فإنك تسلّم المنتج مقابل دفعة قد لا تكتمل أبدًا. ولا تؤكّد عملية شراء في حالة PENDING أيضًا. تستدعي enablePendingPurchases() عند إنشاء BillingClient، وتنتظر الانتقال، وعندها فقط تبدأ عدّاد التأكيد للأيام الثلاثة في ذهنك.

أكّد أو استهلك، وأيهما عليك

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

بالنسبة لمنتج قابل للاستهلاك، تستهلكه. على خادم خلفي آمن يكون ذلك purchases.products.consume، أو من جانب العميل consumeAsync() في مكتبة Play Billing. الاستهلاك يؤكّد عملية الشراء ويجعل المنتج قابلًا للشراء مجددًا، وهو بالضبط ما تريده للعملات، أو الأرصدة، أو عملية توليد لمرة واحدة. بالنسبة لمنتج غير قابل للاستهلاك أو اشتراك، تؤكّده: purchases.products.acknowledge أو purchases.subscriptions.acknowledge على الخادم، أو acknowledgePurchase() من جانب العميل. التأكيد ينهي الموعد النهائي دون تحرير المنتج لإعادة الشراء.

نوع الشراءالاستدعاء الذي يفي بالموعد النهائيماذا يفعل إضافة إلى ذلكالموعد النهائي
قابل للاستهلاكpurchases.products.consume أو consumeAsync()يجعل المنتج أيضًا قابلًا لإعادة الشراء3 أيام من PURCHASED
غير قابل للاستهلاكpurchases.products.acknowledge أو acknowledgePurchase()يضع علامة على منح الاستحقاق، دون إعادة شراء3 أيام من PURCHASED
اشتراك، شراء أوليpurchases.subscriptions.acknowledge أو acknowledgePurchase()يؤكّد الاشتراك الجديد3 أيام من PURCHASED
تجديد اشتراكلا شيء مطلوبيضع Google علامة عليه تلقائيًا كمؤكَّدغير منطبق
خطة مدفوعة مسبقًا أقل من أسبوعأكّد كما سبقيؤكّد الاستحقاقنصف مدة الخطة

التجديدات مُعالَجة سلفًا، أما عمليات الشراء الأولية فلا

أنت مدين بالتأكيد فقط على أول عملية شراء لاشتراك. يذكر Google بوضوح أنه "لا تحتاج إلى تأكيد تجديدات الاشتراك،" ويضع بنفسه علامة ACKNOWLEDGEMENT_STATE_ACKNOWLEDGED على التجديدات. تصل عملية الشراء الجديدة بحالة ACKNOWLEDGEMENT_STATE_PENDING وتظل مسؤوليتك حتى تنهيها. قبل أن تؤكّد، تحقق من acknowledgementState على الخادم أو isAcknowledged() من جانب العميل حتى لا تؤكّد مرتين.

الخطط المدفوعة مسبقًا لها فتيل أقصر

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

لماذا تظل عمليات الشراء دون تأكيد من الأساس

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

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

التجربة المجانية والمستخدم الذي لا يعود أبدًا

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

ما تكلّفه فعليًا عملية استرداد غير مؤكَّدة

بند الاسترداد يقلّل من قدر الخسارة. عندما يعكس Google عملية البيع، تعيد السعر، وهذا هو الرقم المرئي. لكنه ليس الفاتورة كاملة.

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

بالنسبة للاشتراكات والتجارب، الخسارة هي أول فوترة لم تحصّلها قط وعلاقة العميل التي انتهت قبل أن تبدأ. واعتبارًا من 3 أغسطس 2026، ينقل Google Play سعر شراء ردّ المبالغ المدفوعة ورسوم البنك إلى المطورين بالنسبة للطلبات المقدَّمة بعد ذلك التاريخ، وهو ما يجعل إغلاق أي تسرّب إيرادات يمكن تجنّبه أمرًا يستحق الآن لا لاحقًا. الاسترداد غير المؤكَّد ليس ردًّا للمبالغ المدفوعة، لكنه الدرس نفسه: المال الذي أنفقته بالفعل ليس تلقائيًا مالًا تحتفظ به.

إيصال مطوي وعملات تُسحب عبر طاولة داكنة، توضّح المال المُنفَق بالفعل عند استرداد وإلغاء عملية شراء غير مؤكَّدة على Google Play

كيف تؤكّد عملية شراء على Google Play من جهة الخادم

النمط الموثوق يزيل التطبيق من المسار الحرج. افعل ذلك على خادمك الخلفي، مدفوعًا بالإشعارات، لا بإعادة المستخدم فتح الشاشة.

  • استمع إلى Real-time developer notifications. حدث شراء ONE_TIME_PRODUCT أو SUBSCRIPTION_PURCHASED يخبر خادمك بوجود عملية شراء في اللحظة التي يعرفها فيها Google، سواء أكان التطبيق مفتوحًا أم لا.
  • تحقق من رمز الشراء مقابل Play Developer API وأكّد أن الحالة PURCHASED، وليست PENDING.
  • امنح الاستحقاق في سجلاتك الخاصة، مرتبطًا بالمستخدم.
  • أكّد أو استهلك فورًا. استهلك المنتجات القابلة للاستهلاك، وأكّد غير القابلة للاستهلاك والاشتراكات الأولية. تحقق من acknowledgementState أولًا حتى لا تؤكّد مرتين أبدًا.
  • عوّض على العميل أيضًا. استدعِ queryPurchasesAsync() في onResume() حتى تظل أي عملية شراء اكتملت أثناء إغلاق التطبيق مُعالَجة. هذه شبكة أمان، وليست المسار الأساسي.

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

شبكة مطابقة لتلك التي تفلت

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

لا يوجد لدى Apple ما يعادل ذلك، وهذا مهم

هذه مشكلة خاصة بـ Google Play تحديدًا. لدى StoreKit من Apple خطوة إنهاء أيضًا، إنهاء معاملة، لكنها تفعل الشيء المعاكس عند الفشل. إذا لم تُنهِ معاملة StoreKit قط، يبقيها Apple في قائمة الانتظار ويعيد تسليمها في كل مرة يُشغَّل فيها تطبيقك أو يُرفَق فيها المراقِب، فتحصل على فرصة أخرى لمنح الاستحقاق. لا يسترد Apple معاملة غير مكتملة. لا يوجد استرداد تلقائي خلال ثلاثة أيام على App Store.

لذا يجب أن يظل النموذج الذهني خاصًا بكل منصة. على Google Play، عملية الشراء غير المعالَجة هي استرداد بانتظار الحدوث وموعد نهائي تسابقه. على App Store، عملية الشراء غير المعالَجة هي إعادة تسليم بانتظار الحدوث ولا عدّاد إطلاقًا. نقل افتراض Apple إلى Android هو الطريقة التي ينتهي بها الفريق بجدار من عمليات الاسترداد غير المؤكَّدة التي لا يمكنهم تفسيرها.

لهذا يؤكّد RefundHalt عمليات شراء Google Play تلقائيًا لحظة وصول إشعار المتجر، ويطابقها مع Voided Purchases API حتى لا يظل استحقاق مُنِح لعملية شراء ألغاها Google لاحقًا فعّالًا. تكفّ قاعدة الأيام الثلاثة عن كونها سباقًا يمكن أن تخسره وتصبح خطوة حدثت بالفعل.

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

لماذا استُرد مبلغ عملية شرائي على Google Play تلقائيًا بعد ثلاثة أيام؟
لأن تطبيقك لم يؤكّدها في الوقت المناسب. يقوم Google Play تلقائيًا باسترداد المبلغ للمشتري وإلغاء أي عملية شراء لا تُؤكَّد خلال ثلاثة أيام من بلوغها حالة PURCHASED. ليس طلبًا من العميل ولا عقوبة من Google، إنه استدعاء تأكيد مفقود، والتأكيد من جهة الخادم انطلاقًا من إشعار المتجر يزيله.
ما الفرق بين تأكيد عملية شراء واستهلاكها؟
كلاهما يفي بمتطلب الأيام الثلاثة. تستهلك منتجًا قابلًا للاستهلاك، عبر purchases.products.consume أو consumeAsync()، وهو ما يجعل المنتج أيضًا متاحًا للشراء مجددًا. وتؤكّد منتجًا غير قابل للاستهلاك أو اشتراكًا، عبر purchases.products.acknowledge أو purchases.subscriptions.acknowledge أو acknowledgePurchase()، وهو ما يؤكّد الاستحقاق دون تحرير المنتج لإعادة الشراء.
هل أحتاج إلى تأكيد تجديدات اشتراك Google Play؟
لا. الشراء الأولي للاشتراك فقط هو ما يحتاج إلى تأكيد. لا يطلب Google تأكيد التجديدات ويضع عليها علامة ACKNOWLEDGEMENT_STATE_ACKNOWLEDGED تلقائيًا. تصل عملية الشراء الجديدة بحالة ACKNOWLEDGEMENT_STATE_PENDING وتظل مسؤوليتك حتى تنهيها.
هل يمكنني تأكيد عملية شراء وهي لا تزال في حالة PENDING؟
لا. يجب أن تؤكّد فقط عندما تكون حالة الشراء PURCHASED. عملية شراء في حالة PENDING، مثل دفعة نقدية أو طلب موافقة أحد الوالدين، لم تبدأ عدّاد الأيام الثلاثة بعد. امنح الاستحقاق وأكّد فقط بعد انتقال الحالة من PENDING إلى PURCHASED.
هل يسترد Apple عمليات الشراء التي لا أُنهيها؟
لا. يعيد StoreKit من Apple تسليم معاملة غير مكتملة في كل مرة يُشغَّل فيها تطبيقك حتى تُنهيها، لكنه لا يستردها تلقائيًا أبدًا. الاسترداد التلقائي خلال ثلاثة أيام لعمليات الشراء غير المؤكَّدة خاص بـ Google Play، لذا تحتاج المنصتان إلى معالجة مختلفة.
كيف أتعافى إذا استُرد مبلغ عملية شراء بالفعل بسبب عدم تأكيدها؟
لا يمكنك عكس الاسترداد، لكن يمكنك المطابقة. استعلِم من Voided Purchases API، الذي يسرد عمليات الشراء المستردة والملغاة من الأيام الثلاثين الماضية ويعلّم تلك التي أُلغيت لأنها لم تُؤكَّد قط، ثم ألغِ الاستحقاق الذي منحته. مستقبلًا، أكّد من إشعار المتجر حتى لا تفلت التالية.

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

RefundHalt

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

تابع القراءة

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

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