【发布时间】:2016-10-27 10:15:48
【问题描述】:
我有一个 Web 应用程序,UI 上有 AngularJS,后端有 NodeJS。
我想实现 Paypal In-Context Checkout 功能,但我不太明白这样做的步骤是什么,文档非常混乱。
谁能解释一下实现这一目标的步骤,前端需要做什么以及后端需要做什么。 谢谢。
【问题讨论】:
我有一个 Web 应用程序,UI 上有 AngularJS,后端有 NodeJS。
我想实现 Paypal In-Context Checkout 功能,但我不太明白这样做的步骤是什么,文档非常混乱。
谁能解释一下实现这一目标的步骤,前端需要做什么以及后端需要做什么。 谢谢。
【问题讨论】:
三种方法
1 您可以使用客户端休息。 2 你可以使用服务器端休息。 3 你可以使用braintree sdk。
对于第一步,paypal 有 checkout.js。 对于第二步,使用 paypal rest api 基本上是后端任务。
第一步和第二步的过程非常相似。
const paypal = require('paypal-rest-sdk');
const payments = paypal.v1.payments;
let env = new paypal.core.SandboxEnvironment('app-id', 'secret');
let client = new paypal.core.PayPalHttpClient(env);
创建如下付款发布请求
var create_payment_json = {
'intent': 'sale',
'payer': {
'payment_method': 'paypal'
},
'redirect_urls': {
'return_url':
'http://localhost:4150/test/paymentSuccess',
'cancel_url': 'http://cancel.url'
},
'transactions': [{
'item_list': {
'items': [
{
'name': 'item',
'sku': 'item',
'price': '1.00',
'currency': 'USD',
'quantity': 1
}
]
},
'amount': {
'currency': 'USD',
'total': '1.00'
},
'description': 'This is the payment'
}]
};
let request = new payments.PaymentCreateRequest();
requestt.requestBody(create_payment_json);
let mrrrr;
client.execute(requestt).then((response) => {
console.log(response.statusCode);
console.log(response.result);
_.map(response.result.links, (value) => {
if (value.rel === 'approval_url') {
// reply.redirect(response.result.links[i].href);
mrrrr = value.href;
console.log('mrrrr', mrrrr);
// return reply.redirect(mrrrr);
}
});
}).catch((error) => {
console.error(error.statusCode);
console.error(error.message);
});
一旦创建付款,您将获得 url,重定向该 url 并使用 paypal 进行付款,它将使用查询参数支付 id 和 payerId 返回对成功 url 的调用。
现在成功写下代码
console.log('this is query parameters', request.query);
const payerID = request.query.PayerID;
const paymentID = request.query.paymentId;
const execute_payment_json = {
'payer_id': payerID
};
let ww = new payments.PaymentExecuteRequest(paymentID);
ww.requestBody(execute_payment_json);
client.execute(ww).then((response) => {
console.log('success', response.statusCode);
console.log('success', response.result);
}).catch((error) => {
console.error(error.statusCode);
console.error(error.message);
});
【讨论】: