我目前正在制作一款游戏,它将包含一个基于API的后端,以及一个网络前端(在AngularJS中是单页应用)和几个移动设备(使用Cordova)。我计划通过主域名提供SPA以及CDN。 SPA(和主页)都是静态HTML / Javascript / CSS文件,因此动态的唯一部分是api。托管静态站点的“主服务器”的域名将采用example.com的样式,api的域名将为api.example.com
我想知道如何将Paypal集成到这个场景中。互联网似乎没有提供太多关于如何将它整合到S.P.A中的建议......或者我的google-fu可能会关闭。谢谢你的回复。
答案 0 :(得分:1)
以下是我处理这种情况的方法,
我有一个按钮,用paypal支付费用,然后点击我打开一个新窗口 - > window.open("/paypalCreate", width = "20px", height = "20px");
我在我的node.js服务器中捕获这个获取请求“/ paypalCreate”,并调用看起来像下面的创建方法
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窗口,从而从DB获取付款详细信息,您可以在此处以任何方式处理SPA。 我知道这是一个肮脏的黑客,但像你一样,我找不到更好的方法。如果这对您有用,或者您找到了更好的方法,请告诉我。
欢呼声, 赤丹