Решение о возврате за покупку внутри приложения принимает не разработчик, а сам стор. У Apple заявку рассматривает служба поддержки Apple через reportaproblem.apple.com, разработчик может только предоставить информацию об использовании покупки. У Google пользователь сначала оформляет возврат самостоятельно через сервис поддержки Google Play, а после истечения короткого окна обращается к разработчику или в поддержку Google. Отдельно стоит оплата физических товаров картой или через Kaspi внутри приложения: такие возвраты делает сам бизнес через свой банк-эквайер, сторы здесь ни при чём.

Кто решает о возврате за покупку у Apple

Покупатель оформляет запрос на возврат на сайте reportaproblem.apple.com: выбирает пункт «Запросить возврат средств», указывает причину, приложение или подписку и отправляет заявку. Решение принимает Apple, рассматривая каждый случай отдельно, ответ обычно приходит на почту в течение нескольких дней. Разработчик не подтверждает и не отклоняет возврат напрямую, но может повлиять на решение, предоставив данные об использовании покупки. Если Apple отклонила заявку, покупатель может подать апелляцию через тот же сервис.

CONSUMPTION_REQUEST: что видит и может сделать разработчик у Apple

Когда покупатель запрашивает возврат, сервер Apple отправляет разработчику уведомление CONSUMPTION_REQUEST через App Store Server Notifications. У разработчика есть 12 часов, чтобы отправить в ответ так называемую consumption information: данные о том, сколько пользователь уже получил от покупки, сколько раз заходил в приложение, есть ли история других покупок. В уведомлении также передаётся поле с причиной запроса от самого покупателя. Начиная с последних версий API разработчик может дополнительно указать собственную рекомендацию, одобрить возврат или отклонить, эта рекомендация учитывается Apple вместе с остальными данными, но не является окончательным решением. Если Apple одобрила возврат, разработчику приходит отдельное уведомление REFUND, обычно решение и возврат средств укладываются в окно около 48 часов с момента запроса.

На практике это значит, что серверная часть приложения должна уметь принимать оба типа уведомлений автоматически, а не в ручном режиме раз в неделю. Например, для приложения с подпиской на образовательные курсы важно в течение тех же 12 часов поднять из базы данные о том, сколько уроков и материалов пользователь уже открыл, это как раз то, что Apple ожидает увидеть в consumption information, и что заметно повышает шанс на отказ в спорных случаях злоупотребления возвратами.

Кто решает о возврате за покупку у Google

У Google пользователь сначала может оформить самостоятельный возврат через сервис поддержки Google Play. Такой самостоятельный возврат обычно доступен в ограниченное время после покупки, по данным поддержки Google, ориентировочно в пределах 48 часов, дальше условия зависят от конкретной покупки. Если время самостоятельного возврата прошло, пользователю предлагают обратиться напрямую к разработчику: у бизнеса есть собственная политика поддержки и возвратов, и разработчик может оформить возврат вручную через управление заказами в Play Console. Если ни разработчик, ни самостоятельный сервис не помогли, пользователь может обратиться в поддержку Google Play напрямую, и решение в таком случае принимает уже Google.

Voided Purchases и уведомления Google для разработчика

Про любой аннулированный платёж, будь то самостоятельный возврат пользователя, возврат от поддержки, возврат, инициированный самим разработчиком, или чарджбэк от банка, Google может мгновенно уведомить сервер разработчика через Real-time Developer Notifications, тип уведомления voided purchase. Кроме мгновенных уведомлений, есть Voided Purchases API: по нему можно запросить список аннулированных покупок за нужный период, если нужно свериться отдельно от потока уведомлений.

Как не выдать доступ после возврата

Самая частая техническая ошибка после возврата: доступ или контент, который остаётся у пользователя, хотя деньги ему уже вернули. Проверка чека на стороне клиента этого не ловит: клиентское приложение может быть закрыто или офлайн в момент возврата. Правильная схема: обрабатывать уведомления REFUND у Apple и voided purchase у Google на сервере и сразу отзывать доступ или расходуемый ресурс, не дожидаясь, пока пользователь снова откроет приложение. Отдельно стоит различать разовые расходуемые покупки (бонусы, монеты, разовые услуги) и подписки или разблокированный навсегда контент: логика отзыва доступа для них разная, и её стоит продумать ещё на этапе разработки, а не после первого спорного возврата.

