Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Billing in Rails SaaS-applications

Billing in Rails SaaS-applications

Presentation for my speech on DevConf 2013

F1d3181d81631bd5bdd0e2326d5b5651?s=128

Igor Alexandrov

June 14, 2013
Tweet

Transcript

  1. Биллинг в SaaS-системах на Rails 14 июня 2013 года Александров

    Игорь, JetRockets
  2. 2

  3. None
  4. None
  5. None
  6. None
  7. Как организовать биллинг для SaaS-приложения?

  8. Как организовать биллинг для SaaS-приложения? • Арендовать биллинг

  9. Как организовать биллинг для SaaS-приложения? • Арендовать биллинг • Написать

    самим
  10. PCI Сompliance

  11. PCI Сompliance https://www.pcisecuritystandards.org/ Набор требований для организаций, сервиса и оборудования,

    которое работает с платёжными данными пользователей.
  12. PCI Сompliance https://www.pcisecuritystandards.org/ Набор требований для организаций, сервиса и оборудования,

    которое работает с платёжными данными пользователей. 3 стандарта: • Data Security Standard (PCI DSS), • Payment Application Data Security Standard (PA-DSS) • PIN Transaction Security (PTS)
  13. PCI Сompliance https://www.pcisecuritystandards.org/ Набор требований для организаций, сервиса и оборудования,

    которое работает с платёжными данными пользователей. 3 стандарта: • Data Security Standard (PCI DSS), • Payment Application Data Security Standard (PA-DSS) • PIN Transaction Security (PTS) Scanning Vendors (> 130 компаний) • https://www.securitymetrics.com
  14. Аренда биллинга у другого SaaS-приложения

  15. Аренда биллинга у другого SaaS-приложения

  16. Аренда биллинга: плюсы

  17. Аренда биллинга: плюсы Скорость внедрения

  18. Аренда биллинга: плюсы Скорость внедрения Наличие API и библиотек (Ruby)

  19. Аренда биллинга: плюсы Скорость внедрения Наличие API и библиотек (Ruby)

    “Проверенная работоспособность”
  20. Аренда биллинга: плюсы Скорость внедрения Наличие API и библиотек (Ruby)

    “Проверенная работоспособность” Ослабленные требования PCI Compliance
  21. Аренда биллинга: минусы

  22. Сложность внесения изменений Аренда биллинга: минусы

  23. Сложность внесения изменений Зависимость от внешнего сервиса Аренда биллинга: минусы

  24. Сложность внесения изменений Зависимость от внешнего сервиса Сложность в использовании

    нескольких вариантов платежей Аренда биллинга: минусы
  25. Сложность внесения изменений Зависимость от внешнего сервиса Сложность в использовании

    нескольких вариантов платежей Постоплатный биллинг Аренда биллинга: минусы
  26. Разработка биллинга: плюсы

  27. Разработка биллинга: плюсы Различные варианты оплаты

  28. Разработка биллинга: плюсы Различные варианты оплаты Любая логика работы подписки

  29. Разработка биллинга: плюсы Различные варианты оплаты Любая логика работы подписки

    Централизация данных
  30. Разработка биллинга: плюсы Различные варианты оплаты Любая логика работы подписки

    Централизация данных Слабая зависимость от сторонних сервисов
  31. Разработка биллинга: минусы

  32. Страшно! Разработка биллинга: минусы

  33. Страшно! Заказчик боится Разработка биллинга: минусы

  34. Страшно! Заказчик боится Долгая разработка и тестирование Разработка биллинга: минусы

  35. Страшно! Заказчик боится Долгая разработка и тестирование Полное соблюдение правил

    PCI Compliance Разработка биллинга: минусы
  36. https://github.com/igor-alexandrov/spaceship SpaceShip

  37. SpaceShip • Тарифный план • Подписка • Процесс биллинга •

    Биллинговый интервал • Инвойс • Оплата и транзакции • Хранение кредитных карт
  38. Тарифный план app/models/billing/plan.rb

  39. Тарифный план app/models/billing/plan.rb

  40. Тарифный план • Стоимости услуг за единицу времени – месячная

    стоимость – годовая стоимость – квартальная стоимость – … app/models/billing/plan.rb
  41. Тарифный план • Стоимости услуг за единицу времени – месячная

    стоимость – годовая стоимость – квартальная стоимость – … • Набор ресурсов, который может быть доступен пользователю app/models/billing/plan.rb
  42. Тарифный план • Стоимости услуг за единицу времени – месячная

    стоимость – годовая стоимость – квартальная стоимость – … • Набор ресурсов, который может быть доступен пользователю • Длительность (наличие) триального периода app/models/billing/plan.rb
  43. Подписка app/models/billing/subscriptions/base.rb

  44. Подписка app/models/billing/subscriptions/base.rb

  45. Подписка • Пользователь app/models/billing/subscriptions/base.rb

  46. Подписка • Пользователь • Тарифный план app/models/billing/subscriptions/base.rb

  47. Подписка • Пользователь • Тарифный план • Биллинговый интервал app/models/billing/subscriptions/base.rb

  48. Подписка • Пользователь • Тарифный план • Биллинговый интервал •

    Выбранные параметры – максимальное число пользователей, товаров, места на диске… app/models/billing/subscriptions/base.rb
  49. Подписка • Пользователь • Тарифный план • Биллинговый интервал •

    Выбранные параметры – максимальное число пользователей, товаров, места на диске… • Набор дополнительных сервисов (тарифицируются отдельно) – интеграция с внешним источником данных – дополнителные услуги, входящие в более премиальные планы app/models/billing/subscriptions/base.rb
  50. Подписка (стоимость) app/models/billing/subscriptions/base.rb

  51. Сколько стоит минимальный биллинговый интервал (1 день) Подписка (стоимость) app/models/billing/subscriptions/base.rb

  52. Сколько стоит минимальный биллинговый интервал (1 день) Подписка (стоимость) app/models/billing/subscriptions/base.rb

  53. Сколько стоит минимальный биллинговый интервал (1 день) • сколько стоит

    полный интервал обслуживания пользователя Подписка (стоимость) app/models/billing/subscriptions/base.rb
  54. Сколько стоит минимальный биллинговый интервал (1 день) • сколько стоит

    полный интервал обслуживания пользователя • сколько средств уже потрачено Подписка (стоимость) app/models/billing/subscriptions/base.rb
  55. Сколько стоит минимальный биллинговый интервал (1 день) • сколько стоит

    полный интервал обслуживания пользователя • сколько средств уже потрачено • сколько средств можно вернуть Подписка (стоимость) app/models/billing/subscriptions/base.rb
  56. Подписка (биллинговый интервал) app/models/billing/subscriptions/base.rb

  57. Подписка (биллинговый интервал) app/models/billing/subscriptions/base.rb

  58. Подписка (биллинговый интервал) app/models/billing/subscriptions/base.rb

  59. Подписка (биллинговый интервал) app/models/billing/subscriptions/base.rb

  60. Подписка (биллинговый интервал) app/models/billing/subscriptions/base.rb

  61. Подписка (процесс биллинга) app/models/billing/subscriptions/base.rb

  62. • Выставляется дата следующего биллинга • сдвиг на 30, 365

    дней и так далее. Подписка (процесс биллинга) app/models/billing/subscriptions/base.rb
  63. • Выставляется дата следующего биллинга • сдвиг на 30, 365

    дней и так далее. • Расчитывается стоимость полученного интервала; Подписка (процесс биллинга) app/models/billing/subscriptions/base.rb
  64. • Выставляется дата следующего биллинга • сдвиг на 30, 365

    дней и так далее. • Расчитывается стоимость полученного интервала; • Создаётся инвойс • Оповещение пользователя (email, sms). Подписка (процесс биллинга) app/models/billing/subscriptions/base.rb
  65. Инвойс (счёт) app/models/billing/invoice.rb

  66. Инвойс (счёт) app/models/billing/invoice.rb

  67. Инвойс (счёт) • дата создания (issue date) app/models/billing/invoice.rb

  68. Инвойс (счёт) • дата создания (issue date) • срок оплаты

    (due date) app/models/billing/invoice.rb
  69. Инвойс (счёт) • дата создания (issue date) • срок оплаты

    (due date) • общая сумма, которую должен заплатить клиент app/models/billing/invoice.rb
  70. Инвойс (счёт) • дата создания (issue date) • срок оплаты

    (due date) • общая сумма, которую должен заплатить клиент • человеко-понятная информация: • описание услуг • стоимость • скидки • … app/models/billing/invoice.rb
  71. Инвойс (счёт) app/models/billing/invoice.rb

  72. • ничего не знает о том, в результате чего он

    был создан; Инвойс (счёт) app/models/billing/invoice.rb
  73. • ничего не знает о том, в результате чего он

    был создан; • знает о транзакциях, которые проводились с ним; Инвойс (счёт) app/models/billing/invoice.rb
  74. • ничего не знает о том, в результате чего он

    был создан; • знает о транзакциях, которые проводились с ним; 1. class Billing::Invoice < ActiveRecord::Base 2. 3. belongs_to :user, :inverse_of => :billing_transactions 4. has_many :transactions, :class_name => "Billing::Transaction" 5. 6. end Инвойс (счёт) app/models/billing/invoice.rb
  75. • могут быть применены скидочные купоны; • основание для совершения

    действий над аккаунтом пользователя: – перевод на более другой план при отсутвии оплаты; – блокировка функциональности; Инвойс (счёт) app/models/billing/invoice.rb
  76. Оплата

  77. Active Merchant • code extraction из Shopify • > около

    100 платёжных провайдеров • в production с 2006 года • есть интеграция с Robokassa http://activemerchant.org/
  78. https://www.braintreepayments.com/

  79. https://www.braintreepayments.com/

  80. Braintree

  81. Braintree • USA, Europe, Canada, Australia;

  82. Braintree • USA, Europe, Canada, Australia; • До сих пор

    нет в России;
  83. Braintree • USA, Europe, Canada, Australia; • До сих пор

    нет в России; • > 130 валют;
  84. Braintree • USA, Europe, Canada, Australia; • До сих пор

    нет в России; • > 130 валют; • PCI Compliance за 15 минут;
  85. Braintree Безопасное хранение информации о кредитных картах 1. class Billing::Card

    2. ... 3. result = Braintree::CreditCard.create({ 4. :customer_id => self.user.try(:braintree_customer_id), 5. :number => self.number, 6. :expiration_date => self.expiration_date.strftime('%m/%Y'), 7. :cardholder_name => [self.first_name, self.last_name].compact.join(' ') 8. }) 9. 10. if result.success? 11. self.token = result.credit_card.token 12. else 13. self.errors.add(:base, result.errors.first.message) 14. return false 15. end 16.end https://www.braintreepayments.com/
  86. https://paysio.com/

  87. Транзакция app/models/billing/transaction.rb

  88. Транзакция • зачисление средств на внутренний счёт app/models/billing/transaction.rb

  89. Транзакция • зачисление средств на внутренний счёт • списание средств

    с внутреннего счёта app/models/billing/transaction.rb
  90. Транзакция • зачисление средств на внутренний счёт • списание средств

    с внутреннего счёта • оплата через Braintree app/models/billing/transaction.rb
  91. Транзакция • зачисление средств на внутренний счёт • списание средств

    с внутреннего счёта • оплата через Braintree • оплата через PayPal (авторизация + списание средств) app/models/billing/transaction.rb
  92. Транзакция app/models/billing/transaction.rb

  93. Транзакция • Хранит информацию о всех манипуляциях со средствами пользователя:

    удачных и неудачных. app/models/billing/transaction.rb
  94. Транзакция • Хранит информацию о всех манипуляциях со средствами пользователя:

    удачных и неудачных. • В зависимости от типа может инициировать оплату с помощью выбранного провайдера платежей. app/models/billing/transaction.rb
  95. Транзакция • Хранит информацию о всех манипуляциях со средствами пользователя:

    удачных и неудачных. • В зависимости от типа может инициировать оплату с помощью выбранного провайдера платежей. • В некоторых случаях может быть отменена. app/models/billing/transaction.rb
  96. Выводы

  97. http://www.jetrockets.ru