كل طلب استرداد من Apple يأتي الآن مع سبب، وconsumptionRequestReason هو الطريقة التي تقرأه بها
منذ WWDC24، يحمل كل CONSUMPTION_REQUEST من Apple حقل consumptionRequestReason، وهو السبب الذي ذكره العميل نفسه لرغبته في الاسترداد. هناك خمس قيم، من UNINTENDED_PURCHASE إلى LEGAL، وكل واحدة منها يجب أن تغيّر ما ترسله ردًا خلال نافذتك التي مدتها 12 ساعة. إليك كيف تقرأ كل واحدة منها.

أهم الخلاصات
- منذ الإصدار 2.11 من App Store Server Notifications، الذي أُعلن عنه في WWDC24، يتضمن كل إشعار CONSUMPTION_REQUEST حقل consumptionRequestReason، وهو سلسلة نصية تذكر سبب طلب العميل للاسترداد.
- هناك خمس قيم بالضبط: UNINTENDED_PURCHASE وFULFILLMENT_ISSUE وUNSATISFIED_WITH_PURCHASE وLEGAL وOTHER. ترسل Apple واحدة لكل طلب.
- السبب لا يقرر مصير الاسترداد. إنه سياق تستخدمه لاختيار refundPreference وبيانات الاستهلاك الخاصة بك قبل أن تُغلق نافذة الـ 12 ساعة.
- يُطلق CONSUMPTION_REQUEST الآن للاشتراكات ذاتية التجديد أيضًا، وليس فقط للسلع الاستهلاكية، لذا يصل consumptionRequestReason إلى عدد أكبر بكثير من عمليات الاسترداد لديك مما كان عليه قبل WWDC24.
- سبب FULFILLMENT_ISSUE هو إشارة إلى أن تسليمك أنت قد يكون فشل. الاعتراض عليه يحرق النافذة ويستدعي رد مبالغ لاحقًا. الموافقة عليه هي عادةً الإجابة الأرخص.
- ترد عبر استدعاء Send Consumption Information خلال 12 ساعة مع ضبط customerConsented على true وrefundPreference بقيمة GRANT_FULL أو GRANT_PRORATED أو DECLINE. تتعامل Apple مع تفضيلك كمُدخل واحد، وليس كأمر.
- لا يزال الاسترداد يكلفك الحوسبة واستدعاءات API والتخزين والمدفوعات التي استهلكها الشراء بالفعل. حقل السبب هو الطريقة التي تنفق بها دفاعك على القضايا التي تستحق الدفاع فقط.
غيّرت Apple كيفية وصول طلبات الاسترداد إلى خادمك، ولم يلاحظ الكثير من المطورين ذلك أبدًا. منذ تحديث App Store Server Notifications 2.11 الذي أُعلن عنه في WWDC24، يحمل كل إشعار CONSUMPTION_REQUEST حقلًا اسمه consumptionRequestReason. إنه السبب الذي ذكره العميل نفسه لطلب استرداد أمواله. سلسلة نصية بسيطة واحدة، وخمس قيم ممكنة، تُسلَّم داخل الحمولة نفسها التي لديك بالفعل اثنتا عشرة ساعة للرد عليها.
سبب طلب الاسترداد من Apple لا يقرر أي شيء بمفرده. ما يفعله هو أنه يخبرك بأي من خمس حالات مختلفة جدًا أنت فيها، حتى تتوقف عن إرسال بيانات الاستهلاك العامة نفسها إلى استرداد ينبغي أن توافق عليه واسترداد ينبغي أن تعترض عليه. إليك ما هو هذا الحقل، والقيم الدقيقة التي يمكن أن ترسلها Apple، وما تشير إليه كل واحدة، وكيف يجب أن تغيّر التفضيل والأدلة التي ترجعها.
ما هو consumptionRequestReason في الواقع
consumptionRequestReason هو حقل نصي في كائن data ضمن إشعار CONSUMPTION_REQUEST. أضافته Apple في الإصدار 2.11 من App Store Server Notifications، إلى جانب تغييرات WWDC24 على تدفق الاسترداد. قبل ذلك، كان الطلب يصل مع المعاملة الموقّعة ودون أي شيء عن الدافع. كنت ترد وأنت أعمى. الآن يسافر السبب الذي ذكره العميل مع الطلب.
اقرأ كلمة ذكره بعناية. هذا هو السبب الذي اختاره العميل عندما قدّم طلبه إلى Apple، وليس حقيقة تحققت منها Apple. لا يثبت UNINTENDED_PURCHASE أن الشراء لم يُستخدم، ولا يثبت UNSATISFIED_WITH_PURCHASE أن المنتج كان معطلًا. القيمة عدسة، وليست حكمًا. لا تزال تقرنها بسجلات التسليم والاستخدام الخاصة بك.
إنه يصل داخل الإشعار الذي تتعامل معه بالفعل
CONSUMPTION_REQUEST هو تدفق Apple الوحيد الذي يطلب الأدلة من المطور على الإطلاق. نظيره في Google Play هو مراجعة رد المبالغ عبر orders.reviewrefund. عندما يصل واحد، لديك 12 ساعة للرد باستدعاء Send Consumption Information، وهو طلب PUT إلى نقطة نهاية استهلاك المعاملات. أصبح consumptionRequestReason الآن جزءًا من الإشعار نفسه، لذا لا يوجد شيء جديد للاشتراك فيه. إذا كنت تحلل CONSUMPTION_REQUEST بالفعل، فإن السبب هو حقل واحد ربما كنت تتجاهله.
الأسباب الخمسة، وما يخبرك به كل واحد منها
توثّق Apple خمس قيم بالضبط. تصل واحدة لكل طلب. إليك المجموعة الكاملة وكيفية قراءة كل واحدة عمليًا.
| القيمة | ما ذكره العميل | ما تعنيه عادةً لك |
|---|---|---|
| UNINTENDED_PURCHASE | لم يقصد شراءه | غالبًا نقرة عرضية أو عائلية. تحقق من التسليم والاستهلاك قبل أن تقرر. |
| FULFILLMENT_ISSUE | لم يتمكن من استلامه أو استخدامه | يشير إلى تسليمك أنت. تحقق من سجلاتك قبل الاعتراض. |
| UNSATISFIED_WITH_PURCHASE | لم يكن راضيًا عنه | ندم المشتري. هنا تحمل أدلة الاستهلاك لديك أكبر وزن. |
| LEGAL | استشهد بسبب قانوني | تعامل معه على أنه موافقة. الاعتراض على طلب قانوني لا يستحق النافذة. |
| OTHER | أي سبب غير مدرج أعلاه | لا يحمل إشارة بمفرده. ارجع إلى بيانات التسليم والاستخدام لديك. |
UNINTENDED_PURCHASE هو سلة النقر العرضي
هذا هو السبب الذي يختاره أحد الوالدين بعد أن اشترى طفل 10,000 عملة، أو شخص بالغ ضغط عن طريق الخطأ على تأكيد. إنه يرتبط بعمليات الشراء التي لم تُفتح أو تُستخدم أبدًا. وهذا بالضبط سبب أهمية بياناتك الخاصة. إذا أظهرت سجلاتك أن السلعة الاستهلاكية سُلِّمت بالكامل واستُهلكت بكثافة، فإن ادعاء شراء غير مقصود ورصيدًا مُنفقًا بالكامل لا يتفقان، وتلك الفجوة تستحق الإبلاغ عنها عبر consumptionPercentage.
FULFILLMENT_ISSUE يشير إليك
FULFILLMENT_ISSUE هو السبب الوحيد الذي يتعلق جزئيًا بتطبيقك، وليس بالعميل. إنه يعني أنه يقول إنه لم يتمكن من استلام أو استخدام ما دفع مقابله. قبل أن تعترض بشكل انعكاسي، اسحب سجلات التسليم لديك. إذا أظهر خادمك أن الاستحقاق لم يُفعَّل أبدًا، أو أن الأرصدة لم تُسجَّل أبدًا، فالعميل على حق، وDECLINE هو التفضيل الخاطئ. محاربة فشل تنفيذ حقيقي تهدر النافذة ويمكن أن تدفع العميل إلى بنكه، حيث يكلف رد المبالغ أكثر مما كان سيكلفه الاسترداد.
UNSATISFIED_WITH_PURCHASE هو حيث تقرر الأدلة
هذا ندم مشترٍ عادي، وهو السبب الذي تؤدي فيه بيانات الاستهلاك لديك أكبر عمل. المنتج عمل. استخدم العميل جزءًا منه أو كله، والآن يريد استرجاع المال. consumptionPercentage مرتفع، وdeliveryStatus صادق بقيمة DELIVERED، وrefundPreference بقيمة DECLINE أو GRANT_PRORATED هي القضية التي تطلب منك Apple بناءها. أرسل الأرقام، لا حُجة.
LEGAL وOTHER
LEGAL يعني أن العميل استند إلى حق قانوني أو تنظيمي. قد يختلف العقلاء، لكن كقاعدة هذه ليست النافذة للتقاضي. وافق وامضِ. OTHER هو الخيار الشامل الذي تستخدمه Apple عندما لا يتطابق السبب المذكور مع أي من الأربعة أعلاه. إنه لا يحمل إشارة بمفرده، لذا تعامل مع OTHER تمامًا كما تتعامل مع طلب دون أي سبب على الإطلاق: ابدأ بحالة التسليم وأدلة الاستخدام لديك.

