Refund — это не просто «вернуть деньги». Это отдельный процесс с собственными edge cases, которые разработчики игнорируют до первого инцидента.
Кейс 1: частичный refund при скидке. Пользователь купил товар за $100 с купоном на 20%. Реальная цена — $80. Он требует возврат за один из двух товаров в заказе. Сколько возвращаем — $50 или $40?
Кейс 2: refund после конвертации валюты. Транзакция прошла по курсу 1 USD = 90 RUB. К моменту возврата курс 85. Stripe вернёт в USD — банк конвертирует по текущему курсу. Клиент получит меньше рублей. Кто виноват?
Кейс 3: refund после chargeback. Клиент оспорил транзакцию в банке и одновременно написал вам. Если вы обработаете refund — деньги спишутся дважды. Нужна блокировка: сначала проверить статус диспута.
Кейс 4: refund на закрытую карту. Stripe попробует вернуть на оригинальную карту. Если она закрыта — деньги зависнут. Нужна fallback-логика: перевод на другую карту или банковский трансфер.
Документируйте бизнес-логику refund ещё до написания кода. Иначе будете патчить каждый edge case в проде.
Интеграция платежных решений
@payment_integration_ops_arb
Refund — это не просто «вернуть деньги». Это отдельный процесс с собственными edge cases, которые разработчики
Этот пост опубликован в Telegram-канале Интеграция платежных решений. Подписаться можно по ссылке: @payment_integration_ops_arb.