В рамках повседневной деятельности вам может потребоваться выполнять различные действия с подписками и разовыми покупками. Например, службе поддержки клиентов может потребоваться полностью или частично вернуть средства пользователям или отозвать права в определенных случаях. Вы можете управлять заказами в Play Console или в собственной системе с помощью Google Play Developer API.
Отменить подписки
Отменить подписку могут как пользователи, так и разработчики.
Отмена подписки пользователем
Пользователи могут в любой момент отменить подписку в Google Play. Если это применимо, вы также должны предоставить пользователям возможность отменять подписки в приложении и на сайте.
Проще всего добавить в приложение ссылки на контент в Google Play, где пользователи смогут просматривать свои подписки и управлять ими.
Отмена подписки по инициативе разработчика
Разработчики также могут инициировать отмену подписки из серверной части.
API purchases.subscriptions.cancel позволяет отменить покупку подписки.
Например, этот метод можно использовать, чтобы отключить устаревший сервис.
При отмене подписки средства не возвращаются, а пользователь сохраняет доступ к контенту до конца текущего расчетного периода.
Этот метод позволяет указать следующие типы отмен в параметре тела запроса cancellationType:
USER_REQUESTED_STOP_RENEWALS – отменяет подписку так, как если бы это сделал пользователь в Google Play. Оставшиеся платежи будут списываться до конца текущего минимального срока подписки. В Google Play пользователи могут восстановить подписку до истечения ее срока действия или оформить ее повторно после истечения срока действия, если это разрешено для основного плана.
DEVELOPER_REQUESTED_STOP_PAYMENTS – отменяет подписку и предотвращает дальнейшие платежи. Пользователи не могут восстановить или оформить подписку повторно в Google Play, но вы можете разрешить им сделать это в своем приложении.
Как разрешить пользователям восстанавливать подписки с неоконченным сроком действия
В некоторых случаях может быть полезно разрешить пользователям восстанавливать в центре подписок Google Play подписки с неоконченным сроком действия после того, как вы как разработчик инициировали отмену. Например, вы можете предложить пользователю отменить подписку в приложении. Вы можете сами решать, какие отмены, инициированные вашей бизнес-логикой, пользователи могут восстановить.
Чтобы указать, что пользователь может отменить отмену, отправьте запрос POST к API purchases.subscriptions.cancel и задайте для параметра запроса cancellationType значение USER_REQUESTED_STOP_RENEWALS.
Пример:
- Токен покупки подписки
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_RENEWALS"
}
Как разрешить пользователям возобновлять подписки с истекшим сроком действия
Чтобы разрешить повторное оформление подписки с истекшим сроком действия, включите параметр Повторное оформление подписки в основном плане подписки, а затем отмените ее, установив для параметра cancellationType значение USER_REQUESTED_STOP_RENEWALS.
Разрешить пользователям возобновлять подписку только в приложении
Если вы задали для параметра cancellationType значение
DEVELOPER_REQUESTED_STOP_PAYMENTS или не задали егоcancellationType, пользователи не смогут
восстановить подписку в центре подписок Google Play. Однако при необходимости пользователи могут оформить подписку снова через ваше приложение.
После этого будет отправлено SUBSCRIPTION_CANCELED уведомление для разработчиков в режиме реального времени. Обрабатывайте отмены в соответствии с инструкциями в разделе Отмены.
Отложить оплату
Вы можете продлить период действия подписки с помощью метода subscriptionsv2.defer. Если вы откладываете подписку с дополнениями, все ее элементы откладываются на один и тот же срок. В течение этого периода пользователь сохраняет доступ к контенту, но плата за дополнительное время не взимается. Если вы отложите оплату подписки, статус изменится и будет отражен в поле expiryTime в информации о статусе покупки:
- Если у вас активная подписка с регулярными платежами, отсрочка продлит срок ее действия.
- Для планов с предоплатой отложенная оплата продлевает срок действия.
Вот несколько примеров того, как можно использовать отложенную оплату:
- Предоставьте пользователям бесплатный доступ в качестве специального предложения, например дайте одну неделю бесплатного доступа существующим подписчикам за заполнение опроса.
- Предоставьте клиентам бесплатный доступ в качестве компенсации, например после длительного сбоя, который мог повлиять на их возможность использовать ваш сервис.
Выставление счета можно отложить на срок от одного дня до года за один вызов API. Чтобы продлить право ещё раз, вызовите API до наступления новой даты окончания.
Это действие активирует уведомление для разработчиков в режиме реального времени SUBSCRIPTION_DEFERRED. Подробнее о том, как отложить оплату подписки, читайте в статье О подписках.
Пример:
Стриминговый сервис FitnessGoals хочет запустить промоакцию, чтобы побудить людей регулярно заниматься спортом в феврале.
Они решили предложить дополнительный месяц подписки всем, кто занимался с FitnessGoals не менее 10 раз в феврале.
Они отслеживают результаты и 1 марта вызывают метод subscriptionsv2.defer для всех активных подписок, принадлежащих пользователям, которые выполнили условия в феврале.
Эти пользователи получают дополнительный месяц видео с регулярными упражнениями бесплатно и рассказывают всем друзьям, как FitnessGoals помогает им поддерживать здоровье.
Как оформить возврат средств и отменить подписку
Существует множество ситуаций, в которых может потребоваться вернуть средства за подписку или разовую покупку или отозвать доступ к ним.
Как полностью вернуть средства за заказ по идентификатору заказа
С помощью orders.refund API можно полностью вернуть средства за любой заказ в течение трех лет с момента покупки.
Метод orders.refund получает параметр revoke, который указывает, нужно ли закрыть доступ к контенту в дополнение к возврату средств.
Если вы отзываете покупку подписки с помощью вызова возврата средств, подписка немедленно прекращается и отправляются уведомления SUBSCRIPTION_REVOKED (в режиме реального времени) и VoidedPurchaseNotification (записывается в Voided Purchases API). Чтобы узнать, как обрабатывать такие события, ознакомьтесь с руководством по управлению жизненным циклом подписки в разделе Отзывы.
Пример:
В честь начала нового чемпионата мира по футболу в приложении Football-Not-Soccer, посвященном киберспорту, решили разыграть бесплатные виртуальные футболки среди всех пользователей, которые купят новую форму команды в первые 24 часа.
В приложении Football-Not-Soccer используется API
orders.refundбез параметра отмены, чтобы вернуть средства за покупку футболок победителям.
Как отменить подписку и вернуть средства за нее по токену покупки
В некоторых случаях вам может потребоваться отозвать доступ к подписке пользователя и вернуть средства. Play Платежи предлагает методы отмены, включая полный возврат средств и пропорциональный возврат средств через subscriptionsv2.revoke API. С помощью этой конечной точки вы можете указать revocationContext, чтобы определить, как рассчитывается возврат средств.
После этого срабатывает SUBSCRIPTION_REVOKED Real Time Developer Notification и VoidedPurchaseNotification, а информация об этом записывается в Voided Purchases API. Приложение должно обрабатывать такие отмены, как описано в разделе Отзывы.
Пример:
- Покупка с помощью токена покупки
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запрос на полный возврат средств.Служба поддержки сообщила Марии, что ей вернут полную стоимость подписки и она больше не будет на нее подписана.
Пропорциональный возврат средств
Если вам нужно отменить подписку и частично вернуть средства за оставшееся время действия, выполните пропорциональный возврат. Используйте функцию purchases.subscriptionsv2.revoke и укажите "proratedRefund": {} в качестве типа возврата.
Пропорциональный возврат средств поддерживается как для автоматически продлеваемых подписок, так и для планов с предоплатой, действующих не менее одной недели.
Пример:
У Марии есть автоматически продлеваемая 30-дневная подписка на ежемесячный план стримингового сервиса SuperMovies. Она уже некоторое время пользуется сервисом и довольна им. Мария обращается в службу поддержки на 15-й день платежного цикла и сообщает, что переезжает за границу и не сможет пользоваться сервисом со следующего дня.
Специалист службы поддержки находит в системе информацию о подписке Марии и отправляет в
purchases.subscriptionsv2.revokeзапрос на пропорциональный возврат средств.Специалист службы поддержки сообщает Марии, что ей должны вернуть около 50% стоимости подписки, а доступ к сервису будет прекращен немедленно.