Все статьи
Подробный разбор8 мин чтения

Возвраты за предоплаченные планы в Google Play подчиняются иным правилам, чем подписки, и одно пропущенное подтверждение пополнения может отозвать весь план

Предоплаченные планы никогда не продлеваются автоматически, поэтому клиенты не могут их отменить, они их пополняют. Разбираем, как принимаются решения о возвратах за предоплаченные планы в Google Play, во что обходится неподтверждённое пополнение и какой вызов API что возвращает.

Молодой человек в сумерках у киоска пополнения счёта на оживлённой улице с Android-телефоном в руке, тот самый тип клиента, который покупает предоплаченные планы в Google Play и иногда просит за них возврат

Главное

  • Предоплаченные планы Google Play дают доступ на фиксированный расчётный период и никогда не продлеваются сами. Клиенты продлевают их, покупая пополнение. По словам Google, предоплаченные планы нельзя отменить, потому что они просто действуют до даты окончания.
  • Каждое пополнение предоплаченного плана в Google Play это новая покупка с новым токеном покупки, а предыдущий токен приходит в поле linkedPurchaseToken. Google отправляет уведомление SUBSCRIPTION_PURCHASED на каждое пополнение.
  • Google Play требует, чтобы разработчики подтверждали каждую предоплаченную покупку и каждое пополнение. Планам сроком от недели даётся 3 дня, планам короче недели половина их срока, так что у трёхдневного плана есть 1,5 дня.
  • Если разработчик пропускает срок подтверждения пополнения предоплаченного плана в Google Play, Google отзывает пополнение, отзывает и отменяет оставшуюся часть подписки и возвращает пользователю деньги.
  • Справочный центр Google Play сообщает клиентам, что за неиспользованный предоплаченный план можно получить возврат, а запросы на возврат, поданные позже чем через 48 часов после покупки, уходят разработчику.
  • Google описывает опцию fullRefund метода purchases.subscriptionsv2.revoke как возврат последнего списания по каждому товару. Значит, на пополненном предоплаченном плане она затрагивает самое последнее списание, а не все пополнения, которые клиент когда-либо покупал.
  • Для заказов в Google Play, оформленных после 3 августа 2026 г., проигранный чарджбэк обходится разработчику в цену покупки за вычетом сервисного сбора Play плюс комиссии банка за чарджбэк, и это касается пополнений предоплаченных планов так же, как любых других заказов.

Пропустите подтверждение одного-единственного пополнения в Google Play, и Google вернёт деньги не только за него. Google отзовёт пополнение, отзовёт и отменит остаток предоплаченного плана клиента и оформит возврат. Это самая острая грань возвратов за предоплаченные планы в Google Play, и она целиком под вашим контролем. В остальном картина возвратов для предоплаченных планов близка к обычным подпискам, но с несколькими отличиями, которые влияют на то, как вы строите систему и что теряете.

Чем предоплаченные планы Google Play отличаются от автопродлеваемых подписок

Предоплаченный план это базовый план, который продаёт доступ на заданный расчётный период и затем заканчивается. Справка Play Console говорит, что пользователи покупают его, чтобы получить доступ на этот период, а затем пополняют, чтобы сдвинуть дату окончания, если хотят продолжать. Пополнением может быть любой предоплаченный базовый план той же подписки, в том числе другой длительности. В собственном примере Google план продлевается на год пополнением за $59.99.

Раз ничего не продлевается, ничего нельзя и отменить. Документация Google по биллингу говорит, что предоплаченные планы отменить нельзя, а пользователь, который хочет уйти, просто дожидается даты окончания плана. Состояние подписки у предоплаченного плана бывает только ACTIVE, PENDING или CANCELED, а expiryTime присутствует всегда.

Предоплаченные планы важнее всего там, где регулярные списания ограничены. Руководство RevenueCat указывает на Индию, где Google приостановил оформление автопродлеваемых планов для новых клиентов из-за правил Reserve Bank of India, и называет предоплаченные планы очевидным решением для подобных рынков.

Автопродлеваемый базовый планПредоплаченный базовый план
Продлевается самДаНет, пользователь покупает пополнение
Может ли пользователь отменитьДаНет, действует до expiryTime
Бесплатные пробные периоды и предложенияДаНет, предложения только для автопродлеваемых базовых планов
Новый токен покупкиПри повышении, понижении плана или повторной подпискеПри каждом пополнении
ПодтверждениеВ течение 3 дней после каждой новой покупки3 дня для планов от недели, половина срока для более коротких
Можно приостановитьДаНет

Каждое пополнение это отдельная покупка

