Все статьи
Глубокий разбор8 мин чтения

Разбор возвратного платежа в Google Play дает вам 24 часа на защиту, вот что нужно отправить

Когда банк отзывает платеж в Google Play, Google отправляет на ваш сервер PendingRefundReviewNotification и запускает 24-часовой отсчет. Ответьте через API ReviewRefund с предпочтением по возврату и реальными доказательствами потребления, или спор решится без вас. Вот весь процесс, поле за полем.

Смартфон с экраном спора о платеже рядом с банковской картой и маленькими песочными часами на темном столе, иллюстрирующий 24-часовой отсчет разбора возвратного платежа в Google Play

Главное

  • Разбор возвратного платежа в Google Play начинается, когда банк клиента отзывает платеж и Google Play отправляет на ваш сервер PendingRefundReviewNotification. У вас есть 24 часа с момента этого уведомления, чтобы ответить через API ReviewRefund.
  • Разбор возвратного платежа, это единственный процесс возврата в Android, который запрашивает у разработчика доказательства. 48-часовой самостоятельный возврат, возвраты через поддержку и аннулированные покупки решаются без вас.
  • Вы отвечаете, вызывая orders.reviewrefund с refundPreference, равным APPROVE, DECLINE или NEUTRAL, плюс доказательства: значение consumptionPercentageMilliunits и необязательный список событий потребления.
  • Google Play фиксирует только ваш первый вызов ReviewRefund для данного уведомления. Каждый последующий вызов игнорируется и все равно возвращает OK, поэтому ваш первый ответ должен быть полным и правильным.
  • Уведомление несет pendingRefundToken и orderId, и единственная причина возврата, которую поддерживает ожидающий разбор, это CHARGEBACK, приходящий как code 7.
  • consumptionPercentageMilliunits измеряется в миллиединицах, поэтому 100000 означает, что клиент использовал 100 percent купленного. Так вы сообщаете Google Play, что продукт был полностью доставлен.
  • С August 3 2026 разработчики берут на себя цену покупки за вычетом сервисного сбора Play плюс банковский сбор за возвратный платеж по каждому проигранному спору, поэтому неотвеченный разбор возвратного платежа, это прямой вычет из вашей собственной выручки.

Когда банк клиента отзывает платеж в Google Play, Google Play не просто возвращает деньги и идет дальше. Он отправляет на ваш сервер PendingRefundReviewNotification и запускает 24-часовой отсчет. Ответьте на это уведомление через API ReviewRefund с предпочтением по возврату и доказательствами того, что клиент действительно использовал, и Google Play учтет ваш вклад в том, как оспаривает возвратный платеж. Промолчите, и спор решится без единого слова от той стороны, которая знает, как был потреблен продукт.

Разбор возвратного платежа в Google Play, это единственный процесс возврата в Android, который запрашивает у вас доказательства, прямой аналог CONSUMPTION_REQUEST от Apple. Сейчас это важнее, чем раньше. Начиная с August 3 2026 Google Play перекладывает стоимость возвратных платежей на разработчиков, поэтому спор, на который вы не ответили, вычитается из вашего счета, а не из счета Google. Вот что именно несет уведомление, что вы отправляете в ответ, поля, из которых складываются ваши доказательства, и где молчание превращается в деньги.

Что на самом деле представляет собой разбор возвратного платежа в Google Play

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

Это единственное место в системе возвратов Android, где ваши доказательства меняют исход. Любой другой путь возврата в Google Play проходит без вас. Клиент может самостоятельно оформить возврат в течение 48 hours после покупки, поддержка может его предоставить, а неподтвержденная покупка автоматически возвращается, и все это решает Google. Разбор возвратного платежа, это исключение, и к нему стоит относиться как к единственному разговору о возврате, к которому вы действительно можете присоединиться.

Это Android-версия окна доказательств Apple

