Як отримати оплату

pic

Фото від Clay Banks на Unsplash

Маєте чудовий продукт і тепер хочете, щоб ваші споживачі почали за нього платити? Це здається цілком логічним і реалістичним, але як все це реалізувати? Як зробити, щоб гроші почали надходити на ваш рахунок? Якщо ви на тому етапі, де був я, то зараз у вас напевно є безліч питань!

Ця стаття описує шлях від надання послуг до того, щоб гроші почали надходити на ваш банківський рахунок. (Якщо ви ще не є учасником, ось посилання на мій блог, де ця стаття була опублікована вперше.)

Дисклеймер: Я не отримував жодних винагород чи рекламних бонусів за написання цієї статті і не є партнером жодного сервісу, згаданого в статті!

Хто збиратиме гроші від мого імені?

Перше питання, яке я поставив собі, було саме це! Я знав, що (я створив систему обміну чеками між міжнародними банками ще в 90-х, тому, мабуть, я міг би побудувати інтеграцію з банком — а точніше з кількома банками — використовуючи PSD2 (Директива ЄС 2015/2366), але це б вимагало від мене самому виконувати безліч регуляцій і забезпечувати відповідність вимогам!

Простіший (і значно швидший) спосіб — це заплатити іншому, щоб він зробив це для мене, так само як я планую отримати гроші від моїх клієнтів за надані послуги. Це і є платіжний шлюз. Один з найбільш відомих і часто згадуваних при пошуку в Інтернеті — це Stripe. Є й інші варіанти, що коштують дешевше, але однією з причин вибору Stripe є документація API, яку вони розробили на зовсім іншому рівні! 🥳

З чого почати?

Є кілька кроків, які потрібно пройти, і я склав список для вашої зручності:

  • відкрийте банківський рахунок
  • зареєструйтеся в Stripe
  • встановіть гем ‘stripe’
  • згенеруйте платіжне посилання
  • додайте маршрут для зворотного виклику

Далі я детально розгляну кожен з цих кроків і поясню, як їх виконати.

Відкрийте банківський рахунок

Це може здатися дивним, але навіть у 2025 році вам все ще необхідно мати банківський рахунок! Я багато що думаю з цього приводу, але давайте зосередимося на головному.

Вам потрібен банківський рахунок, який підтримує платежі через IBAN/SWIFT (міжнародні грошові перекази). Я працюю з Данії, тому не знаю, чи можна обійтися лише з Apple Pay в США, але так чи інакше...

Обліковий запис у Stripe

Налаштування облікового запису в Stripe досить просте. Перейдіть на stripe.com, зареєструйтесь і слідуйте зручному посібнику для налаштування (дякую, Stripe — чудова робота).

pic

Скріншот частини посібника налаштування Stripe

Встановіть гем ‘stripe’

Це був дуже легкий крок — я просто виконав команду bundle add stripe і майже все було готово!

Згенеруйте платіжне посилання

Десь у UI ви викликаєте створення платіжного посилання, і можете зробити його таким, як вам хочеться (для цього є багато API викликів), або зосередитись на кількох важливих параметрах, таких як продукт, ціна — і все. Після генерації ви повинні показати посилання користувачу, наприклад, через модальне вікно або email, а потім просто чекаєте на зворотний виклик 😆

Додайте маршрут для зворотного виклику

Можна сказати, що маршрут для зворотного виклику має меншу важливість у такому асинхронному робочому процесі, як цей, але насправді він має сенс, якщо ви йдете моїм шляхом!

Я використовую API для створення платіжного посилання, щоб генерувати унікальне посилання для кожного нового клієнта (користувача, який вибирає одну з платних послуг на Mortimer) і це посилання може залишатися активним (довго?) поки користувач не вирішить ним скористатися.

Таким чином, я отримую можливість робити це, зрештою/надеюсь, завжди:

class Stripe::PaymentController < ApplicationController
# Зворотний виклик Stripe після завершення оплати
# GET "/stripe/payment?ci=cstesta1M01tZueaLHFtv...Cwn5tgV61"
#
# параметр
# ui = userid
# ci = checkout
sessionid
#
def new
Current.system
user = User.find(params["ui"])
ss = Stripe::Service.new user: Current.getuser
if ss.confirm
payment(params["ci"])
redirectto edittenanturl(Current.gettenant),
success: t("paymentsuccessfullyconfirmed")
else
redirectto edittenanturl(Current.gettenant),
warning: t("paymentnotconfirmed")
end
end
end

Готово

Це, власне, все — вам потрібно тримати все разом (я тримаю все в папці під назвою ‘services’, а всередині неї маю папку ‘stripe’ з таким класом)

class Stripe::Service < SaasService
def paymentlink url, price
Stripe.api
key = settings["apikey"]
pl = Stripe::PaymentLink.create({
line
items: [
{
price: price.id,
quantity: 1
}
],
after_completion: {
type: "redirect",
redirect: {
url: url
}
}
})
return pl.url if pl.active
false
end

def confirmpayment checkoutsessionid
Stripe.api
key = settings["apikey"]
scs = Stripe::Checkout::Session.retrieve checkout
sessionid
if scs["payment
status"] == "paid"
invoice = Stripe::Invoice.retrieve scs["invoice"]
prod = Stripe::Product.retrieve(invoice
.lines.data.first.pricing.pricedetails.product)
if prod.present?
case prod.name
when /pro/; Current.get
tenant.update license: 3
when /essential/; Current.gettenant.update license: 2
end
end
TenantMailer.with(tenant: Current.get
tenant,
user: Current.getuser,
recipient: Current.get
tenant.email,
invoicepdf: invoice.invoicepdf)
.sendinvoice.deliverlater
Current.gettenant.update licensechangedat: Time.current,
license
expires_at: Time.at(invoice
.lines.data.first.period.end).utc
true
else
false
end
end
end

Але це лише ілюзія 😉 — насправді всю важку роботу виконує Stripe gem!

Перекладено з: How to get paid