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

أهم الخلاصات
- كل عملية استرداد ترسلها Apple أو Google إلى خادمك تحمل رمز سبب استرداد، وهو الجزء الوحيد من الاسترداد الذي يمكنك قراءته بعد أن يكون المال قد تحرّك بالفعل. يخبرك لماذا حدث الاسترداد، وهو ما يخبرك بما يجب فعله بعد ذلك.
- تختم Voided Purchases API الخاصة بـ Google Play رقمين على كل عملية إبطال: voidedReason من 0 إلى 8 (أخرى، ندم، لم يُستلم، معيب، شراء عرضي، احتيال، احتيال ودّي، ردّ مبلغ، شراء غير مُقرّ به)، وvoidedSource قيمته 0 مستخدم، أو 1 مطوّر، أو 2 Google.
- تمنحك Apple إشارة أضيق لكنها حادّة. في معاملة مُستردّة تكون قيمة revocationReason هي 1 عندما يكون App Store قد ردّ المبلغ بسبب مشكلة فعلية أو متصوَّرة داخل تطبيقك، و0 عندما ردّه لسبب آخر مثل شراء عرضي.
- تنقسم الرموز إلى ثلاث أكوام. المعيب، ولم يُستلم، وغير المُقرّ به، ورمز المشكلة-داخل-التطبيق لدى Apple تشير كلها إلى منتجك، فتقوم بإصلاحها. الاحتيال والاحتيال الودّي وردّ المبلغ نزاعات تجادل فيها أو تمنعها. الندم والشراء العرضي لم يكن إيقافهما بيدك قط.
- voidedReason 8، الشراء غير المُقرّ به، هو استرداد فوترته على نفسك. تقوم Google تلقائيًا بردّ المبلغ وإلغاء أي عملية شراء لا يُقرّ بها تطبيقك خلال ثلاثة أيام، وهذا الرمز هو الطريقة التي تعثر بها على ذلك الخلل في تكاملك أنت.
- voidedReason 7، ردّ المبلغ، هو المكلف. بالنسبة إلى طلبات Google Play المقدَّمة في August 3, 2026 أو بعده، يكلّف ردّ المبلغ الخاسر المطوّرَ سعرَ الشراء ناقصًا رسوم خدمة Play زائدًا رسوم ردّ المبلغ التي يتقاضاها البنك، لذا فإن عدّ عمليات الإبطال المرمّزة بردّ المبلغ هو عدّ لتكلفة إضافية حقيقية.
- لا تنظر Voided Purchases API إلى الوراء سوى 30 days، وهي تُرشّح حسب وقت رؤية Google للإبطال، لا وقت حدوث الشراء، لذا فإن رمز سبب لا تلتقطه داخل تلك النافذة هو رمز سبب تفقده إلى الأبد.
عندما تردّ Apple أو Google المبلغ لأحد عملائك، يكون المال قد ذهب عادةً قبل أن يكون لك رأي. ما يصل خادمك بعد ذلك يبدو كإيصال، ومعظم الفرق تعامله على هذا الأساس. لكنه أكثر من ذلك. كل عملية استرداد تحمل رمز سبب استرداد، وهو الجزء الوحيد من الاسترداد الذي لا يزال بإمكانك قراءته بعد اتخاذ القرار. تخبرك Google Play أن الاسترداد كان ردّ مبلغ، أو طلب ندم، أو عملية شراء لم يُقرّ بها تطبيقك أنت قط. وتخبرك Apple ما إذا كان الاسترداد قد ألقى اللوم على شيء داخل تطبيقك. اقرأ ذلك الرمز فيكفّ الاسترداد عن كونه سطرًا في تقرير ويصبح تعليمة: أصلح هذا، أو جادل في هذا، أو دع هذا يمرّ. إليك ما يعنيه كل رمز، وكيف تصنّفها، وكم يكلّف كل واحد.
ما هو رمز سبب الاسترداد فعليًا
رمز سبب الاسترداد هو تسمية المتجر الخاصة لسبب عكس عملية شراء. أنت لا تحدّده ولا يمكنك مجادلته. يصل مرفقًا بالاسترداد بعد وقوعه، ويعرضه المتجران بأشكال مختلفة وبمدد إتاحة مختلفة جدًا.
تختم Google Play سببًا ومصدرًا على كل عملية إبطال
تُرجِع Voided Purchases API الخاصة بـ Google Play سجلًا واحدًا لكل عملية شراء معكوسة، ويحمل كل سجل عددين صحيحين مهمّين. يقول voidedReason لماذا أُبطلت عملية الشراء. ويقول voidedSource مَن أطلقها. معًا يحوّلان استردادًا مجرّدًا إلى جملة: أُبطل هذا الطلب بسبب ردّ مبلغ، بدأته Google، أو أُبطل بوصفه ندمًا، بدأه المستخدم. تقرؤهما بالاستقصاء الدوري لـ API أو بالاشتراك في إشعار المطوّر الفوري الذي يُطلَق حين يصل الإبطال. في كلتا الحالتين، الرقمان هما الحمولة الجديرة بالاحتفاظ.
تمنحك Apple إشارة أضيق، لكنها حادّة
لا تسلّمك Apple سببًا من تسعة اتجاهات. في معاملة مُستردّة، تضبط Apple قيمة revocationReason على إحدى قيمتين. القيمة 1 تعني أن App Store ردّ المبلغ للمعاملة بسبب مشكلة فعلية أو متصوَّرة داخل تطبيقك. والقيمة 0 تعني أنه ردّه لسبب آخر، مثل شراء عرضي. لا يظهر هذا الحقل إلا في المعاملات التي استُردّت أو أُلغيت، مع revocationDate، داخل معلومات المعاملة الموقَّعة لإشعار REFUND من App Store Server Notification. قيمتان ليستا كثيرًا، لكن القيمة المهمة، وهي 1، هي Apple تخبرك أن الاسترداد كان بشأن منتجك، لا بشأن تراجع العميل عن قراره.
الأسباب التسعة التي تمنحك إياها Google Play
voidedReason الخاص بـ Google هو الأغنى بين الاثنين، وكل قيمة جديرة بأن تعرفها بمجرد رؤيتها لأن كل واحدة تشير إلى مكان مختلف. إليك المجموعة الكاملة، مباشرةً من مورد VoidedPurchase، مع ما يخبرك كل رمز بفعله فعليًا.
| voidedReason | تسمية Google | ما الذي يخبرك به الرمز |
|---|---|---|
| 0 | أخرى | لم يُسجَّل سبب محدد. ضعه في سلة وراقب الحجم، لا الحالة المفردة. |
| 1 | ندم | غيّر العميل رأيه. لم يكن هناك أي خطأ في تطبيقك. |
| 2 | لم يُستلم | يقول العميل إنه لم يحصل قط على ما دفع مقابله. مشكلة تسليم يجب فحصها. |
| 3 | معيب | لم تعمل عملية الشراء. خلل في المنتج، وهو أكثر رمز قابل للتنفيذ في هذه القائمة. |
| 4 | شراء عرضي | نقرة خاطئة أو شراء غير مقصود. فكّر في خطوة تأكيد أوضح. |
| 5 | احتيال | وسمت Google المعاملة بأنها احتيالية. ليس عميلك، ولا إيرادًا كان لك أن تحتفظ به. |
| 6 | احتيال ودّي | نازع المشتري في مبلغ أجراه وتلقّاه. لا يزال بإمكان الأدلة أن تمسّ هذا النوع. |
| 7 | ردّ مبلغ | عكس البنك المبلغ. المسار الأكثر تكلفة، ومعه الآن رسم إضافي. |
| 8 | شراء غير مُقرّ به | لم يُقرّ تطبيقك بعملية الشراء قط، فردّت Google المبلغ تلقائيًا. خلل في شيفرتك. |
voidedSource يخبرك مَن ضغط الزناد
بجوار السبب يقع voidedSource، وهو يجيب عن سؤال مختلف: مَن عكس هذه العملية. القيمة 0 تعني أن المستخدم فعلها، عبر الخدمة الذاتية أو عبر بنك. والقيمة 1 تعني أن المطوّر فعلها، أي أنت أو أدواتك الخاصة تُصدر استردادًا. والقيمة 2 تعني أن Google فعلتها، بحكمها الخاص، بما في ذلك الردّ التلقائي لشراء غير مُقرّ به. حين ترى ارتفاعًا مفاجئًا في عمليات الإبطال، يكون المصدر هو التقسيم الأول. جدار من المصدر 2 هو Google تتصرّف على حسابك، وذلك عادةً إشارة تعود لتؤشّر إلى تكاملك أنت لا إلى عملائك.
صنّف كل استرداد إلى إصلاح أو مجادلة أو قبول
سبب فائدة الرمز أنه يخبرك أيّ استجابة من ثلاث يستحقها الاسترداد. تعامل معظم الفرق جميع عمليات الاسترداد بالطريقة نفسها، وتحرق جهدها في تلك التي لا يمكنها الفوز بها أبدًا. تنقسم الرموز بوضوح.
الإصلاح: عمليات الاسترداد التي سبّبها منتجك
بعض الرموز تقارير أخطاء ترتدي ثوب استرداد. المعيب (3) ولم يُستلم (2) على Google، وقيمة revocationReason هي 1 على Apple، كلها تقول الشيء نفسه: دفع العميل ولم يُسلّم تطبيقك. الشراء غير المُقرّ به (8) هو الأحدّ بينها لأن الذنب يقع كليًا في شيفرة الفوترة لديك. هذه أرخص عمليات الاسترداد للقضاء عليها، لأنك تقضي عليها بإصلاح شيء تملكه أنت، لا بإقناع أحد. عدد متصاعد في هذه الكومة هو عيب في المنتج مرفق برقم بالدولار.
المجادلة: عمليات الاسترداد التي يحرّكها أحدهم
الاحتيال (5) والاحتيال الودّي (6) وردّ المبلغ (7) هي النزاعات. الاحتيال المحض (5) ليس عميلك ولا إيرادًا كان لك أن تحتفظ به يومًا. الاحتيال الودّي (6)، حيث حصل المشتري على ما دفع مقابله بالضبط ثم نازع فيه، هو النزاع الوحيد الذي لا يزال بإمكان أدلتك تحريكه، وردّ المبلغ (7) هو حيث تُقدَّم تلك الأدلة. حين يصل أحدها تُلغي الوصول إن لم تكن قد فعلت، وحيثما تكون نافذة مراجعة مفتوحة تجيب عنها بما تعرفه عن الحساب.
القبول: عمليات الاسترداد التي لم يكن إيقافها بيدك قط
الندم (1) والشراء العرضي (4) هما تبدّل رأي العميل نفسه. وتقع قيمة revocationReason هي 0 لدى Apple هنا أيضًا. لم تفشل أي ميزة ولم يقع أي احتيال. يمكنك تلطيف كومة العرضي بتأكيد شراء أوضح، لكنك لا تستطيع مجادلة استرداد الندم بعيدًا، والوقت المُنفَق في المحاولة وقت مسلوب من كومة الإصلاح حيث يكون المال فعليًا.
| الفئة | رموز Google | إشارة Apple | خطوتك |
|---|---|---|---|
| إصلاح | 2 لم يُستلم، 3 معيب، 8 غير مُقرّ به | revocationReason 1 | جِد السبب الجذري للخلل في المنتج أو الفوترة وراءه |
| مجادلة | 5 احتيال، 6 احتيال ودّي، 7 ردّ مبلغ | (يظهر عبر REFUND، لا عبر السبب) | ألغِ الوصول، وأجب عن نافذة المراجعة بالأدلة |
| قبول | 1 ندم، 4 شراء عرضي | revocationReason 0 | سجّله، واضبط مسار الشراء، وامضِ قدمًا |