Два магазина, два процесса, которые запрашивают у разработчика доказательства, и это весь список. Apple отправляет CONSUMPTION_REQUEST и дает вам 12 hours на ответ через Send Consumption Information. Google Play отправляет PendingRefundReviewNotification и дает вам 24 hours на ответ через orders.reviewrefund. Механика различается, но урок один: когда магазин спрашивает, что использовал клиент, точный ответ, это разница между сохранением продажи и ее возвратом.

Одно различие важно на практике. Полезная нагрузка о потреблении у Apple, это пять числовых полей и больше ничего. Доказательства Google Play богаче. Вы можете отправить процент потребления плюс список отдельных событий использования, каждое с меткой времени, идентификатором аккаунта и даже IP-адресом и приблизительным location. Google Play дает вам больше пространства, чтобы описать доставку, а значит, больше пространства, чтобы быть убедительным.

24-часовой отсчет и как уведомление доходит до вас

Разбор приходит как Real Time Developer Notification в вашу тему Cloud Pub/Sub, тот же канал, который доставляет ваши события подписок и покупок. Сообщение, это полезная нагрузка в кодировке base64 с объектом pendingRefundReviewNotification внутри. Отсчет начинается, когда это уведомление публикуется, а не когда вы его прочли, поэтому потребитель, который опрашивает раз в день, это потребитель, который упускает споры.

PendingRefundReviewNotification, поле за полем

Уведомление небольшое. Оно сообщает вам, какой заказ на разборе, передает вам токен, который вы должны процитировать в ответ, и называет причину. Вот каждое поле, которое оно несет.

ПолеТипЧто оно означает
versionstringВерсия уведомления, начинается с "1.0"
pendingRefundTokenstringТокен, идентифицирующий этот разбор. Вы передаете его обратно в вызове ReviewRefund
orderIdstringЗаказ на разборе, например GPA.1234-5678-9012-34567
refundReasonintПочему запрошен возврат. Ожидающий разбор всегда несет только CHARGEBACK, code 7
obfuscatedAccountIdstringИдентификатор аккаунта, который вы задали в момент покупки, если задавали
obfuscatedProfileIdstringИдентификатор профиля, который вы задали в момент покупки, если задавали

Только возвратный платеж открывает ожидающий разбор

refundReason в ожидающем разборе всегда CHARGEBACK, доставляемый как целое число 7. Другие причины возврата существуют в мире Google Play, но они не доходят до вас через этот процесс, потому что в них вы не участвуете. Если вы видите PendingRefundReviewNotification, значит банк отозвал платеж, и Google Play решает, оспаривать ли его. Это единственный триггер.

Что вы отправляете обратно через API ReviewRefund

Вы отвечаете одним запросом POST на orders.reviewrefund. Полный путь, это POST https://androidpublisher.googleapis.com/androidpublisher/v3/applications/{packageName}/orders/{orderId}:reviewrefund, авторизованный областью https://www.googleapis.com/auth/androidpublisher, той же областью OAuth, которую уже использует ваша интеграция с Play Developer API. Успех возвращает пустое тело с HTTP 200.

Тело, это место, где живет ваше дело. Вы возвращаете pendingRefundToken из уведомления, указываете предпочтение по возврату и прикладываете доказательства потребления.

Ваше предпочтение по возврату, это рекомендация, а не приговор

Поле refundPreference принимает одно из трех значений, и это совет для Google Play, а не окончательное решение. Google по-прежнему владеет исходом. Но это совет, подкрепленный данными, которые Google не видит сам по себе, поэтому он имеет вес.

refundPreferenceЗначение
APPROVEВы предпочитаете, чтобы Google Play предоставил полный возврат
DECLINEВы предпочитаете, чтобы Google Play отклонил возврат
NEUTRALУ вас нет предпочтения, и вы полагаетесь на Google Play
REFUND_PREFERENCE_UNSPECIFIEDЗначение по умолчанию, не используется в реальном ответе

Поля доказательств, которые подкрепляют DECLINE

