У меня есть такая же проблема, как описано в сообщении Implementation of Paypal in single page application К сожалению, никто в этом обширном сообществе, похоже, не ответил :( С большим количеством ударов головой я смог реализовать грязный взломать, как показано ниже и я знаю, что это неправильное решение. Может ли любой из гуру любезно задуматься над этим вопросом и ответить/дать обратную связь, если мой грязный взлом - это правильный путь или его можно лучше реализовать. Ниже моего грязного взлома :( Большое спасибо . заранее за ваши ответы/комментарииИнтеграция с PayPal с одной страницей
у меня есть кнопка, чтобы сказать получку с PayPal и OnClick открыть новое окно ->window.open("/paypalCreate", width = "20px", height = "20px");
и я захвачу этот запрос получить «/ paypalCreate» в моем node.js сервер и вызовите создать метод, который выглядит Лик ниже
exports.create = function (req, res) {
//Payment object
var payment = {
//fill details from DB
};
//Passing the payment over to PayPal
paypal.payment.create(payment, function (error, payment) {
if (error) {
console.log(error);
} else {
if (payment.payer.payment_method === 'paypal') {
req.session.paymentId = payment.id;
var redirectUrl;
for (var i = 0; i < payment.links.length; i++) {
var link = payment.links[i];
if (link.method === 'REDIRECT') {
redirectUrl = link.href;
}
}
res.redirect(redirectUrl);
}
}
});
};
This redirects user to paypal and once user confirms or cancels payment, the redirect urls are called. And in the success redirect url I capture the payment details into the databse and render a html in this opened window with the confirmation.
exports.execute = function (req, res) {
var paymentId = req.session.paymentId;
var payerId = req.param('PayerID');
// 1. if this is executed, then that means the payment was successful, now store the paymentId, payerId and token into the database
// 2. At the close of the popup window open a confirmation for the reserved listing
var details = {"payer_id": payerId};
paypal.payment.execute(paymentId, details, function (error, payment) {
if (error) {
console.log(error);
} else {
//res.send("Hell yeah!");
res.render('paypalSuccess', {payerId: payerId, paymentId: paymentId});
}
});
};
После того, как пользователь закрывает открытое окно, в котором PayPal в настоящее время обработал оригинал окна SPA будет обновлен и таким образом получать информацию об оплате из БД и здесь вы можете справиться SPA, каким бы вы ни хотели. Я знаю, что это грязный хак, но, как и вы, я не мог найти лучшего способа. Пожалуйста, дайте мне знать, если это сработает для вас или у вас есть лучший способ сделать это.
веселит, Chidan
Привет, Бен, спасибо. У меня есть 2 вопроса, как выглядит ваш файл конфигурации? и это будет работать для оплаты по кредитным картам, где нет перенаправления на сайт paypal, но как я могу обработать перенаправление на сайт paypal и вернуться к успеху или отменить URL? –
Я обновил свой ответ на два вопроса. Если это решило вашу проблему, примите это как принятый ответ. благодаря – BenH