Как реализовать автопродление подписки?

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

Так и есть, все сервисы списывают заранее? Или всё же в момент окончания подписки?
  • Вопрос задан
  • 1122 просмотра
Пригласить эксперта
Ответы на вопрос 4
@aynur_safin
Запускать, например каждый час, проверку истечения строка подписки по всем клиентам.
Если подписка истекла и включено автопродление и есть деньги на счету (или возможность списать с карты) - продляем, если нет - блокируем и шлем сообщение пользователю (ну и заранее можно напоминать).
Если в какой то час проверка сбойнет, ничего страшного, подумаешь, клиент на час больше попользуется сервисом, в след. час заблокируется или продлится, если конечно вы за этот час устраните причину сбоя, получив алярму от сервиса.
Ответ написан
Комментировать
qonand
@qonand
Software Engineer
По поводу сервисов google не скажу, но делать продление после завершения текущей подписки не очень хороший вариант. Есть риск что процесс продления задержится, либо произойдет какой-то сбой при ее продлении, а это соответственно приведет к тому что пользователь какое-то время не сможет юзать необходимый ему функционал. Поэтому лучше реализовывать продление подписки за ранее, скажем за 5-10 минут до момента окончания текущей подписки (соответственно делать это все через демон).
Ответ написан
Комментировать
Sanasol
@Sanasol
нельзя просто так взять и загуглить ошибку
Для начала нужно быть очень трастовым пользователем эквайринга, чтобы вам было разрешено делать списания со стороны сервера, т.е. нельзя просто так взять и начать подписывать людей, а потом автоматически в любое время брать с карты деньги.
Или пользоваться сервисом который умеет подписки оформлять, правда это уже будет автомат на стороне сервиса и русских таких я не видел/не искал.

Ну или вариант нищебродский - предоплата и баланс юзера с которого списывается сумма, если она есть. Это уже как хотите по крону и т.д.
Ответ написан
Комментировать
zoonman
@zoonman
⋆⋆⋆⋆⋆
Все работает достаточно просто.
У пользователя есть план, с ним связана модель доступа к различным фишкам вашего приложения. По умолчанию у пользователя бесплатный план.
Существует очередь подписок, в нее добавляется запись, когда выполнить следующее списание средств. Если списание удается, текущий план продлевается. Если списание не удается, смотрится причина, если эта причина финансового характера, например мало денег на счету, то клиенту устанавливается бесплатный план, а если причина технического характера, например шлюз недоступен или не проводит операции сегодня, то в очередь ставится задача продления на час/день позже. При таком подходе и клиент не теряет доступ, но и вы не теряете деньги. Если на шлюзе какая-то постоянная проблема, то у вас есть возможность исправить свою инфраструктуру до того, как вы начнете получать претензии от клиентов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы