Следующие шаги иллюстрируют мою проблему с потоком платежей Stripe в Stripe, но вы могли бы придумать что-то похожее для других платежных шлюзов, на которые я смотрел, когда окончательное уведомление об успешном платеже отправляется асинхронно от платежного шлюза продавцуsite.
- Клиент добавляет 10 товаров по A в корзину, итого 100 $
- Клиент переходит на страницу оформления заказа.Сервер создает Stripe PaymentIntent на общую сумму 100 долл. США и отправляет в браузер «client_secret».
- В браузере клиента отображается страница оформления заказа с общей суммой 100 долл. США и форма оплаты Stripe.
- Клиент открываетновая вкладка, и добавьте 10 элементов B в корзину покупок, общая стоимость которых теперь составляет 200 долларов США.
- Клиент возвращается на вкладку оформления заказа и завершает платеж в размере 100 долларов США с помощью Stripe (ничего, что может сделать сайт, чтобы предотвратить это, - все это происходит с клиентом).сторона)
- Асинхронно, Stripe уведомляет сайт через веб-крючков, что мы получили 100 долларов.Что нам теперь делать?
Сумма платежа больше не соответствует сумме корзины.Нужно ли возвращать платеж и отменять заказ?Как мы уведомляем клиента?Мы, вероятно, уже показали им страницу «заказ завершен - спасибо», потому что у нас не было возможности узнать, что сумма была неправильной, пока не пришло асинхронное уведомление.Клиент, вероятно, уже покинул наш сайт.Что мы делаем с их корзиной для покупок?
- Еще один фон для всего этого:
Я всегда обращался к Stripe всякий раз, когда мои клиенты хотели принимать онлайн-платежи на своих сайтах, потому чтоСинхронная модель Stripe сделала мой код красивым и простым.Клиент вводил данные своей карты, затем Stripe возвращал токен, представляющий платеж, и, наконец, мой серверный код проверял, что все данные были верны, использовал API Stripe для сбора денег и возвращал сообщение с благодарностью клиенту.браузер.
Но теперь кажется, что Stripe отходит от этой модели к асинхронной модели (PaymentIntents), где ваш сервер должен прослушивать уведомления о выполненных платежах, прежде чем выполнять заказы.В терминологии Stripe мы должны настроить прослушивание «webhooks» для события «payment_intent.succeeded».
Все остальные платежные шлюзы, которые я использовал в прошлом, также имеют асинхронную модель, в том смысле, что вашВеб-сервер должен дождаться какого-то обратного вызова от шлюза, уведомляющего нас о платеже, прежде чем мы сможем безопасно начать обработку заказа.PayPal называет это «Уведомление о мгновенном платеже», Worldpay называет его «Заказ веб-хуков», Adflex называет его «Server2ServerNotification» ... и т. Д.
Там, где я борюсь, пытается справиться с вещами, которые могут произойти во времяразрыв между началом оформления заказа и получением уведомления о платеже.Учитывая, что все эти платежные шлюзы используют асинхронные модели такого рода, должно быть простое решение этих (и подобных) проблем, но я действительно застрял - любые предложения будут высоко оценены.