Google выдаёт новый токен покупки на каждое пополнение и записывает предыдущий токен в linkedPurchaseToken новой покупки. Также Google отправляет на каждое пополнение уведомление для разработчиков в реальном времени SUBSCRIPTION_PURCHASED. Пополнения суммируются. Если пользователь пополняет план заранее, новое время прибавляется к старой дате окончания, а не к сегодняшнему дню. У пользователя может быть только одно неиспользованное пополнение за раз, а prepaidPlan.allowExtendAfterTime подсказывает, когда станет доступно следующее.

Возвраты за предоплаченные планы начинаются со срока подтверждения

Вы обязаны подтверждать каждую предоплаченную покупку, включая каждое пополнение, потому что пользователь каждый раз проходит процесс покупки. Google даёт планам сроком от недели 3 дня. Планы короче недели получают половину своего срока, так что трёхдневный план нужно подтвердить за 1,5 дня, а однодневный за 12 часов.

Поэтому короткие предоплаченные планы рискованнее, чем кажутся. Еженедельный или ежемесячный автопродлеваемый план каждый раз даёт вам те же 3 дня. Однодневный предоплаченный пропуск даёт 12 часов, и сбой бэкенда дольше этого превращает платящих клиентов в автоматические возвраты. Руководство RevenueCat говорит о том же и предупреждает, что второй заказ нужно подтверждать быстро, если базовый план длится всего 1 или 3 дня.

Кто решает вопрос о возврате за предоплаченный план

Большинство решений о возвратах за предоплаченные планы в Google Play принимаются без вас. Политика возвратов Google говорит, что пользователь может получить возврат в течение 48 часов после покупки в приложении, в том числе подписки, в зависимости от обстоятельств. Через 48 часов пользователю советуют обратиться к разработчику, который может обрабатывать возвраты по своей политике и применимому законодательству. Справочная страница Google о подписках добавляет одну строку специально для предоплаченных планов: если план ещё не использовался, пользователь может запросить за него возврат.

Путь возвратаКто решаетМожете ли вы ответитьСрок
Запрос в течение 48 часов после покупки или пополненияGoogleНетНет
Запрос после 48 часовВы, по своей политике и местному законодательствуНеприменимоGoogle не устанавливает
Неподтверждённая покупка или пополнениеАвтоматическиНет3 дня или половина срока плана, если он короче недели
Чарджбэк, отмеченный для проверки разработчикомGoogle, затем банкДа, через orders.reviewrefund24 часа
Чарджбэк без проверки разработчикомБанкНетНет

Предоплаченные планы не меняют правил чарджбэков. Когда Google запрашивает вашу позицию по спору, у вас есть 24 часа, чтобы ответить через orders.reviewrefund, а после решения банка оно окончательно.

Какой вызов API что возвращает на предоплаченном плане

Когда запрос доходит до вас, у вас есть два серверных инструмента, и возвращают они не одно и то же.

orders.refund работает с одним заказом за раз

orders.refund возвращает деньги за подписку или покупку в приложении по идентификатору заказа. Установите revoke в true, и доступ прекратится сразу. Google не возвращает деньги за заказы старше 3 лет. Поскольку каждое пополнение это отдельная покупка, возврат по заказу, стоящему за конкретным пополнением, это точный способ вернуть деньги только за это пополнение.

purchases.subscriptionsv2.revoke работает с подпиской

purchases.subscriptionsv2.revoke завершает подписку и принимает revocationContext. Google описывает fullRefund как возврат полной суммы последнего списания по каждому товару, а proratedRefund как возврат пропорциональной суммы исходя из оставшегося времени. На плане, пополненном дважды, последнее списание это последнее пополнение. Учтите это, прежде чем обещать клиенту вернуть весь остаток.

Не отнимайте доступ, который клиенту ещё положен

Документация Google по биллингу предупреждает, что лишение доступа к подписке, пока пользователь ещё имеет на неё право, нарушает правила Google Play в отношении подписок. На предоплаченном плане это право и есть оплаченное время. Если вы возвращаете только последнее пополнение, оставьте ранее оплаченное время в силе, если только не отзываете и не возвращаете и его.

Рабочий стол разработчика с ноутбуком, на котором видны даты окончания подписок, и Android-телефоном рядом, те самые данные, от которых зависят возвраты за предоплаченные планы в Google Play

Во что вам обходится возврат за предоплаченный план

Клиент с предоплаченным планом заплатил вперёд за фиксированный срок, а вы начали тратиться на него с момента, когда он получил доступ. Возврат отправляет ему деньги обратно, а ваши траты остаются.

  • Вычисления: каждая сессия, синхронизация или серверная задача, которую клиент запустил за оплаченный период, это мощности, за которые вы уже заплатили.
  • Вызовы API: распознавание речи, перевод, карты, инференс моделей или любой сторонний сервис с оплатой за запрос остаются оплаченными.
  • Хранилище: файлы и история, созданные клиентом, продолжают висеть в вашем счёте за хранение, пока вы их не удалите.
  • Выплаты: доли выручки, выплаты авторам и реферальные комиссии, привязанные к покупке, уже ушли с вашего счёта.

