billing in saas applications on rails

Post on 21-Nov-2014

1.126 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

TRANSCRIPT

21 сентября 2013 годаАлександров Игорь

Биллинг в SaaS-системах на Rails

http://www.jetrockets.ru

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

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

• Арендовать биллинг

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

• Арендовать биллинг

• Написать самим

PCI Сompliance

PCI Сompliance

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

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

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

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

Скорость внедрения

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

Скорость внедрения

Наличие API и библиотек (Ruby)

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

Скорость внедрения

Наличие API и библиотек (Ruby)

“Проверенная работоспособность”

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

Скорость внедрения

Наличие API и библиотек (Ruby)

“Проверенная работоспособность”

Ослабленные требования PCI Compliance

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

Аренда биллинга: минусы

Сложность внесения изменений

Аренда биллинга: минусы

Сложность внесения изменений

Зависимость от внешнего сервиса

Аренда биллинга: минусы

Сложность внесения изменений

Зависимость от внешнего сервиса

Сложность в использовании нескольких вариантов

платежей

Аренда биллинга: минусы

Сложность внесения изменений

Зависимость от внешнего сервиса

Сложность в использовании нескольких вариантов

платежей

Постоплатный биллинг

Аренда биллинга: минусы

Разработка биллинга: плюсы

Различные варианты оплаты

Разработка биллинга: плюсы

Различные варианты оплаты

Любая логика работы подписки

Разработка биллинга: плюсы

Различные варианты оплаты

Любая логика работы подписки

Централизация данных

Разработка биллинга: плюсы

Различные варианты оплаты

Любая логика работы подписки

Централизация данных

Слабая зависимость от сторонних сервисов

Разработка биллинга: плюсы

Разработка биллинга: минусы

Страшно!

Разработка биллинга: минусы

Страшно!

Заказчик боится

Разработка биллинга: минусы

Страшно!

Заказчик боится

Долгая разработка и тестирование

Разработка биллинга: минусы

Страшно!

Заказчик боится

Долгая разработка и тестирование

Полное соблюдение правил PCI Compliance

Разработка биллинга: минусы

https://github.com/igor-alexandrov/spaceship

SpaceShip

SpaceShip• Тарифный план

• Подписка

• Процесс биллинга

• Биллинговый интервал

• Инвойс

• Оплата и транзакции

• Хранение кредитных карт

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

Тарифный план

app/models/billing/plan.rb

Тарифный план

• Стоимости услуг за единицу времени

app/models/billing/plan.rb

Тарифный план

• Стоимости услуг за единицу времени– месячная стоимость

app/models/billing/plan.rb

Тарифный план

• Стоимости услуг за единицу времени– месячная стоимость– годовая стоимость

app/models/billing/plan.rb

Тарифный план

• Стоимости услуг за единицу времени– месячная стоимость– годовая стоимость– квартальная стоимость

app/models/billing/plan.rb

Тарифный план

• Стоимости услуг за единицу времени– месячная стоимость– годовая стоимость– квартальная стоимость– …

app/models/billing/plan.rb

Тарифный план

• Стоимости услуг за единицу времени– месячная стоимость– годовая стоимость– квартальная стоимость– …

• Набор ресурсов, который может быть доступен пользователю

app/models/billing/plan.rb

Тарифный план

• Стоимости услуг за единицу времени– месячная стоимость– годовая стоимость– квартальная стоимость– …

• Набор ресурсов, который может быть доступен пользователю

• Длительность (наличие) триального периода

app/models/billing/plan.rb

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

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

Подписка

• Пользователь

app/models/billing/subscriptions/base.rb

Подписка

• Пользователь• Тарифный план

app/models/billing/subscriptions/base.rb

Подписка

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

app/models/billing/subscriptions/base.rb

Подписка

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

• Выбранные параметры

app/models/billing/subscriptions/base.rb

Подписка

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

• Выбранные параметры– максимальное число пользователей, товаров, места на диске…

app/models/billing/subscriptions/base.rb

Подписка

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

• Выбранные параметры– максимальное число пользователей, товаров, места на диске…

• Набор дополнительных сервисов (тарифицируются отдельно)

app/models/billing/subscriptions/base.rb

Подписка

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

• Выбранные параметры– максимальное число пользователей, товаров, места на диске…

• Набор дополнительных сервисов (тарифицируются отдельно)– интеграция с внешним источником данных

app/models/billing/subscriptions/base.rb

Подписка

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

• Выбранные параметры– максимальное число пользователей, товаров, места на диске…

• Набор дополнительных сервисов (тарифицируются отдельно)– интеграция с внешним источником данных– дополнителные услуги, входящие в более премиальные планы

app/models/billing/subscriptions/base.rb

Подписка (стоимость)

app/models/billing/subscriptions/base.rb

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

Подписка (стоимость)

app/models/billing/subscriptions/base.rb

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

• сколько стоит полный интервал обслуживания пользователя

Подписка (стоимость)

app/models/billing/subscriptions/base.rb

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

• сколько стоит полный интервал обслуживания пользователя

• сколько средств уже потрачено

Подписка (стоимость)

app/models/billing/subscriptions/base.rb

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

• сколько стоит полный интервал обслуживания пользователя

• сколько средств уже потрачено

• сколько средств можно вернуть

Подписка (стоимость)

app/models/billing/subscriptions/base.rb

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

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

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

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

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

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

