ADR-039 · 2026-06-03 · UA-first платіжний стек

Платіжна інфраструктура без привʼязки до постачальника

Стек багатьох провайдерів для українських ФОП-3 SaaS. WayForPay для підписок і разових покупок, LiqPay + Monobank для повернень. Stripe залишається в репо для Y2 EU expansion.

Архітектура, незалежна від постачальника — переключення між провайдерами через одну змінну середовища. PCI DSS Рівень 1, 3-D Secure 2.0, інтеграція ПРРО з коробки.

Перше питання технічних оцінювачів

Чому не Stripe як основний?

Stripe — це стандарт галузі для SaaS на Заході, але для українського ФОП-3 він не є практичним вибором у V1. Stripe не приймає прямо реєстрацію UA ФОП — потрібно або EU LLC (Estonia OÜ ~€600 + щорічні витрати, Польща sp. z o.o. ~₴80k налаштування), або Stripe Atlas (US Delaware LLC, $500 налаштування + щорічна звітність до IRS).

До того ж повторюваний платіж у UAH через Stripe має 1.5-2% втрат обмінних курсів при кожному перетворенні в USD. Для плану $49/місяць це ~$0.70-1.00 втрати на місяць на клієнта — гроші які краще лишити у клієнта або в продукті.

WayForPay приймає українського ФОП-3 за 1-3 робочі дні перевірки, нативно стягує в UAH без обмінних курсів, і має автоматичну інтеграцію ПРРО. Для повернень використовуємо API повернення LiqPay (action=refund) та Monobank як резервний варіант. Це дає нам повну можливість обробляти повернення для замовлень, оплачених через будь-який провайдер.

Stripe не "відкинутий" — він активний у кодовій базі як третій провайдер. Коли матимемо EU LLC або Stripe Atlas (Y2 — після PMF в UA), активуємо одним параметром середовища. Дивись ADR-039 для повної декомпозиції.

Стек багатьох провайдерів

П'ять провайдерів — одна абстракція

Кожен провайдер закриває специфічний випадок використання. Маршрутизація відбувається на рівні оркестратора через інтерфейс <code class="font-mono text-primary-500">SubscriptionProvider</code> + перемикач багатьох провайдерів <code class="font-mono text-primary-500">refund-providers.ts</code>.

WayForPay

live (після KYC)
Основна підписка та біллінг

Повторюваний токенізований збір, інтеграція ПРРО, місячні/річні плани, повторні спроби платежу + нарахування.

  • • Хмара підписок (повторюваний без ручної токенізації)
  • • Карта + Apple Pay + Google Pay
  • • 3-D Secure 2.0 обовʼязковий
  • • Інтеграція ПРРО на KYC — фіскальні квитанції автоматично
  • • PCI DSS Рівень 1
  • • Шлях розширення ЄС через перебрендинг Flitt

LiqPay

live (перемикач багатьох провайдерів)
Резервний варіант для повернень

Найнадійніший UA шлюз (PrivatBank). Використовуємо для виконання повернення для замовлень оплачених через LiqPay.

  • • API повернення (sha1 підпис)
  • • Багатовалютна: UAH, USD, EUR
  • • Apple Pay + Google Pay
  • • Потік зворотного платежу для повернень

Monobank Acquiring

відстрочено (P2)
Дешевий варіант (відстрочено P2)

Найдешевший UA придбавець (1.4-2.5%). Повторюваний обмежений — використаємо для одноразових платежів коли воронка покупців стабілізується.

  • • API скасування/повернення рахунків
  • • X-Token авторизація
  • • Найдешевша комісія на UA ринку
  • • Повторюваний потребує окремої банкерської угоди

Stripe

відстрочено (Y2 ЄС)
Відстрочено до Y2 ЄС

Третій провайдер у репо. Активується коли буде EU LLC або Stripe Atlas + обсяг клієнтів ЄС/США виправдовує вартість.

  • • Підписка + Податок + Портал біллінгу
  • • Найкращий розробницький досвід
  • • Багатовалютна рідна
  • • Активувати через BILLING_PROVIDER=stripe
Відповідність автоматично

ФОП-3 + ПРРО — без ручної звітності

Українські SaaS на ФОП-3 (спрощена система 5% від обороту) при продажу послуг резидентам України зобов'язані використовувати програмну РРО — реєстратор розрахункових операцій. Це фіскальний чек, який автоматично йде у податкову при кожній транзакції.

