创建包含多个项目的付款时,如何从请求中读取项目?

时间:2019-06-14 16:56:52

标签: paypal paypal-rest-sdk

我正在使用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

1 个答案:

答案 0 :(得分:0)

好吧,我知道了。 item_list中的价格总和必须等于传递到“金额”部分的总和。有时候最明显的问题最难解决。...