• Выставляется дата следующего биллинга

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

• Выставляется дата следующего биллинга

• сдвиг на 30, 365 дней и так далее.

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

• Выставляется дата следующего биллинга

• сдвиг на 30, 365 дней и так далее.

• Расчитывается стоимость полученного интервала;

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

• Выставляется дата следующего биллинга

• сдвиг на 30, 365 дней и так далее.

• Расчитывается стоимость полученного интервала;

• Создаётся инвойс

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

• Выставляется дата следующего биллинга

• сдвиг на 30, 365 дней и так далее.

• Расчитывается стоимость полученного интервала;

• Создаётся инвойс

• Оповещение пользователя (email, sms).

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

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

Инвойс (счёт)

app/models/billing/invoice.rb

Инвойс (счёт)

• дата создания (issue date)

app/models/billing/invoice.rb

Инвойс (счёт)

• дата создания (issue date)• срок оплаты (due date)

app/models/billing/invoice.rb

Инвойс (счёт)

• дата создания (issue date)• срок оплаты (due date)• общая сумма, которую должен заплатить клиент

app/models/billing/invoice.rb

Инвойс (счёт)

• дата создания (issue date)• срок оплаты (due date)• общая сумма, которую должен заплатить клиент

• человеко-понятная информация:

app/models/billing/invoice.rb

Инвойс (счёт)

• дата создания (issue date)• срок оплаты (due date)• общая сумма, которую должен заплатить клиент

• человеко-понятная информация:• описание услуг

app/models/billing/invoice.rb

Инвойс (счёт)

• дата создания (issue date)• срок оплаты (due date)• общая сумма, которую должен заплатить клиент

• человеко-понятная информация:• описание услуг• стоимость

app/models/billing/invoice.rb

Инвойс (счёт)

• дата создания (issue date)• срок оплаты (due date)• общая сумма, которую должен заплатить клиент

• человеко-понятная информация:• описание услуг• стоимость• скидки

app/models/billing/invoice.rb

Инвойс (счёт)

• дата создания (issue date)• срок оплаты (due date)• общая сумма, которую должен заплатить клиент

• человеко-понятная информация:• описание услуг• стоимость• скидки• …

app/models/billing/invoice.rb

Инвойс (счёт)

app/models/billing/invoice.rb

• ничего не знает о том, в результате чего он был создан;

Инвойс (счёт)

app/models/billing/invoice.rb

• ничего не знает о том, в результате чего он был создан;• знает о транзакциях, которые проводились с ним;

Инвойс (счёт)

app/models/billing/invoice.rb

• ничего не знает о том, в результате чего он был создан;• знает о транзакциях, которые проводились с ним;

1. class Billing::Invoice < ActiveRecord::Base2. 3. belongs_to :account, :inverse_of => :billing_transactions4. has_many :transactions, :class_name => "Billing::Transaction"5. 6. end

Инвойс (счёт)

app/models/billing/invoice.rb

• могут быть применены скидочные купоны;• основание для совершения действий над аккаунтом

пользователя:– перевод на более другой план при отсутвии оплаты;– блокировка функциональности;

Инвойс (счёт)

app/models/billing/invoice.rb

Оплата

Active Merchant

• code extraction из Shopify• > около 100 платёжных провайдеров• в production с 2006 года

• есть интеграция с Robokassa

http://activemerchant.org/

Оплата

Оплата (мир)

Оплата (мир)

https://www.braintreepayments.com/

Оплата (мир)

https://www.braintreepayments.com/

Оплата (мир)

Оплата (Braintree)https://www.braintreepayments.com/

• USA, Europe, Canada, Australia;

Оплата (Braintree)https://www.braintreepayments.com/

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

Оплата (Braintree)https://www.braintreepayments.com/

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

Оплата (Braintree)https://www.braintreepayments.com/

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

• PCI Compliance за 15 минут;

Оплата (Braintree)https://www.braintreepayments.com/

Безопасное хранение информации о кредитных картах

1. class Billing::Card2. ...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. else13. self.errors.add(:base, result.errors.first.message)14. return false15. end16.end

https://www.braintreepayments.com/

Оплата (Braintree)

Оплата (Россия)

Оплата (Россия)

https://paysio.com/

Оплата (Россия)

Транзакция

app/models/billing/transaction.rb

Транзакция

• зачисление средств на внутренний счёт

app/models/billing/transaction.rb

Транзакция

• зачисление средств на внутренний счёт• списание средств с внутреннего счёта

app/models/billing/transaction.rb

Транзакция

• зачисление средств на внутренний счёт• списание средств с внутреннего счёта• оплата через Braintree

app/models/billing/transaction.rb

Транзакция

• зачисление средств на внутренний счёт• списание средств с внутреннего счёта• оплата через Braintree

• оплата через PayPal (авторизация + списание средств)

app/models/billing/transaction.rb

Транзакция

app/models/billing/transaction.rb

Транзакция

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

app/models/billing/transaction.rb

Транзакция

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

• В зависимости от типа может инициировать оплату с помощью выбранного провайдера платежей.

app/models/billing/transaction.rb

Транзакция

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

• В зависимости от типа может инициировать оплату с помощью выбранного провайдера платежей.

• В некоторых случаях может быть отменена.

app/models/billing/transaction.rb

Вопросы?

http://www.jetrockets.ru

top related