Как прочитать товары из запроса при создании оплаты с несколькими товарами? - PullRequest
0 голосов
/ 14 июня 2019

Я настраиваю сайт с помощью сервера Express.js и пытаюсь реализовать модуль paypal-node-sdk npm.Сайт будет использоваться для продажи моих книг.Пользователь может добавить книги в корзину, а затем нажать Оформить заказ с PayPal.При щелчке это должно отправить содержимое корзины в функцию paypal.payment.create(), которая будет использоваться для создания платежной информации пользователя.

Я взял шаблонный код со страницы paypal-node-sdk GitHub.Однако, когда я пытаюсь вставить свои собственные данные в этот код, они не отправляются функции create().

Я попытался переформатировать данные различными способами и убедился, что они соответствуют шаблону, указанному в paypal-node-sdk Документация GitHub.

Моя программа использует ReactJS,

Вот как я вызываю API PayPal:

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);
                }
            }
        });
}

Вот запрос POST axios:

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 и отобразит информацию о транзакции.Однако свойство data равно null.

1 Ответ

0 голосов
/ 19 июня 2019

Ну, я понял это. Сумма цен в item_list должна равняться сумме, переданной в раздел «сумма». Иногда самые очевидные проблемы труднее всего решить ....

...