Голый DECLINE, это утверждение без доказательства. Поля потребления, это доказательство. consumptionPercentageMilliunits, это целое число в миллиединицах, поэтому 100000 говорит, что клиент потребил 100 percent купленного, а 50000 говорит про половину. consumptionUsageEvents, это необязательный массив, где каждое событие может нести obfuscatedAccountId, obfuscatedProfileId, consumptionTime, ipAddress, consumptionItemDescription и приблизительный location. sampleContentProvided, это булево значение для случая, когда вы дали клиенту бесплатный образец платного контента. Вместе они говорят на собственной схеме Google Play, что продукт был доставлен и использован.

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

Ваш первый вызов, это ваш единственный вызов

Google Play фиксирует первый вызов ReviewRefund, который вы делаете по уведомлению, и игнорирует каждый вызов после него, все равно возвращая статус OK. Нет ни черновика, ни правки. Если ваш первый ответ, это поспешный NEUTRAL без доказательств, потому что ваш конвейер был не готов, значит именно этот ответ попадет в запись, а поздний вызов с полной историей потребления молча отбрасывается. Соберите полный ответ, прежде чем что-либо отправлять.

Сколько разбор стоит вам в деньгах

Годами проигранный возвратный платеж в Google Play стоил разработчику продажи и немногого сверх того, потому что Google Play брал на себя последующие сборы. Это заканчивается August 3 2026. Для заказов, размещенных после этой даты, Google Play делит стоимость возвратного платежа с разработчиками, и доля разработчика, это цена покупки за вычетом сервисного сбора Play плюс связанный сбор за возвратный платеж, взимаемый финансовым учреждением. Google Play продолжает покрывать часть сервисного сбора. Банковский сбор, это новый груз на вашей стороне баланса.

Возврат никогда не равен реальной сумме

Спор возвращает платеж клиента, но платеж никогда не был вашей единственной затратой. Сгенерированное видео, пакет вызовов API модели, выплата автору, выделенное вами хранилище, все эти деньги покинули ваш счет в тот момент, когда заказ был доставлен, и ничего из этого не возвращается вместе с возвратным платежом. Теперь добавьте сверху банковский сбор за возвратный платеж. Вы оплачиваете счет провайдера, возвращаете продажу и покрываете сбор за спор, три затраты на один заказ, который у вас были доказательства защитить.

Масштаб, с которым борется Google

Google Play заявляет, что заблокировал US$3.4B мошенничества и злоупотреблений в 2025 году и добавляет обнаружение мошенничества на протяжении 2026 года. Изменение в распределении затрат, это часть того же курса: дать разработчикам повод передавать доказательства в систему, и система оспаривает больше нелегитимных споров. API ReviewRefund, это то, как ваши доказательства попадают внутрь. Пустой ответ, это голос за то, чтобы дружественно-мошеннический возвратный платеж прошел за ваш счет.

Как быть готовым до того, как придет уведомление

24-часовое окно, это не проблема. Проблема в том, что нужные вам доказательства должны существовать до спора, зафиксированные в момент покупки и потребления, а не реконструированные после того, как появится токен. Команда, которая начинает собирать данные, когда приходит уведомление, уже проиграла.

Прикрепляйте идентичность в момент покупки

Задавайте obfuscatedAccountId с помощью setObfuscatedAccountId при каждой покупке, чтобы идентификатор аккаунта из уведомления напрямую сопоставлялся с пользователем в вашей системе. Держите его как хеш, 64 символа или меньше, никогда не открытый email или другие персональные данные, потому что открытые идентификаторы приводят к блокировке покупок. Без этой связи вы не можете соединить pendingRefundToken с реальной историей использования, и за вашим DECLINE ничего не стоит.

Логируйте потребление по мере его возникновения

Записывайте, что доставил платный заказ, когда и кому, в форме, которую вы можете превратить в consumptionPercentageMilliunits и consumptionUsageEvents по требованию.

  • Проставляйте метку времени каждой единице потребления, чтобы consumptionTime в каждом событии было реальным, а не оцененным.
  • Отслеживайте доставку относительно покупки, чтобы вы могли уверенно указать процент потребления, а не гадать.
  • Держите идентификаторы аккаунта и профиля рядом с использованием, чтобы событие собиралось одним запросом, когда придет токен.
  • Захватывайте IP запроса и приблизительный location, если они у вас есть, поскольку Google Play принимает оба как поля события.

