Мы интегрируем систему 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 и сопоставление всех заказов с платежами, а затем либо автоматическое возмещение, либо автоматическое заполнение заказа. Но я не уверен, рекомендуется ли это.