Управление подписками и разовыми покупками

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

Отменить подписку

Отмена подписки может быть инициирована как пользователями, так и разработчиками.

Отмена по инициативе пользователя

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

Самый простой способ дать пользователям возможность добровольно отменить подписку — это добавить в приложение прямые ссылки на Play Store , где они смогут просматривать и управлять своими подписками.

Отмена по инициативе разработчика

Разработчику также может потребоваться инициировать отмену подписки из бэкэнда. API purchases.subscriptions.cancel позволяет отменить покупку подписки. Например, вы можете использовать этот метод, чтобы отказаться от устаревшей услуги. Отмена подписки не влечет за собой возврат средств, и пользователь сохраняет доступ до конца текущего расчетного периода.

Этот метод позволяет указать следующие типы отмен в параметре cancellationType в теле запроса:

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

  • DEVELOPER_REQUESTED_STOP_PAYMENTS : Отменяет подписку и предотвращает дальнейшие платежи. Пользователи не могут восстановить или повторно подписаться на подписку через Play Store, однако вы можете разрешить им повторную подписку в вашем приложении.

Предоставьте пользователям возможность восстанавливать неистекшие подписки.

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

Чтобы указать пользователю, что он может восстановить отмену подписки, отправьте POST-запрос к API purchases.subscriptions.cancel и установите параметр запроса cancellationType в значение USER_REQUESTED_STOP_RENEWAL .

Пример:

  • Токен для покупки подписки 1a2b3c4d5e6f7g8h9i0j
  • Название пакета приложения com.your.app
  • Идентификатор подписки your-subscription-product

HTTP POST-запрос:

https://androidpublisher.googleapis.com/androidpublisher/v3/applications/com.your.app/purchases/subscriptions/your-subscription-product/tokens/1a2b3c4d5e6f7g8h9i0j:cancel

Текст запроса:

{
  "cancellationType": "USER_REQUESTED_STOP_RENEWAL"
}

Предоставьте пользователям возможность повторно продлевать истекшие подписки.

Чтобы разрешить повторную подписку на истекшую подписку, необходимо включить опцию «Повторная подписка» в базовом тарифном плане подписки, а затем отменить подписку, установив параметр cancellationType в значение USER_REQUESTED_STOP_RENEWAL .

Разрешите пользователям повторно подписываться только в вашем приложении.

Если вы установили параметр cancellationType в значение DEVELOPER_REQUESTED_STOP _PAYMENTS или не установили cancellationType , пользователи не смогут восстановить свою подписку через центр подписок Play. Однако при необходимости пользователи могут повторно оформить подписку через ваше приложение.

Выполнение этого действия запускает уведомление для разработчиков в режиме реального времени SUBSCRIPTION_CANCELED . Обрабатывайте эти отмены, как описано в разделе «Отмены» .

Отсрочка выставления счетов

Вы можете продлить срок действия подписки, используя метод subscriptionsv2.defer . При отсрочке подписки с дополнениями все элементы подписки откладываются на тот же срок. В течение периода отсрочки пользователь остается подписанным на ваш контент, но плата за дополнительное время не взимается. При отсрочке выставления счетов за подписку информация о статусе обновляется соответствующим образом, и это отображается в поле expiryTime в информации о статусе покупки:

  • Для активных регулярных подписок отложенное выставление счетов продлевает срок действия до следующей даты продления.
  • В случае предоплаченных тарифов отложенная оплата продлевает срок действия услуги.

Вот несколько примеров использования отложенного выставления счетов:

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

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

Выполнение этого действия запускает уведомление разработчика в режиме реального времени SUBSCRIPTION_DEFERRED . См. раздел «Отсрочка выставления счетов для подписчика» в разделе «О подписках», чтобы узнать, как обрабатывать подобные события.

Пример:

  1. Стриминговый сервис FitnessGoals планирует провести в феврале акцию, направленную на поощрение регулярных занятий спортом.

  2. Они решили предложить дополнительный месяц обслуживания любому подписчику, который будет заниматься с FitnessGoals не менее 10 раз в течение февраля.

  3. Они отслеживают результаты конкурса, и 1 марта вызывают метод subscriptionsv2.defer для каждой активной покупки подписки, принадлежащей пользователям, которые выполнили условия конкурса в феврале.

  4. Эти пользователи получают дополнительный месяц бесплатных видеороликов с упражнениями, а также рассказывают всем своим друзьям о том, как FitnessGoals помогает им оставаться здоровыми!

