我正在使用Express.js服务器设置站点,并尝试实现 paypal-node-sdk npm模块。该网站将用于出售我的书籍。用户可以将书籍添加到购物车,然后使用PayPal单击结帐。单击后,这会将购物车中的内容发送到paypal.payment.create()
函数,该函数将用于创建用户的付款信息。
我从 paypal-node-sdk GitHub页面获取了样板代码。但是,当我尝试将自己的数据插入此代码时,该数据未发送到create()
函数。
我尝试过以各种方式重新格式化数据,并确保其与 paypal-node-sdk GitHub文档中提供的模板匹配。
我的程序使用ReactJS。
这是我调用PayPal API的方式:
checkoutWithPayPal = () => {
let items = [];
let item;
let cart = this.state.cart;
for (var book in cart) {
item = {
name: cart[book].title,
sku: book,
price: cart[book].price,
currency: "USD",
quantity: 1
}
items.push(item);
}
API.payUsingPayPal(items)
.then((res) => {
console.log(res);
for (var link in res.data.links) {
if (res.data.links[link].rel === "approval_url") {
window.open(res.data.links[link].href);
}
}
});
}
这是axios POST请求:
payUsingPayPal: function(items) {
return axios.post("/api/payPal/payUsingPayPal", items);
},
这是控制器应处理的请求并返回直接链接以将用户带到PayPal的外观:
payUsingPayPal (req, res) {
var create_payment_json = {
"intent": "sale",
"payer": {
"payment_method": "paypal"
},
"redirect_urls": {
"return_url": "http://return.url",
"cancel_url": "http://cancel.url"
},
"transactions": [{
"item_list": {
"items": req.body
},
"amount": {
"currency": "USD",
"total": "1.00"
},
"description": "This is the payment description."
}]
};
paypal.payment.create(create_payment_json, function (error, payment) {
if (error) {
console.log("Error processing payment", error);
}
// Used only to return axios promise
db.Books.findOne({})
.then(() => {
res.json(payment);
});
});
}
当我console.log paypal.payment.create()
的结果时,我希望data属性包含将用户带到PayPal并显示交易信息的重定向链接。但是,数据属性为null
。
答案 0 :(得分:0)
好吧,我知道了。 item_list中的价格总和必须等于传递到“金额”部分的总和。有时候最明显的问题最难解决。...