#javascript #paypal
#javascript #paypal
Вопрос:
Я смотрю на PayPal Checkout, как описано в примере кода для PayPal Checkout. В этой форме платежной страницы PayPal задействовано только 2 метода JavaScript: CreateOrder и onApprove.
Я ожидал способа указания IPN, который легко доступен с помощью стандартной кнопки PayPal.
Вопрос
Доступна ли функция IPN в PayPal Checkout, и если нет, то каков наилучший способ реализации чего-то вроде IPN?
Я подумываю об использовании примера кода, как показано ниже, для имитации функциональности функции IPN.
onApprove: function(data, actions) {
return actions.order.capture().then(function(details) {
// Show a success message to the buyer
//alert('Transaction completed by ' details.payer.name.given_name '!');
//IPN implementation as below
//Instead of showing a message to the buyer, redirect to a success page
//and pass query string variables to pass data from payment page top success page
window.location = "https://www.somesitexyzabc.com/success?s=1amp;d=abc";
});
Ответ №1:
IPN очень старый. PayPal Checkout with Orders v2 не использует IPN. Для этого нет цели.
Для записи транзакций на вашем сервере выполните захват на вашем сервере.
Вам понадобятся два маршрута, один для «Создания заказа» и один для «Заказа захвата», описанные здесь: https://developer.paypal.com/docs/business/checkout/server-side-api-calls/#server-side-api-calls
Соедините два ваших маршрута со следующим кодом утверждения: https://developer.paypal.com/demo/checkout/#/pattern/server
После успешного захвата на вашем сервере сделайте все, что вам нужно, с имеющейся у вас информацией, прежде чем возвращать JSON в функцию onApprove.
Комментарии:
1. Спасибо. Похоже, что в PayPal Checkout, в отличие от стандарта PayPal, страница оплаты находится на веб-сайте клиента, а не на стороне PayPal. Если это правильно, то мы узнаем, прошел ли платеж успешно, если выполняется функция onApprove. Это верно? Тогда мой предложенный подход также будет работать.
2. Функция onApprove и
actions.order.capture()
является кодом на стороне клиента. Используйте интеграцию с сервером для уведомления.3. В моем исходном примере кода на developer.paypal.com/demo/checkout/#/pattern/client , в функции OnApprove URL-адрес не извлекается. Но в примере кода, который вы упомянули, есть URL. Это сбивает с толку, поскольку я не уверен, нужно ли извлекать URL-адрес в функции OnApprove?
4. Я думаю, что в вашем ответе вы упомянули решение, использующее код на стороне сервера, но в примере кода, который у меня есть в моем вопросе, используется только код на стороне клиента. Итак, похоже, что я мог бы просто использовать клиентский код только для paypal checkout, а не серверный код для вызова API PayPal. Это правильно?
5. Не зависите от клиента в уведомлении вашего сервера после завершения транзакции.