Возможно, вам придется принять меры по управлению подписками или разовыми покупками в рамках повседневной деятельности. Например, вашей службе поддержки клиентов может потребоваться произвести полный или частичный возврат средств пользователям, или в некоторых случаях вам может потребоваться отозвать права. Вы можете управлять заказами из 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
в режиме реального времени. Обработайте эти отмены, как описано в разделе «Отмены» .
Отсрочка платежа
Используйте subscriptions.defer
, чтобы продлить срок действия подписки. В течение периода отсрочки пользователь остается подписанным на ваш контент, но за дополнительное время не взимается плата. Когда вы откладываете выставление счетов за подписку, информация о состоянии обновляется соответствующим образом, и вы видите ее в поле expiryTime
в информации о статусе покупки:
- Для активных повторяющихся подписок отложенное выставление счетов продлевает следующую дату продления.
- Для планов с предоплатой отложенное выставление счетов продлевает срок действия.
Вот несколько примеров использования отложенного платежа:
- Предоставьте пользователям бесплатный доступ в качестве специального предложения, например предоставьте одну неделю бесплатно существующим подписчикам для заполнения опроса для обратной связи.
- Предоставьте клиентам бесплатный доступ в качестве меры поддержки клиентов, например, после длительного простоя, который мог повлиять на их возможность использовать вашу услугу.
Выставление счетов может быть отложено на срок от одного дня до года за каждый вызов API. Чтобы еще больше отложить окончание срока действия, вызовите API еще раз до наступления новой даты истечения срока действия.
Выполнение этого действия вызывает уведомление разработчика SUBSCRIPTION_DEFERRED
в режиме реального времени. См . раздел «Отсрочка выставления счетов для подписчика» в разделе «О подписках», чтобы узнать, как обрабатывать эти события.
Пример:
Стриминговый сервис FitnessGoals хочет провести акцию, поощряющую регулярные физические упражнения в феврале.
Они решили предложить дополнительный месяц обслуживания любому подписчику, который тренируется с FitnessGoals не менее 10 раз в течение февраля.
Они отслеживают результаты испытания и 1 марта вызывают API-интерфейс
subscriptions.defer
для каждой активной покупки подписки, принадлежащей пользователям, которые выполнили задание в феврале.Эти пользователи получают дополнительный месяц бесплатных видео с регулярными упражнениями, а также рассказывают всем своим друзьям, как FitnessGoals помогает им оставаться здоровыми!
Возврат средств и аннулирование
Существует множество ситуаций, когда вам может потребоваться вернуть деньги за подписку или разовую покупку или отозвать доступ к ней.
Полный возврат заказа по идентификатору заказа
С помощью API orders.refund
вы можете осуществить полный возврат средств за любой заказ в течение трех лет с момента покупки. Метод orders.refund
получает параметр revoke, указывающий, следует ли отозвать доступ в дополнение к возврату средств.
Если вы отмените отзыв с требованием возврата денег за покупку подписки, подписка немедленно прекращается и активируется уведомление разработчика в режиме реального времени SUBSCRIPTION_REVOKED
. Прочтите раздел «Отзывы» руководства по управлению жизненным циклом подписки, чтобы узнать, как обрабатывать эти события.
Пример:
Чтобы отпраздновать начало нового чемпионата мира, киберспортивное приложение Football-Not-Soccer решает разыграть бесплатные виртуальные футболки для всех пользователей, которые купят новую форму команды в первые 24 часа.
Football-Not-Soccer использует API
orders.refund
без передачи параметра отзыва, чтобы вернуть победителям деньги за покупку футболки.
Отменить и вернуть подписку с помощью токена покупки
В некоторых случаях вам может потребоваться отозвать доступ к подписке пользователя и вернуть деньги. 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": {}
в качестве типа возврата.
Пример:
У Марии есть автоматически продлеваемая 30-дневная подписка на ежемесячный план потоковой передачи SuperMovies. Мария столкнулась с техническими проблемами, которые не позволяют ей получить доступ к контенту. На третий день расчетного цикла она обращается в службу поддержки клиентов и заявляет, что так и не получила доступа к подписке.
Служба поддержки клиентов находит сведения о покупке подписки Марии в своей системе и инициирует звонок на сайт
purchases.subscriptionsv2.revoke
с просьбой о полном возврате средств.Служба поддержки клиентов сообщает Марии, что ей следует вернуть 100 % стоимости подписки, и она больше не подписана на этот план.
Пропорциональное возмещение
Если вам необходимо прекратить подписку и частично возместить оставшееся время, выполните пропорциональное возмещение. Используйте функцию purchases.subscriptionsv2.revoke
и установите "proratedRefund": {}
в качестве типа возврата.
Пример:
У Марии есть автоматически продлеваемая 30-дневная подписка на ежемесячный план потоковой передачи SuperMovies. Она уже некоторое время с удовольствием пользуется этой услугой. Мария связывается со службой поддержки клиентов на 15-й день своего платежного цикла и сообщает, что она уезжает за границу и больше не сможет пользоваться этой услугой, начиная со следующего дня.
Служба поддержки клиентов находит сведения о покупке подписки Марии в своей системе и вызывает звонок на
purchases.subscriptionsv2.revoke
с запросом пропорционального возмещения.Служба поддержки клиентов сообщает Марии, что ей должно быть возвращено около 50% стоимости подписки, и что доступ к услуге немедленно прекращен.