Всем привет.
Делаю в проекте на React+Django систему подписок юзеров (trial-режим, и платные подписки).
Быть может, кто сталкивался с подобной задачей. Какое решение выбрали? Самопис (присваивать юзеров в группы от django.contrib.auth, каждая группа - это определенная подписка, с помощью celery проверять срок действия и тд). Или же использовали готовое решение (по типу stripe, например)?
Заранее благодарю.
Pavel Denisov, Да, согласен.
сделал 3 сущности: Тариф, Подписка, ПлатежнаяОперация.
Юзера связываю с Подписка с помощью OneToOne. По умолчанию - trial.
С помощью celery - каждый день провожу пересчет оставшихся дней.
Самое сложное, видимо, это привязать систему оплату (карта, paypal)
Дабы юзеру отослать вовремя письма о предупреждении окончания подписки (кол-во дней), и то, что подписка завершена (необходимо продлить).
Неверно сформулировал: не пересчитывать, а вовремя проверить и отключить (если закончилось).
Pavel Denisov, Благодарю за разъяснение.
Правильно ли я понимаю, что инвойс придет как колбек. Соответственно, все необходимые данные будут уже в ответе от платежной системы? и далее мы уже ищем у себя в системе данный инвойс с нужным номером (который отправили), и обновляем статус подписки?
Pavel Denisov, еще такой, возможно, странный вопрос, но не могу вразумить.
Правильно ли я понимаю, что форму и саму кнопку необходимо делать на стороне Django? То есть юзер жмет "upgrade", его кидает на форму оплаты, сформированную django? Ну и после успешной оплаты, происходит обновление поля у юзера и редирект обратно в апп? или же форму можно и на клиенте сформировать? тогда как в этом случае ловить сигнал об успешной оплате и обновлять необходимые поля у юзера?
То есть вопрос именно в разделение части React, и Django
Pavel Denisov, это да. Просто у нас есть промежуточный слой - бекенд. Необходимо, в первую очередь, четко обработать все действия на стороне django. Думаю, логично форму оплаты отдать под управление Django, где прописать все success/failure колбеки. Ну и уже после - редирект обратно в React-приложение, с уже обновленными данными.
Не знаю, насколько верна моя логика, но, я б довел юзера до кнопки "оплатить", и далее сделал редирект на django (с нужными параметрами). Ну и далее уже django сделает свою часть.
Есть либа - django-paypal, в которой все формы уже прописаны, колбеки и тд - удобно.
Как по мне, лучше всего добавлять поле DateTimeField к профилю пользователя, которое будет означать конец подписки.
При регистрации дата и время может быть сгенерирована автоматически на текущее время.
Сравнивать подписан ли человек можно с помощь timestamp, что позволяет выдавать подписку буквально на несколько секунд.
Это решает проблему когда например человек зарегистрировался за 1 час до начала задачи по уменьшению дней подписки у всех пользователей.
А также впринципе избавляет от того чтобы делать какие либо задачи.