Связать кнопки Paypal (клиент) с ответом сервера (PHP) с ajax - PullRequest
0 голосов
/ 03 мая 2020

Я хочу использовать Paypal на своем веб-сайте, поэтому я следую учебному пособию здесь . Пока все работает: скачал SDK с composer. Создан класс PayPalClient и CreateOrder.

. В конце этого раздела урока результат CreateOrder необходимо связать с кнопками, используя javascript:

    <script>
    paypal.Buttons({
        createOrder: function() {
            return fetch('test_paypal_create_paypal_transaction.php', {
                method: 'post',
                headers: {
                    'content-type': 'application/json'
                }
            }).then(function(res) {
                return res.json();
            }).then(function(data) {
                return data.orderID;
            });
        },
        onApprove: function(data, actions) {
            // This function captures the funds from the transaction.
            return actions.order.capture().then(function(details) {
                // This function shows a transaction success message to your buyer.
                alert('Transaction completed by ' + details.payer.name.given_name);
            });
        }
    }).render('#paypal-button-container');
    //This function displays Smart Payment Buttons on your web page.
</script>

И это файл php (test_paypal_create_paypal_transaction.php):

require __DIR__ . '/../../vendor/autoload.php';

use MyProject\PayPay\CreateOrder;

$response = CreateOrder::createOrder(false);
echo json_encode($response);

Класс CreateOrder работает правильно. Я могу поставить ответ от PayPal. Вопрос, похоже, не там. Я также вижу в Firefox -Dev-Tools, что XHR-запрос выполняется правильно, когда я нажимаю кнопку Paypal. Существует также ответ XHR, возвращающийся к кнопкам. Но, похоже, я использую неправильный формат или неправильную часть данных, которые возвращаются в fetch() -функцию.

Кто-нибудь задумался?

Спасибо за помощь !!!

Тим

1 Ответ

0 голосов
/ 03 мая 2020

Хорошо, я нашел решение.

Это:

[...]
    }).then(function(data) {
        return data.orderID;
    });
[...]

необходимо заменить следующим:

[...]
    }).then(function(data) {
        return data.result.id;
    });
[...]
...