Как обработать платеж PayPal Checkout, если на нашем сервере произошла ошибка API подтверждения - PullRequest
0 голосов
/ 20 марта 2019

Мы интегрируем систему Checkout Integration на стороне клиента PayPal для приема платежей на нашем веб-сайте. Это можно найти здесь:

https://developer.paypal.com/docs/checkout/integrate/#6-verify-the-transaction

После того, как PayPal совершил платеж и одобрил его, нам нужно позвонить на наш сервер, чтобы подтвердить транзакцию и сохранить ее в нашей базе данных. Этот код можно найти ниже, обратите внимание на часть «Позвоните на сервер, чтобы сохранить транзакцию».

<script>
  paypal.Buttons({
    createOrder: function(data, actions) {
      return actions.order.create({
        purchase_units: [{
          amount: {
            value: '0.01'
          }
        }]
      });
    },
    onApprove: function(data, actions) {
      return actions.order.capture().then(function(details) {
        alert('Transaction completed by ' + details.payer.name.given_name);
        // Call your server to save the transaction
        return fetch('/paypal-transaction-complete', {
          method: 'post',
          body: JSON.stringify({
            orderID: data.orderID
          })
        });
      });
    }
  }).render('#paypal-button-container');
</script>

Теперь, в вышеприведенном случае, что произойдет, если вызов "/ paypal -action-complete" завершится неудачно? тайм-аут сеанса или потеря соединения с интернетом? Например, при интеграции Stripe деньги «одобряются» на стороне клиента, а затем подтверждаются / списываются в нашем API только с «/ stripe -action-complete». Если есть ошибка, мы фактически не берем деньги.

В PayPal деньги списываются до вызова API, поэтому существует небольшая возможность, с которой мы взимаем плату с пользователей, но они не получают оплаченный заказ в базе данных. Как бы мы лучше всего справились с этим? Одним из вариантов будет вызов API PayPal и сопоставление всех заказов с платежами, а затем либо автоматическое возмещение, либо автоматическое заполнение заказа. Но я не уверен, рекомендуется ли это.

1 Ответ

0 голосов
/ 02 мая 2019

Как для PayPal, так и для аналогичных проблем с Stripe Checkout, эту проблему можно решить с помощью WebHooks.

https://developer.paypal.com/docs/integration/direct/webhooks/rest-webhooks/#

...