Отвечайте внутри окна, автоматически

24-часовое окно удобно для машины и жестоко для человека, который должен бодрствовать и быть внимательным. Ответ должен быть автоматическим: уведомление на входе, аккаунт найден, потребление собрано, один вызов ReviewRefund на выходе, все без человека в контуре. Это та часть, которую RefundHalt выполняет за вас. Мы слушаем PendingRefundReviewNotification, сопоставляем заказ с использованием, которое мы уже отслеживаем для этого аккаунта, и отвечаем orders.reviewrefund внутри окна с предпочтением по возврату и реальными доказательствами потребления. Токен, это нить, а доказательства, это дело. Имейте наготове и то и другое, и единственный разговор о возврате, к которому вы можете присоединиться, станет тем, который вы можете выиграть.

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

Что такое разбор возвратного платежа в Google Play?
Разбор возвратного платежа в Google Play, это процесс, который Google Play использует, чтобы запросить у разработчика доказательства перед решением по оспоренному платежу. Когда банк клиента отзывает платеж, Google Play может отправить на ваш сервер PendingRefundReviewNotification и дать вам 24 hours на ответ через API ReviewRefund, предоставляя предпочтение по возврату и доказательства того, сколько потребил клиент. Это единственный путь возврата в Android, где ваш вклад влияет на исход.
Сколько времени у меня есть, чтобы ответить на уведомление о возвратном платеже в Google Play?
24 hours. Google Play отправляет PendingRefundReviewNotification как Real Time Developer Notification, и вы должны вызвать API ReviewRefund в течение 24 hours с момента этого уведомления. Отсчет начинается, когда уведомление публикуется в вашу тему Cloud Pub/Sub, поэтому вашему потребителю нужно слушать в реальном времени, а не опрашивать по расписанию.
Что позволяет мне отправить API orders.reviewrefund?
Вы отправляете pendingRefundToken из уведомления, refundPreference, равный APPROVE, DECLINE или NEUTRAL, и доказательства потребления. Поля доказательств, это consumptionPercentageMilliunits, целое число в миллиединицах, где 100000 означает 100 percent потребления, необязательный массив consumptionUsageEvents с меткой времени, идентификатором аккаунта, IP-адресом, описанием и location для каждого события, и булево значение sampleContentProvided. Успешный вызов возвращает пустое тело с HTTP 200.
Могу ли я обновить свой ответ ReviewRefund после отправки?
Нет. Google Play фиксирует ваш первый вызов ReviewRefund для данного уведомления и игнорирует каждый последующий вызов, все равно возвращая статус OK. Нет ни черновика, ни правки, поэтому ваш первый ответ должен быть полным. Соберите предпочтение по возврату и все доказательства потребления, прежде чем сделать единственный вызов.
Сколько стоит проигранный возвратный платеж в Google Play после August 3 2026?
Для заказов, размещенных после August 3 2026, разработчик берет на себя цену покупки за вычетом сервисного сбора Play плюс сбор за возвратный платеж, взимаемый финансовым учреждением. Google Play продолжает покрывать часть сервисного сбора. Это поверх вычислений, вызовов API, хранилища и выплат, которые вы уже потратили на доставку заказа, ничего из чего возврат не возвращает.
Какие причины возврата запускают уведомление об ожидающем разборе?
Только CHARGEBACK, который приходит в уведомлении как refundReason code 7. Другие возвраты Google Play, такие как 48-часовое окно самостоятельного возврата, возвраты через поддержку и аннулированные покупки, решаются без разработчика и не открывают ожидающий разбор. Если вы получаете PendingRefundReviewNotification, значит банк отозвал платеж, и Google Play решает, оспаривать ли его.

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

RefundHalt

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

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

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

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