На практике это означает, что сервер приложения должен быть источником истины о том, есть ли у пользователя доступ, а не сам клиент. Например, в приложении с платными курсами после REFUND или voided purchase сервер должен закрыть доступ к оплаченному курсу централизованно, тогда пользователь потеряет его на всех своих устройствах сразу, а не только там, где успело обновиться клиентское приложение. Такую логику стоит закладывать вместе с самой интеграцией встроенных покупок, а не добавлять отдельным патчем, когда уже случился первый спорный возврат и появились вопросы от бухгалтерии.

Возврат за физический товар: не через App Store и Google Play

Если внутри приложения продают не цифровой контент, а физический товар или услугу, доставку из магазина в Алматы, заказ такси, бронирование стола в ресторане, и оплата идёт напрямую через Kaspi Pay, Apple Pay или Google Pay как обычный платёж, а не как встроенная покупка стора, правила Apple и Google на такие платежи не распространяются. Возврат в этом случае оформляет сам бизнес через свой банк-эквайер или платёжный шлюз, по общим правилам возврата денег при оплате картой или через Kaspi. Важно не путать два разных механизма оплаты внутри одного приложения: как устроена интеграция Apple Pay и Google Pay для обычных покупок, описано в статье Apple Pay и Google Pay в приложении, а про приём Kaspi Pay в статье интеграция Kaspi Pay в приложение.

Разграничение важно ещё и потому, что правила App Store и Google Play прямо запрещают проводить через собственный платёжный шлюз оплату цифрового контента, который положено продавать через встроенные покупки: курсы, подписки, виртуальные товары внутри приложения. А вот доставку еды, такси, бронирование услуг и другие физические товары и офлайн-услуги оба стора разрешают оплачивать напрямую, минуя комиссию стора. Поэтому для бизнеса с доставкой или услугами в Казахстане важно с самого начала спроектировать в приложении два разных механизма оплаты и возврата: один для цифрового контента через сторы, другой для физических товаров через собственный эквайер, и не путать их логику ни на бэкенде, ни в поддержке клиентов. Служба поддержки клиентов тоже должна понимать эту границу: если оператор направит покупателя за возвратом по доставке в reportaproblem.apple.com, там ему просто не смогут помочь, а время на решение реальной проблемы будет потеряно.

Частые ошибки казахстанских компаний

  • Пытаются самостоятельно одобрить или отклонить возврат в App Store, хотя окончательное решение всегда за Apple, а не за разработчиком.
  • Не отвечают на CONSUMPTION_REQUEST за 12 часов, теряя возможность повлиять на решение по спорному возврату.
  • Проверяют доступ пользователя только на клиенте, из-за чего после возврата платный контент остаётся доступен ещё долго.
  • Путают возврат за встроенную покупку и возврат за физический товар, оплаченный через Kaspi Pay внутри того же приложения, и пишут в поддержку Apple или Google не по адресу.
  • Не закладывают чарджбэки в финансовую модель. Оспоренный через банк платёж возвращается покупателю, и выручку по нему приходится списывать.

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

Может ли разработчик сам одобрить возврат в App Store?

Нет, решение принимает Apple, разработчик может только предоставить данные об использовании покупки и указать свою рекомендацию.

Сколько времени есть на ответ по CONSUMPTION_REQUEST?

12 часов с момента уведомления, после этого срока ответить с consumption information уже нельзя.

Может ли разработчик оформить возврат в Google Play вручную?

Да, через управление заказами в Play Console разработчик может вернуть деньги за конкретную покупку самостоятельно, не дожидаясь обращения пользователя в поддержку Google.

Нужно ли что-то делать на сервере после возврата, если приложение простое?

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

Распространяются ли правила возврата Apple и Google на оплату Kaspi за доставку?

Нет, если это оплата физического товара или услуги напрямую через Kaspi Pay, а не встроенная покупка стора, возврат делает сам бизнес через своего эквайера.

Настроим приём платежей и обработку возвратов

Мы подключаем встроенные покупки, Kaspi Pay и серверную обработку уведомлений о возвратах так, чтобы доступ и деньги были синхронизированы. Смету присылаем бесплатно за 24 часа. Оставьте заявку на странице контактов или посмотрите, что входит в разработку мобильных приложений.