Правильный способ обработки задержек клиентов в платежном шлюзе Stripe

У меня есть вопрос о стратегии оплаты с помощью Stripe Checkout API. рассмотрите следующий сценарий

  1. Продавец опубликовал на торговой площадке 10 продуктов (яблок) по 5 долларов каждый.
  2. Клиент хочет купить 8 из них, заполняет данные и нажимает кнопку оформления заказа (появляется полоса оформления заказа).
  3. Но клиент ждет без дела в течение 1 часа, не завершив платеж (просто глядя на пользовательский интерфейс).
  4. Значит, пока кто-то другой покупает все 10 яблок
  5. первый покупатель не знает об этом, потому что он уже находится на последней странице оплаты.
  6. И он платит 40 долларов за 8 яблок
  7. Транзакция является ошибкой, потому что не осталось яблок для доставки.

Я пытаюсь интегрировать платежный шлюз Stripe в свою торговую платформу, и мне не удалось найти решение для такого сценария.

Есть ли в Stripe какая-нибудь функция, чтобы справиться с этим? Как период тайм-аута сеанса? Или как с этим справиться стандартным способом?

Ценю вашу помощь.


person Achira Shamal    schedule 30.10.2019    source источник


Ответы (1)


Не знаю, актуально ли это до сих пор!

Но раньше у меня была такая же проблема. Я начал управлять сеансами со стороны приложения. Итак, у меня есть таблица сеансов с полосами, у меня есть тайм-аут и статус сеанса. Кроме того, у меня есть таблица покупок со статусом, который может быть отложен, если пользователь еще не заплатил. Так что я могу обновить количество товаров в реальном магазине.

Это сценарий, который я реализовал. Это может помочь вам или любому, кто думает об этой проблеме. Может быть, есть более идеальный сценарий, но у меня он работает: v:

  1. Пользователь нажимает оплатить

  2. Приложение отправляет POST-запрос вашему приложению создать конечную точку сеанса со всей необходимой информацией.

  3. В бэкэнде проверьте, есть ли у этого пользователя активный сеанс с той же информацией, если да, просто перенаправьте его на этот активный идентификатор сеанса. Если нет, просто создайте еще один сеанс полосы, запишите его информацию в свою базу данных и перенаправьте пользователя на новый идентификатор сеанса

  4. Затем добавьте запись о покупке с суммой / количеством, которое пользователь пытается получить (со статусом «ожидает») и идентификатором сеанса, который у вас есть. Затем обновите страницу товаров и вычтите это количество ...

  5. Создайте веб-перехватчик с этим идентификатором сеанса. Таким образом, вы можете знать, сделано это или нет (у вас должна быть конечная точка, которая принимает идентификаторы сеансов)

  6. Вы периодически проверяете свои активные сеансы (cronjob), если сеанс слишком старый (например, один час), вы просто удаляете его и удаляете отложенную покупку, а затем обновляете количество товаров в вашем магазине до фактического количества.

  7. И когда Stripe вызывает ваш веб-перехватчик с необходимыми событиями, теперь вы можете установить статус сеанса и статус покупки на «Сделано» (не забудьте проверить подпись вызова для большей безопасности)

Я надеюсь, что это поможет вам.

person HSLM    schedule 10.05.2020