Stripe Автоматическое подтверждение и выполнение заказа без Webhooks? - PullRequest
0 голосов
/ 09 июля 2019

В документации полосы говорится, что при использовании платежного намерения с использованием автоматического подтверждения вы должны асинхронно выполнять заказ клиента с помощью веб-крюков.

Если я предлагаю услугу, например, возможность загрузить файл после покупки, то зачем мне это нужно?контролировать payment_intent.succeeded webhook?

Если платеж выполнен успешно с помощью следующей функции handleCardPayment, существует ли вероятность сбоя платежа?Почему я не должен позволять пользователю загружать файл сразу, если платеж прошел успешно?

var cardholderName = document.getElementById('cardholder-name');
var cardButton = document.getElementById('card-button');
var clientSecret = cardButton.dataset.secret;

cardButton.addEventListener('click', function(ev) {
  stripe.handleCardPayment(
    clientSecret, cardElement, {
      payment_method_data: {
         billing_details: {name: cardholderName.value}
      }
    }
  ).then(function(result) {
     if (result.error) {
       // Display error.message in your UI.
       } else {
       // The payment has succeeded. Display a success message.
   }
 });
});

Возможно, я не понял, как работает handleCardPayment.Любая помощь приветствуется.

1 Ответ

1 голос
/ 09 июля 2019

При использовании handleCardPayment проблема не столько в том, что платеж может быть неудачным, а в том, что он может успешно , но ваш код не знает об этом .

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

Рассмотрим случай, когда:

  • клиент нажимает Оплатить

  • handleCardPayment называется

  • клиент видит диалог своего банка для аутентификации платеж

  • они делают это, и они считают, что их платеж теперь завершен, и они немедленно закрывают свой браузер.

В этом случае ваш код никогда не будет выполнен, но Stripe по-прежнему обрабатывает заряд. Таким образом, вы не знаете, что платеж произошел, и вы не можете выполнить заказ.

Вот почему так важно использовать веб-хуки, поэтому вы получите асинхронное уведомление о завершении платежа, даже если пользователь закрыл свой браузер в середине процесса, а ваш код после handleCardPayment так и не получил шанса на запуск. В качестве альтернативы вы можете использовать поток ручного подтверждения , где шаги разделены, а фактическая плата не обрабатывается до тех пор, пока ваш сервер не выполнит отдельный вызов API.

...