Що робить WayForPay
  • ✓ Автоматичне формування ПРРО чека на кожну успішну транзакцію
  • ✓ Емейл клієнту з фіскальним чеком (юридично закриваючий документ)
  • ✓ Передача чека в податкову через API кабінету платника
  • ✓ Розрахунок єдиного податку (5%) автоматично з вхідного обороту
Що робить merchant (ти)
  • ✓ Активувати інтеграцію ПРРО під час WayForPay KYC (~10 хв розмови)
  • ✓ Подати квартальну ФОП-3 декларацію — наш Tax Auto-Pilot агент генерує
  • ✓ Тримати ФОП-3 ліміт у межах ~₴8.3M/рік оборот (~$200k)
  • ✓ При наближенні до ліміту — переходити на ТОВ (плануй заздалегідь)

Якщо плануєш scale > $200k ARR — починай реєстрацію ТОВ паралельно з launch. Y1 mantra $30k MRR = $360k ARR перевищує ФОП-3 ліміт через ~6 місяців. Це не блокер для launch, але враховуй у роадмепі.

Архітектура (для розробників)

Що під капотом

Інтерфейс SubscriptionProvider

interface SubscriptionProvider {
  id: 'demo' | 'wayforpay' | 'stripe';
  isConfigured(): boolean;
  createCheckout(args): Promise<{ url }>;
  createPortal(args): Promise<
    | { kind: 'hosted'; url }
    | { kind: 'unsupported'; reason }
  >;
}

Кожен провайдер реалізує цей інтерфейс. Реєстр у <code class="font-mono">billing/provider.ts</code>, вибір через змінну середовища <code class="font-mono">BILLING_PROVIDER</code>. Непідтриманий портал (WayForPay не має розташованого портала біллінгу) — fallback інтерфейсу на /dashboard/settings.

Виконання повернення (багатопровайдерські)

type RefundProviderId =
  | 'liqpay'    | 'monobank'
  | 'stripe'    | 'manual';

executePaymentRefund(provider, {
  paymentIntentId,
  amountUah,
  reason,
  idempotencyKey,
}) => Promise<RefundResult>

Маршрутизація на провайдера яким було сплачено замовлення. Ідемпотентність через <code class="font-mono">refund-log id</code> — безпечна для повторного відтворення. Помилки повертають структурований результат (успіх/невдача/потрібно вручну), ніколи не викидають.

Перевірка підпису вебсайту

  • WayForPay: HMAC-MD5 на merchantSecretKey
  • LiqPay: sha1(secret + data + secret) base64
  • Monobank: X-Token header + body match
  • Stripe: Stripe-Signature header + secret

Кожен webhook route окремий — <code class="font-mono">/webhooks/&lt;provider&gt;</code>. Signatures верифікуються до того як зворушити DB.

Outcome billing meters

  • $0.50 / closed_deal
  • $0.10 / ttn_generated
  • 1-2% / ad_budget_managed
  • $1.00 / return_resolved
  • $2.00 / recovered_oos_sale

Метрики випускаються з runtime агента → агрегуються у <code class="font-mono">billing-meters</code> → щотижневі пункти рахунків у WayForPay. Помилки у retry-циклі cron. Оператор бачить використання в реальному часі у панелі.

Кодова база відкрита на GitHub — apps/orchestrator/src/billing/.

План розвитку

Що далі

V1 · Q3 2026
WayForPay підписка live + повернення LiqPay + разові покупки. Автопілот податків формує ФОП-3 декларацію раз на квартал.
P2 · Q4 2026
Monobank Acquiring як дешевший варіант для клієнтів з великим обсягом (1.4-2.5% vs WayForPay 2.7%). Apple Pay + Google Pay у оформленні вхідних.
Y2 EU · 2027
Stripe в режимі live після формування EU LLC (Estonia OÜ або Польща). Ціни в EUR/USD, Stripe Tax для клієнтів PL/CZ/DE. UA-сторона залишається WayForPay.
Y3 US · 2028
Stripe як основний для ринку Північної Америки. Сертифікація SOC 2 Type II (ADR-025). Консолідація багатовалютності за регіонами.

FAQ — Платежі

Питання по платіжній архітектурі?

30-хвилинне демо — покажу оформлення замовлення песочниці WayForPay, потік повернення LiqPay, зразок квитанції ПРРО. Якщо ти оцінюєш Unitelia з технічної сторони — це найшвидший спосіб переконатись що ми не розмахуємо рукою.