Платежі — найризикованіша частина e‑commerce
Тут перетинаються гроші, підтримка і юридичні ризики. Якщо станова модель і журнали операцій відсутні — кожна помилка перетворюється на “ручний розбір”.
1) Розділяй “замовлення” і “транзакцію”
- Order має свій lifecycle.
- Payment transaction має свої стани: initiated → authorized → captured → refunded.
2) Ідемпотентність і webhooks
- Idempotency‑Key для create payment / refund.
- Dedup для webhook‑ів по eventId.
- Reconciliation: звірка з провайдером при спірних станах.
3) Повернення і часткові рефанди
Потрібні правила: що можна повернути, які строки, як це впливає на склад і бухгалтерію.
4) Fraud і chargebacks
- Сигнали: підозріла доставка, часті відмови, high‑risk BIN.
- Логи і докази: таймлайн, IP, device fingerprint (обережно з PII).
Підсумок
Керовані платежі = стани + журнали + ідемпотентність + reconciliation. Тоді повернення і спори не “ламають” операції.