Осуществление возврата средств и аннулирования заказов.

Существует множество ситуаций, когда вам может потребоваться оформить возврат средств или отозвать доступ к подписке или разовой покупке.

Полный возврат средств за заказ по идентификатору заказа.

С помощью API orders.refund вы можете оформить полный возврат средств за любой заказ в течение трех лет с момента покупки. Метод orders.refund получает параметр revoke, указывающий, следует ли отозвать доступ, помимо осуществления возврата средств.

Если вы инициируете отзыв подписки с запросом на возврат средств за приобретенную подписку, подписка немедленно прекращается, и это запускает уведомление для разработчиков в режиме реального времени SUBSCRIPTION_REVOKED . Ознакомьтесь с разделом «Отзывы» в руководстве по управлению жизненным циклом подписки, чтобы узнать, как обрабатывать подобные события.

Пример:

  1. В честь начала нового чемпионата мира по футболу киберспортивное приложение Football-Not-Soccer решило разыграть бесплатные виртуальные футболки среди всех пользователей, которые приобретут новые комплекты формы своей команды в течение первых 24 часов.

  2. Сайт Football-Not-Soccer использует API orders.refund без передачи параметра revoke для возврата средств за приобретенные футболки победителям.

Отменить подписку и вернуть деньги с помощью токена покупки.

В некоторых случаях может потребоваться отозвать доступ к подписке пользователя и произвести возврат средств. Play Billing предлагает методы отзыва подписки, включая полный возврат средств и пропорциональный возврат, через API subscriptionsv2.revoke . С помощью этой конечной точки вы можете указать revocationContext , чтобы определить, как будет рассчитываться возврат средств.

Выполнение этого действия запускает уведомление разработчика в режиме реального времени SUBSCRIPTION_REVOKED . Ваше приложение должно обрабатывать эти отмены, как описано в разделе «Отзывы» .

Пример:

  • Покупка с использованием токена покупки 1a2b3c4d5e6f7g8h9i0j
  • Приложение с именем пакета com.your.app
  • Намерение произвести пропорциональный возврат средств.

HTTP POST-запрос:

https://androidpublisher.googleapis.com/androidpublisher/v3/applications/com.your.app/purchases/subscriptionsv2/tokens/1a2b3c4d5e6f7g8h9i0j:revoke

Текст запроса:

{
  "revocationContext": {
    "proratedRefund": {}
  }
}

Полный возврат средств

Если вам необходимо отменить подписку и вернуть полную сумму за текущий расчетный период, оформите полный возврат средств. Используйте функцию purchases.subscriptionsv2.revoke и установите тип возврата "fullRefund": {} .

Пример:

  1. У Марии есть автоматически продлеваемая 30-дневная подписка на стриминговый сервис SuperMovies. Мария столкнулась с техническими проблемами, которые не позволяют ей получить доступ к контенту. На третий день расчетного периода она обратилась в службу поддержки, заявив, что так и не получила доступ к подписке.

  2. Служба поддержки клиентов находит в своей системе данные о покупке подписки Марией и инициирует вызов функции purchases.subscriptionsv2.revoke с запросом на полный возврат средств.

  3. Служба поддержки сообщила Марии, что ей должны вернуть 100% стоимости подписки, и что она больше не является подписчицей данного тарифного плана.

Пропорциональное возмещение

Если вам необходимо отменить подписку и частично вернуть оставшееся время использования, оформите пропорциональный возврат средств. Используйте функцию purchases.subscriptionsv2.revoke и установите "proratedRefund": {} в качестве типа возврата.

Пример:

  1. У Марии есть автоматически продлеваемая 30-дневная подписка на стриминговый сервис SuperMovies. Она с удовольствием пользовалась услугой некоторое время. На 15-й день расчетного периода Мария обратилась в службу поддержки, сообщив, что переезжает за границу и со следующего дня больше не сможет пользоваться услугой.

  2. Служба поддержки клиентов находит в своей системе данные о покупке подписки Марией и инициирует вызов функции purchases.subscriptionsv2.revoke с запросом на пропорциональный возврат средств.

  3. Служба поддержки сообщила Марии, что ей должны вернуть около 50% от стоимости подписки, а доступ к услуге должен быть немедленно прекращен.