كيف يغيّر السبب إجابتك، حقلًا حقلًا
ترد على CONSUMPTION_REQUEST عبر استدعاء Send Consumption Information مع جسم ConsumptionRequest. يجب أن يشكّل السبب ثلاثة حقول في ذلك الجسم.
customerConsented يجب أن يكون true
لا تقبل Apple الإرسال إلا عندما يكون customerConsented بقيمة true، بمعنى أن العميل وافق على مشاركة بيانات الاستهلاك. إذا لم تكن لديك تلك الموافقة، فلا يمكنك إرسال أي بيانات على الإطلاق، بغض النظر عن السبب. لا موافقة، لا أدلة، ويُبت في الطلب دون أرقامك.
deliveryStatus وconsumptionPercentage يحملان الحقائق
deliveryStatus يقول ما إذا كنت قد سلّمت عملية شراء تعمل. إذا كان أي شيء غير DELIVERED، تتطلب Apple أن يكون consumptionPercentage بقيمة 0. عندما تكون قد سلّمت بالفعل، يكون consumptionPercentage عددًا صحيحًا بوحدة milliunits من 0 إلى 100,000، حيث يعني 100,000 أن العميل استخدم عملية الشراء بأكملها. هذا الزوج هو جوهرك الواقعي، وهو ما ينبغي أن يحمل قضية FULFILLMENT_ISSUE أو UNSATISFIED_WITH_PURCHASE، وليس السبب نفسه.
refundPreference هو رافعتك الوحيدة
refundPreference هو حيث تذكر ما تريد. توثّق Apple ثلاث قيم: GRANT_FULL وGRANT_PRORATED وDECLINE. اقرأ السبب، وزنه مقابل بياناتك، ثم اختر. FULFILLMENT_ISSUE مع تسليم فاشل في سجلاتك يميل نحو GRANT_FULL. UNSATISFIED_WITH_PURCHASE على منتج مُستهلك بالكامل يميل نحو DECLINE أو GRANT_PRORATED. LEGAL يميل نحو GRANT_FULL.
ما الذي يكلفك إياه الاسترداد فعليًا
حقل السبب مهم لأن الاسترداد نادرًا ما يكون مجرد خصم البيع من دفترك. بالنسبة لسلعة استهلاكية عملت بالفعل، دفعت لتنفيذها. حزمة أرصدة استدعت API استدلال مدفوعًا، ودفعة من الصور المولّدة أحرقت وقت GPU، وتصدير مخزَّن يقبع في فاتورة تخزينك، ومدفوعات لصانع محتوى أرسلتها بالفعل: تبقى هذه التكاليف مُنفقة عندما يُعكَس الشراء. المتجر يعيد أموال العميل. إنه لا يعيد حوسبتك.
لهذا السبب يستحق السبب القراءة. لنقل إن عميلًا اشترى 5,000 رصيد، كل منها يُطلق استدعاء API مدفوعًا، وأنفق 4,000 منها، ثم قدّم طلبه تحت UNSATISFIED_WITH_PURCHASE. deliveryStatus لديك بقيمة DELIVERED، وconsumptionPercentage لديك بقيمة 80,000 milliunits، وتفضيل DECLINE أو GRANT_PRORATED هو الفرق بين تحمّل فاتورة API واسترداد معظمها. الآن اقلب السبب إلى FULFILLMENT_ISSUE مع سجلات تُظهر أن الأرصدة لم تُسجَّل أبدًا، والخطوة الصادقة الأرخص هي GRANT_FULL قبل أن يصعّد العميل الأمر إلى بنكه.
قراءة السبب دون المبالغة في رد الفعل
الفخ هو التعامل مع السبب على أنه دليل. UNINTENDED_PURCHASE ليس اعترافًا بأن المنتج لم يُستخدم، وLEGAL ليس دائمًا ادعاءً قانونيًا حقيقيًا. السبب يضيّق الحالة. سجلات التسليم وسجلات الاستهلاك لديك تحسمها. عندما تتفق مع العميل، وافق مبكرًا وبتكلفة زهيدة. عندما تتناقض مع العميل، فإن ذلك التناقض، مُعبَّرًا عنه بـ deliveryStatus وconsumptionPercentage، هو أقوى شيء يمكنك إرساله. يقرأ RefundHalt حقل consumptionRequestReason في كل CONSUMPTION_REQUEST ويقرنه ببيانات الاستخدام الحقيقية لديك تلقائيًا، بحيث يحصل كل سبب على الرد الذي يستحقه داخل نافذة الـ 12 ساعة.
التغيير صغير ويسهل تفويته، لكنه حرّك محادثة الاسترداد لصالحك. Apple تخبرك الآن بالسبب، قبل أن ترد. استخدمه.
الأسئلة الشائعة
- ما هو consumptionRequestReason؟
- consumptionRequestReason هو حقل نصي تضمّنه Apple في كل إشعار CONSUMPTION_REQUEST، أُضيف في الإصدار 2.11 من App Store Server Notifications في WWDC24. إنه يذكر سبب العميل نفسه لطلب الاسترداد، ما يمنحك سياقًا قبل أن ترد ببيانات الاستهلاك داخل نافذة الـ 12 ساعة.
- ما هي القيم الممكنة لـ consumptionRequestReason؟
- هناك خمس قيم: UNINTENDED_PURCHASE وFULFILLMENT_ISSUE وUNSATISFIED_WITH_PURCHASE وLEGAL وOTHER. ترسل Apple واحدة بالضبط لكل طلب استرداد. كل واحدة تشير إلى حالة مختلفة، من نقرة عرضية إلى سبب قانوني مذكور، وكل واحدة يجب أن تشكّل refundPreference وبيانات الاستهلاك التي ترسلها ردًا.
- هل يقرر سبب الاسترداد ما إذا كنت سأحتفظ بالمال؟
- لا. consumptionRequestReason هو سياق، وليس حكمًا. لا تزال Apple تقرر الاسترداد، وازنةً refundPreference لديك، وdeliveryStatus وconsumptionPercentage لديك، وتاريخ العميل. السبب يخبرك بأي قضية تبنيها. وبيانات التسليم والاستخدام لديك هي ما يبنيها.
- كم من الوقت لديّ للرد على CONSUMPTION_REQUEST؟
- لديك 12 ساعة من استلام إشعار CONSUMPTION_REQUEST لاستدعاء Send Consumption Information. يجب أن يضبط الاستدعاء customerConsented على true، وإلا رفضته Apple. فوّت النافذة ويُبت في الاسترداد دون أي من بياناتك.
- هل يظهر consumptionRequestReason في عمليات استرداد الاشتراكات؟
- نعم. تحديث WWDC24 نفسه الذي أضاف consumptionRequestReason بدأ أيضًا في إرسال CONSUMPTION_REQUEST للاشتراكات ذاتية التجديد، وليس فقط للسلع الاستهلاكية. بالنسبة لمعظم التطبيقات، هذا يعني أن حقل السبب يصل الآن إلى عمليات الاسترداد الأكثر أهمية ماليًا.
المصادر وقراءات إضافية
RefundHalt
الطيار الآلي للاستردادات في App Store وGoogle Play
تابع القراءة
مراجعة ردّ المدفوعات في Google Play تمنحك 24 ساعة للدفاع، وإليك ما يجب إرساله
عندما يسحب البنك دفعة في Google Play، ترسل Google إلى خادمك إشعار PendingRefundReviewNotification وتبدأ عدّاداً مدته 24 ساعة. أجب عليه عبر واجهة ReviewRefund مع تفضيل للاسترداد ودليل استهلاك حقيقي، وإلا فسيُحسم النزاع من دونك. إليك المسار كاملاً، حقلاً حقلاً.
أرفِق appAccountToken بكل عملية شراء من App Store، وإلا فلن تستطيع الدفاع عن استرداد الأموال
تُرسل Apple إلى خادمك طلب CONSUMPTION_REQUEST عندما يطلب العميل استرداد أمواله، لكن المعاملة لا تذكر أبدًا هوية صاحبها. appAccountToken هو الـ UUID الذي يربط عملية الشراء بمستخدمك. اضبطه وستتمكن من الرد على Apple ببيانات حقيقية. تجاهله وستظل تخمّن.