Mam dokładnie ten sam problem, co opisano w poście Implementation of Paypal in single page application Niestety, nikt w tej ogromnej społeczności nie wydaje się odpowiedzieć :( Z dużą ilością uderzeń głową udało mi się zaimplementować brudny hack, jak poniżej i wiem, że to nie jest właściwe rozwiązanie, czy któryś z guru uprzejmie zastanowiłby się nad tym pytaniem i odpowiedział/dałby informację zwrotną, jeśli mój brudny hack jest właściwy lub może być lepiej zaimplementowany poniżej mojego brudnego hacka :( Wielkie dzięki z góry za twoje odpowiedzi/komentarzeintegracja paypal z pojedynczą aplikacją strony
Mam przycisk, aby powiedzieć pay with paypal i onClick Otwieram nowe okno ->window.open("/paypalCreate", width = "20px", height = "20px");
i przechwytuję to otrzymuję prośbę "/ paypalCreate" w moim node.js Serwer i nazywają stworzyć metodę, która wygląda liek poniżej
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});
}
});
};
Gdy użytkownik zamyka otwarte okno, w którym paypal był obsługiwane orginal okno SPA będzie odświeżony, a tym samym uzyskanie szczegółów płatności z DB i tutaj można obsługiwać SPA w jakikolwiek sposób chcesz. Wiem, że to brudny hack, ale jak ty nie mogłem znaleźć lepszego sposobu. Daj mi znać, jeśli to działa dla Ciebie lub jeśli znajdziesz lepszy sposób na zrobienie tego.
okrzyki, Chidan
Witaj Ben, dzięki. Mam jednak 2 pytania, jak wygląda twój plik konfiguracyjny? a to działałoby na płatności kartami kredytowymi, gdzie nie ma przekierowania na stronę paypal, ale jak mogę obsłużyć przekierowanie do strony paypal iz powrotem do sukcesu lub anulować URL? –
Zaktualizowałem moją odpowiedź na te dwa pytania. Jeśli to rozwiązało problem, zaakceptuj go jako zaakceptowaną odpowiedź. Dzięki – BenH