Повернення коштів за доповнення до підписки Google Play можна робити по одному елементу, але клієнт може скасувати лише весь пакет
Google Play дозволяє базовій підписці мати до 49 доповнень в одному токені покупки. Пояснюємо, як працює повернення коштів за доповнення до підписки, який виклик API повертає кошти за один елемент, не зачіпаючи решту, де Google це блокує і скільки вам коштує кожен варіант повернення.

Головне
- Функція підписок із доповненнями в Google Play об'єднує в одній покупці базову підписку і до 49 доповнень, загалом 50 елементів, і всі елементи мають однаковий повторюваний період оплати.
- Користувачі Google Play не можуть скасувати окреме доповнення в Play Subscription Center. Вони можуть скасувати лише базову підписку разом з її доповненнями, тому видалення одного доповнення має відбуватися в застосунку розробника.
- Метод purchases.subscriptionsv2.revoke приймає itemBasedRefund з одним productId. Якщо інші елементи залишаються активними, Google відкликає лише цей елемент і повністю повертає за нього кошти, а підписка продовжує діяти.
- Google блокує повернення коштів за окремий елемент, коли підписка перебуває у стані відхиленого платежу, коли елемент прострочений або не належить користувачу, а також для передплачених підписок.
- proratedRefund для підписки з доповненнями повертає кошти за останнє замовлення кожного елемента пропорційно часу, що залишився до наступного поновлення, і одразу відкликає доступ до всіх елементів.
- Сповіщення для розробників у реальному часі щодо підписки з доповненнями не містять subscriptionId, тому бекенд має викликати purchases.subscriptionsv2.get і прочитати кожен lineItem, щоб побачити, які елементи ще доступні користувачу.
- Єдиний сценарій повернення в Google Play, де розробника просять надати докази, це чарджбек, позначений для перевірки через 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 у трьох випадках. Підписка перебуває в будь-якому стані відхиленого платежу, зокрема в пільговому періоді чи на утриманні акаунта. Вказаний елемент не належить користувачу або вже закінчився. Або покупка є передплаченою підпискою, де відмова від окремого елемента взагалі не підтримується.
Що робить повернення за ID замовлення
Посібник 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 обирає найкоротший пільговий період серед активних елементів і застосовує його до всього поновлення. Під час пільгового періоду користувач зберігає всі елементи. На утриманні акаунта доступ до всіх елементів призупиняється. Якщо платіж так і не відновиться, елементи з відхиленою оплатою закінчуються, а інші відновлюються до кінця своїх платіжних періодів.

Скільки вам коштує кожен варіант повернення
Доповнення зазвичай пов'язані з чимось, за що платите ви. Додаткове хмарне сховище оплачується вашому постачальнику сховища. Пакет AI-кредитів оплачується викликами API моделі. Додаткове місце означає більше обчислень, а тариф для авторів може передбачати виплату. Усі ці витрати виникають, коли користувач користується доповненням, а повернення коштів повертає ціну, але не жодну з цих витрат.
Повернення завеликої суми
Дорога помилка: використати fullRefund або proratedRefund, коли скарга стосується одного доповнення. Обидва відкликають усі елементи, тож ви повертаєте ще й ціну базової підписки і втрачаєте підписника, який хотів залишитися. itemBasedRefund повертає лише останній платіж за це доповнення. Коли він заблокований, orders.refund для останнього замовлення цього елемента повертає гроші, нічого не припиняючи.
Часткові повернення і комісії
Play Console дозволяє робити часткові повернення за замовленнями підписок, і Google каже, що відсоток повернення застосовується також до вашої виплати і сервісного збору. Поверніть половину замовлення, і разом із нею повернеться половина збору Google. Ваші власні витрати на обслуговування цього доповнення не повернуться.
Чарджбеки за пакет
Для замовлень, оформлених після 3 серпня 2026 року, Google перекладає витрати на чарджбеки на розробників. Коли чарджбек задоволено, ви сплачуєте ціну покупки за вирахуванням сервісного збору Play, плюс комісії, які стягує банк. Замовлення пакета з кількома доповненнями означає більшу суму, яку можна втратити. Журнали використання кожного доповнення, прив'язані до обфускованого ID акаунта, і є тим, що ви надішлете під час перевірки за 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, щоб побачити, що змінилося.
Джерела та додаткове читання
- Google Play Billing: Subscription with add-ons
- Google Play Help: Subscriptions with add-ons
- Google Play Developer API: purchases.subscriptionsv2.revoke
- Google Play Developer API: orders.refund
- Google Play Billing: Manage subscriptions and one-time purchases
- Play Console Help: Issue refunds and cancel orders
- Google Play Billing: Real-time developer notifications reference
- Google Play Billing: Subscription lifecycle
- Google Play Help: Request a refund on Google Play
- Google Play Developer API: orders.reviewrefund
- Play Console Help: Updates to refund protection and chargeback cost responsibility
RefundHalt
Автопілот повернень для App Store і Google Play
Читайте далі
Надмірні запити на повернення коштують дорожче за самі повернення: обидва магазини застосунків вважають їх сигналом якості
Правило 5.6.4 Apple прямо називає надмірні запити на повернення ознакою того, що застосунок не відповідає стандартам якості, а угода Google про розповсюдження дозволяє видаляти застосунки нових розробників через частку повернень. Розбираємо, що пише кожен магазин, скільки коштує видалення і як не потрапити під удар.
Перевіряйте серверні сповіщення App Store, перш ніж діяти щодо повернення коштів, бо надіслати запит на ваш webhook URL може будь-хто
Сповіщення про повернення коштів залишається звичайним HTTPS-запитом, доки ви не перевірите його підпис. Пояснюємо, як перевіряти серверні сповіщення App Store і повідомлення Google Play RTDN, що саме підписує кожен магазин і скільки коштує підроблене або помилково відхилене повернення.