При использовании handleCardPayment
проблема не столько в том, что платеж может быть неудачным, а в том, что он может успешно , но ваш код не знает об этом .
handleCardPayment
запускает несколько асинхронных шагов - показывает пользователю диалоговое окно для аутентификации платежа в своем банке, обрабатывает фактический расход по своей карте и закрывает диалоговое окно. Только после того, как все, что выполнено, выполняет Обещание, и ваша функция, которая получает result
, выполняется.
Рассмотрим случай, когда:
клиент нажимает Оплатить
handleCardPayment
называется
клиент видит диалог своего банка для аутентификации
платеж
они делают это, и они считают, что их платеж теперь завершен,
и они немедленно закрывают свой браузер.
В этом случае ваш код никогда не будет выполнен, но Stripe по-прежнему обрабатывает заряд. Таким образом, вы не знаете, что платеж произошел, и вы не можете выполнить заказ.
Вот почему так важно использовать веб-хуки, поэтому вы получите асинхронное уведомление о завершении платежа, даже если пользователь закрыл свой браузер в середине процесса, а ваш код после handleCardPayment
так и не получил шанса на запуск. В качестве альтернативы вы можете использовать поток ручного подтверждения , где шаги разделены, а фактическая плата не обрабатывается до тех пор, пока ваш сервер не выполнит отдельный вызов API.