مطبّ الـ 30 days الذي يجعل رموز السبب سهلة الضياع
هناك حدّ صارم من جانب Google يحوّل هذا من ميزة إبلاغ إلى موعد نهائي. إن لم تكن تلتقط الرموز باستمرار، فأنت تفقدها.
لا تنظر Voided Purchases API إلى الوراء سوى 30 days
تصرّح Google بوضوح أن الـ API لا يمكنها إظهار سوى عمليات الشراء المُبطلة خلال الـ 30 days الماضية. لا تُرجَع عمليات الإبطال الأقدم مهما كانت قيمة startTime التي تمرّرها، وقيمة startTime نفسها لا يمكن ضبطها إلى أبكر من 30 days مضت. والأسوأ لتكامل ساذج، أن نافذة الـ 30 days تُقاس بوقت رؤية أنظمة Google لعملية شراء كمُبطلة، لا بوقت إجراء الشراء ولا حتى بقيمة voidedTimeMillis في السجل. لذا فإن رمز سبب استرداد لا تسحبه داخل تلك النافذة يضيع، ومهمة تصدير شهرية بها أي فجوة ستُسقط بصمت عمليات الإبطال التي كانت أبطأ من أن تلتقطها.
كم تساوي رموز السبب بالمال
يحمل رمزان سعرًا محددًا، وقراءتهما هي الطريقة التي تضع بها رقمًا على مشكلات تختبئ لولا ذلك داخل معدل استرداد إجمالي.
رمز واحد فاتورة كتبتها بنفسك
voidedReason 8، الشراء غير المُقرّ به، هو أنظف مثال على استرداد سبّبته أنت. تشترط Google Play أن يُقرّ تطبيقك بعملية الشراء خلال ثلاثة أيام من منح الاستحقاق، وإن لم تفعل، تردّ Google الطلب تلقائيًا وتلغي العنصر. كل عملية إبطال موسومة بـ 8 هي بيعة حقيقية، من عميل أراد المنتج، أُعيدت لأن استدعاءً للإقرار بالشراء لم يُطلَق قط. المبلغ المفقود هو سعر البيع كاملًا زائد ما أنفقته بالفعل من حوسبة واستدعاءات API وتخزين في تسليمه. هذا ليس استردادًا تفاوض عليه. إنه خلل تُغلقه، والرمز هو الطريقة التي تعثر بها عليه.
رمز ردّ المبلغ يحمل الآن رسمًا
voidedReason 7، ردّ المبلغ، تغيّرت تكلفته في August 3, 2026. بالنسبة إلى طلبات Google Play المقدَّمة في ذلك التاريخ أو بعده، يكلّف ردّ المبلغ الخاسر المطوّرَ سعرَ الشراء ناقصًا رسوم خدمة Play، زائدًا رسوم ردّ المبلغ التي يتقاضاها البنك، بينما تغطّي Google رسوم خدمتها هي فقط. ولأن رسوم ردّ المبلغ ثابتة وأسعار المنتجات ليست كذلك، فإن الرسم وحده على عملية شراء داخل التطبيق رخيصة قد يتجاوز ما دفعه العميل. عدّ عمليات الإبطال ذات الرمز 7 لديك أصبح الآن عدًّا لبند تكلفة، لا مجرد بيعة مفقودة، وهذا بالضبط سبب استحقاق كومة ردّ المبلغ صفًّا خاصًا بها في أي تقرير استرداد تبنيه.
| رمز السبب | ما الذي يكلّفك | لماذا يهمّ الرمز |
|---|---|---|
| 8 شراء غير مُقرّ به | سعر البيع كاملًا زائد تكلفة التسليم، في بيعة أرادها العميل | إنه ذاتي الإحداث، فالرمز إذًا متتبّع أخطاء |
| 7 ردّ مبلغ (طلب في August 3, 2026 أو بعده) | سعر البيع ناقصًا رسوم خدمة Play، زائدًا رسوم ردّ المبلغ التي يتقاضاها البنك | الرمز الوحيد الذي يضيف رسمًا فوق البيعة المفقودة |
| 3 معيب | سعر البيع زائد تكلفة التسليم، مكرَّرًا لكل عميل يصطدم بالخلل | الحجم في هذا الرمز يقيس عيبًا في المنتج بالدولار |
| 1 ندم | سعر البيع، وتكلفة التسليم التي أنفقتها بالفعل | تكلفة حقيقية، لكن ليست مما يستردّه تغيير في الشيفرة |
كيف تتوافق Apple وGoogle
يجيب المتجران عن السؤال نفسه بدقّتين مختلفتين، لذا يتعيّن على تقرير استرداد عابر للمتجرين أن يوحّدهما بدلًا من أن يتوقّع تطابقهما.
| السؤال | App Store | Google Play |
|---|---|---|
| أين يقيم الرمز | revocationReason في المعاملة الموقَّعة لإشعار REFUND | voidedReason في Voided Purchases API وإشعارها |
| كم عدد الأسباب | اثنان: 1 مشكلة في تطبيقك، 0 أخرى | تسعة، من 0 أخرى إلى 8 شراء غير مُقرّ به |
| مَن فعلها | غير مفصَّل | voidedSource: 0 مستخدم، 1 مطوّر، 2 Google |
| إلى أي مدى تستطيع القراءة رجوعًا | متاح على المعاملة متى استعلمت عنها | فقط الـ 30 days الماضية من عمليات الإبطال |
| أحدّ إشارة | القيمة 1 تعني أن الاسترداد بشأن منتجك | الرموز 3 و8 و7 يشير كل منها إلى تكلفة متمايزة قابلة للإصلاح |
لن يمنحك المتجران أبدًا الرمز نفسه لعملية الاسترداد نفسها، ولا بأس بذلك. المهم أن كليهما يسلّمك سببًا قابلًا للقراءة آليًا، وكلاهما يكافئ فريقًا يقرؤه. بت Apple الواحد يخبرك متى يكون الاسترداد خطأ منتجك. وأسباب Google التسعة وعلَم مصدرها تخبرك أيّ خلل في المنتج، وأيّ نزاع، وأيّ فجوة فوترة ذاتية الإحداث تنظر إليها. لا يوقف أيّ رمز عملية استرداد. كلاهما يخبرك بما تفعل كي لا تحدث التالية.
يلتقط RefundHalt رمز السبب في كل عملية استرداد لحظة وصولها، على كلا المتجرين، ويحتفظ به جيدًا داخل نافذة الـ 30 days الخاصة بـ Google كي لا يفلت شيء. يصنّف كل عملية إبطال إلى إصلاح أو مجادلة أو قبول، فيصلك ارتفاع مفاجئ في الرمز 3 معيب كتنبيه منتج، ويصلك ارتفاع مفاجئ في الرمز 8 غير مُقرّ به كخلل تكامل، لا كهبوط غامض في الإيرادات. يجيب عن CONSUMPTION_REQUEST من Apple خلال 12 ساعة وعن مراجعة ردّ المبلغ من Google Play خلال 24، ويلغي الوصول لحظة وصول استرداد أو ردّ مبلغ. لا يمكنك تغيير الرمز الذي يختمه متجر على عملية استرداد. يمكنك التأكد من أنك تقرأ كل واحد، وتتصرّف بناءً على تلك التي من شأنك فعلًا إصلاحها.
الأسئلة الشائعة
- ما هو رمز سبب الاسترداد على App Store وGoogle Play؟
- هو تسمية المتجر الخاصة لسبب عكس عملية شراء، تصل خادمك مع الاسترداد. تُرجِع Voided Purchases API الخاصة بـ Google Play قيمة voidedReason من 0 إلى 8 وقيمة voidedSource هي 0 مستخدم، أو 1 مطوّر، أو 2 Google. تضبط Apple قيمة revocationReason على 1 عندما يكون الاسترداد بسبب مشكلة داخل تطبيقك، أو 0 لسبب آخر مثل شراء عرضي. أنت لا تحدّد الرمز ولا يمكنك تغييره، لكن قراءته تخبرك ما إذا كان الاسترداد يشير إلى منتجك، أو إلى نزاع، أو إلى تبدّل رأي العميل.
- ما قيم voidedReason في Google Play؟
- هي تسع: 0 أخرى، 1 ندم، 2 لم يُستلم، 3 معيب، 4 شراء عرضي، 5 احتيال، 6 احتيال ودّي، 7 ردّ مبلغ، و8 شراء غير مُقرّ به. تُرجِع Voided Purchases API كل واحدة لكل عملية شراء مُبطلة مع voidedSource يقول مَن بدأ الإبطال. الرموز 2 و3 و8 تشير إلى مشكلات في تطبيقك أنت، والرموز 5 و6 و7 نزاعات، والرمزان 1 و4 قرار العميل نفسه.
- ماذا يعني أن تكون قيمة revocationReason لدى Apple هي 1؟
- تعني أن App Store ردّ المبلغ للمعاملة بسبب مشكلة فعلية أو متصوَّرة داخل تطبيقك، في مقابل القيمة 0 التي تعني أن الاسترداد حدث لسبب آخر مثل شراء عرضي. لا يظهر الحقل إلا في المعاملات المُستردّة أو المُلغاة، مع revocationDate، داخل معلومات المعاملة الموقَّعة لإشعار REFUND من App Store Server Notification. القيمة 1 هي Apple تخبرك أن الاسترداد كان بشأن منتجك.
- لماذا ردّت Google مبلغ عملية شراء برمز سبب غير مُقرّ به؟
- لأن تطبيقك لم يُقرّ بعملية الشراء في الوقت المناسب. تشترط Google Play أن تُقرّ بعملية شراء خلال ثلاثة أيام من منح الاستحقاق، وإن لم تفعل، تردّ Google الطلب تلقائيًا وتلغي العنصر، واسمةً الإبطال بقيمة voidedReason 8. إنه استرداد سبّبته بخلل في الفوترة، لا طلب من العميل، لذا فالإصلاح في شيفرة معالجة الشراء لديك لا في أي تفاوض.
- إلى أي مدى في الماضي يمكنني قراءة رموز سبب الاسترداد؟
- على Google Play، 30 days فقط. تُرجِع Voided Purchases API عمليات الإبطال خلال الـ 30 days الماضية وتتجاهل أي startTime أقدم من ذلك، وتقيس النافذة بوقت رؤية Google للإبطال، لا بوقت إجراء الشراء. رمز لا تلتقطه داخل الـ 30 days يضيع، لذا ينبغي أن تشترك في إشعار الشراء المُبطل الفوري أو تستقصي على جدول يقع جيدًا داخل النافذة. أما revocationReason لدى Apple فيبقى على المعاملة متى استعلمت عنها.
المصادر وقراءات إضافية
- Google Play Developer API: REST Resource purchases.voidedpurchases (voidedReason and voidedSource values)
- Google Play Developer API: Method purchases.voidedpurchases.list (30-day lookback window)
- Google Play: Voided Purchases API overview
- Apple Developer: revocationReason (App Store Server Notifications)
- Apple Developer: Transaction.RevocationReason (StoreKit)
- Apple Developer: Handling refund notifications (revocationDate and revocationReason on REFUND)
- Google Play Console Help: Updates to refund protection and chargeback cost responsibility (August 3, 2026)
- Google Play Billing: Integrate the Google Play Billing Library (acknowledge within three days or auto-refund)
RefundHalt
الطيار الآلي للاستردادات في App Store وGoogle Play
تابع القراءة
عمليات الشراء داخل التطبيق غير المصرح بها التي يجريها الأطفال تُرَدُّ أموالها إلى ولي الأمر في كل مرة تقريبًا، وأنت من يتحمل التكلفة
عندما يشتري طفل حزمة عملات على هاتف أحد الوالدين، يقوم كل من Apple وGoogle برد المبلغ ولا يسألك أي منهما أولًا. الجهات التنظيمية صممت الأمر بهذه الطريقة. إليك كيف تعمل عمليات رد الأموال هذه عن مشتريات داخل التطبيق غير المصرح بها في كل متجر، ونافذة الـ 15 دقيقة التي يذهب فيها المال، وكم تكلفك عملية واحدة فعليًا.
ضريبة استرداد التطبيق لم تكن ملكك قط، لذا يكلفك الاسترداد حصتك، لا الإجمالي المكتوب على الإيصال
استرد قيمة عملية شراء داخل التطبيق وسيُظهر الإيصال السعر مضافًا إليه الضريبة عائدين. الضريبة لم تكن مالك قط. تجمعها Apple وGoogle وتوردها بصفتهما تاجر السجل، ثم تعكسانها عند الاسترداد دون المساس بحصتك. إليك ما يكلفه الاسترداد فعلًا، والإعداد الوحيد الذي تصبح فيه الضريبة على عاتقك.