Логика платных подписок как сервиса на блокчейне VIZ

31.01.2019 09:04:27

Всем привет, в этой статье мы обсудим, как правильно рассчитывать позитив/негатив при смене платной подписки. Начнем с самого начала.

Что такое платная подписка? Это сервис автоматических платежей на блокчейне по модели подписки. Модель задается 3 переменными:

  • Максимальное количество уровней подписки (levels);
  • Количество токенов за уровень подписки (amount);
  • Период действия подписки (period в днях);

Думаю, чаще будет использоваться одноуровневая 30-дневная подписка за определенное количество токенов. Это может быть как VIP подписка для дополнительных возможностей сервиса, так и доступ к закрытым разделам/данным.  В теории это также может быть платная подписка на расширение API запросов или хостинга файлов :)

Итак, аккаунт в блокчейне публикует условия платной подписки.

Другой аккаунт (подписчик на платный сервис/услугу) подтверждает условия подписки в операции, соглашаясь на них и указывая хочет ли он автоматически ее подтверждать через параметр auto_renewal.

Если смотреть на эту механику "просто" то при окончании подписки все сводится к проверке параметра auto_renewal и если он включен, то проверка баланса и автоматическая оплата подписки. Но есть и сложности. А что, если модель подписки изменилась?

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

  • Заменил levels с 1 на 2;
  • Заменил amount с 5.000 VIZ на 2.500 VIZ;
  • Заменил period с 30 суток на 28.

Старые договоренности (соглашения) по платным подпискам не должны пострадать. Поэтому все существующие подписки продолжают работать до завершения периода. Возникает 2 возможных ситуации:

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

Рассмотрим оба случая:

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

Тут может быть два случая. Первый случай — остаток от старой подписки МЕНЬШЕ, чем суммарная плата за новую модель подписки. Он решается тем, что от новой суммарной платы вычитается остаток от старой подписки.

Второй случай наступает тогда, когда остаток от старой подписки БОЛЬШЕ, чем суммарная плата за новую модель подписки. Такое может возникнуть, когда пользователь понижает уровень подписки в начале действия старой, или когда плата за подписку стала меньше. В таком случае тоже есть решение. Рассчитывается коэффициент: остаток делится на новую сумму. Например, получилось 1.8. Он умножается на новый период в секундах и записывается заместо него. Для примера, подписка была на 30 дней, соотношение остатка к сумме новой модели подписки 1.8, тогда при согласии пользователя перейти на новую модель подписка будет продлена и будет действовать не 30 дней, а 54 дня.

Уже оплаченную платную подписку нельзя отменить вручную. Ее можно остановить только переключением автоматического продления (параметр auto_renewal). Или она автоматически будет остановлена по следующим причинам.

  • Модель подписки отключена (levels выставлен в 0);
  • Новая модель подписки уменьшила период (негатив для подписчика);
  • Новая модель подписки подорожала (старая цена умноженная на старое количество уровней меньше чем новая цена умноженная на новое количество уровней, это негатив для подписчика);
  • Новая модель может быть принята, если негатив не найден, например, пользователь был подписан на 2 уровень с ценой 5.000 VIZ за уровень, модель изменилась на максимальное количество уровней стало равно 1 с ценой 10.000 VIZ за уровень. Суммарная цена старой модели меньше или равна цене новой модели.

Все это надо запрограммировать и сделать правильно. А также сделать новый плагин с API для обращений к новым сущностям (модель платной подписки, платная подписка).

В скором времени я намерен представить сообществу VIZ.World код, претендент для проведения 5 хардфорка в мейннете VIZ. Именно в нем будет реализована возможность для процессинга платных подписок через блокчейн VIZ.


7
13 наград
3070.797105 Ƶ
Отобразить форму комментирования
Комментарии

31.01.2019 12:41:03

Надо ещё сделать подписки которые платят подписчикам... :)

Типа продажа рекламных объявлений ;)

31.01.2019 12:42:39

надо сделать ещё подписки, которые платят подписчикам, типа продажа рекламных объявлений :)

31.01.2019 12:43:18

надо сделать ещё подписки, которые платят подписчикам, типа продажа рекламных объявлений :)

31.01.2019 12:48:00

надо сделать ещё подписки, которые платят подписчикам, типа продажа рекламных объявлений :)

Интересно... Со всем согласен.

@on1x, а будет ли способ у пользователя посмотреть список подписок? Например, с его баланса снимаются токены, но он забыл, за что. Такое часто бывает в реальной жизни. Например, с подписками на мобильные сервисы.

06.02.2019 06:39:15

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

20.02.2019 11:44:57

Дополню, API для этого сделаны. Методы get_active_paid_subscriptions и get_inactive_paid_subscriptions.