Пропущенное подтверждение это дорогой случай. Запоздалое подтверждение годового пополнения за $59.99 отменяет не только $59.99. Google также отзывает оставшуюся часть плана, так что клиент теряет доступ, за который уже заплатил, и получает возврат, а все расходы, которые вы понесли, обслуживая его, остаются потраченными.

Чек-лист для реализации предоплаченных планов

  • Подтверждайте каждое пополнение со своего сервера, а не только первую покупку, и настройте оповещение на любую покупку, которая остаётся неподтверждённой через несколько часов.
  • Заведите для коротких планов отдельный сигнал тревоги. У однодневного плана 12 часов, у трёхдневного 1,5 дня.
  • Храните каждый идентификатор заказа и токен покупки и отслеживайте linkedPurchaseToken, чтобы видеть всю цепочку пополнений за одним клиентом.
  • Работайте с токенами покупки заранее. По словам Google, токен действителен только до 60 дней после окончания срока, после чего Developer API его не принимает.
  • Возвращайте одно пополнение через orders.refund по заказу этого пополнения и не рассчитывайте, что fullRefund покроет более ранние пополнения.
  • Записывайте использование по каждой покупке, чтобы проверка чарджбэка получила реальный ответ в своё 24-часовое окно.
  • Отзывайте доступ сразу, как получите SUBSCRIPTION_REVOKED, поскольку план при этом переходит в состояние истёкшего.

Частые вопросы

Может ли клиент отменить предоплаченный план в Google Play?
Нет. По словам Google, предоплаченные планы нельзя отменить, потому что они не продлеваются автоматически. План действует до даты окончания, и до этого момента клиент сохраняет доступ. Чтобы перестать платить, он просто не покупает следующее пополнение.
Может ли клиент получить возврат за предоплаченный план в Google Play?
Да. Справочный центр Google говорит, что за неиспользованный предоплаченный план можно получить возврат, а Google может вернуть деньги за любую покупку в приложении, включая подписки, если запрос поступил в течение 48 часов. После 48 часов Google направляет клиента к разработчику, который оформляет возврат по своей политике и местному законодательству.
Что будет, если я не подтвержу пополнение предоплаченного плана?
Google отзовёт пополнение, отзовёт и отменит оставшуюся часть подписки и вернёт пользователю деньги. Планы сроком от недели нужно подтвердить в течение 3 дней, более короткие в течение половины их срока, так что у трёхдневного плана есть 1,5 дня.
Возвращает ли fullRefund на предоплаченном плане все пополнения?
Нет, если верить описанию Google. Опция fullRefund метода purchases.subscriptionsv2.revoke возвращает полную сумму последнего списания по каждому товару. Каждое пополнение это отдельная покупка с собственным заказом, поэтому, чтобы вернуть деньги за конкретное пополнение, используйте orders.refund для конкретного заказа.
Поддерживают ли предоплаченные планы бесплатные пробные периоды?
Нет. Справка Play Console говорит, что предложения, к которым относятся бесплатные пробные периоды и вводные цены, можно создавать только для автопродлеваемых базовых планов. Предоплаченный план оплачивается полностью при покупке и при каждом пополнении.

Источники и дополнительное чтение

RefundHalt

Автопилот возвратов для App Store и Google Play

Читайте дальше

Руководство8 мин чтения

Чрезмерные запросы на возврат обходятся дороже самих возвратов: оба магазина приложений считают их сигналом качества

Правило 5.6.4 Apple прямо называет чрезмерные запросы на возврат признаком того, что приложение не соответствует стандартам качества, а соглашение Google о распространении позволяет удалять приложения новых разработчиков по доле возвратов. Разбираем, что пишет каждый магазин, во что обходится удаление и как не попасть под удар.

Подробный разбор8 мин чтения

Проверяйте серверные уведомления App Store, прежде чем реагировать на возврат, ведь отправить запрос на ваш URL вебхука может кто угодно

Уведомление о возврате остается обычным HTTPS-запросом, пока вы не проверили его подпись. Рассказываем, как проверять серверные уведомления App Store и сообщения RTDN из Google Play, что подписывает каждый магазин и во что обходится поддельный или ошибочно отклоненный возврат.

Следующий запрос на возврат уже в пути.

Настройте RefundHalt за то время, что уходит на чтение очередного письма в поддержку о возврате, который вы не успели оспорить.