使用多个项目创建付款时如何从请求中读取项目?

Posted

技术标签:

【中文标题】使用多个项目创建付款时如何从请求中读取项目?【英文标题】:How to read items from request when creating payment with multiple items? 【发布时间】:2019-10-29 08:13:26 【问题描述】:

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

当我控制台记录paypal.payment.create() 的结果时,我希望 data 属性包含重定向链接,这些链接会将用户带到 PayPal 并显示交易信息。但是,数据属性是null

【问题讨论】:

【参考方案1】:

好吧,我想通了。 item_list 中的总价格必须等于传入“金额”部分的总和。有时最明显的问题是最难解决的......

【讨论】:

以上是关于使用多个项目创建付款时如何从请求中读取项目?的主要内容,如果未能解决你的问题,请参考以下文章

如何从一个 Xcode 项目访问多个 Firebase 数据库

SSH网上商城项目实战24Struts2中如何处理多个Model请求

如何使用贝宝订阅多个项目?

选择多个存储过程时如何强制VS2008“生成创建脚本到项目”到多个文件?

在 PayPal 付款中获取项目名称

vue cli4配置多个baseUrl环境,axios涉及多个请求域的情况