API заказов смарт-кнопок PayPal Игнорирование notify_url в объекте purchase_units - PullRequest
0 голосов
/ 17 апреля 2019

Мы отправляем заказ с помощью смарт-кнопки PayPal с их последним JS SDK (февраль 2019 года). Мы установили notify_url в объекте purchase_units в функции createOrder, как указано в документации API заказов.

Транзакция по-прежнему получает URL-адрес IPN из учетной записи, а не тот, который мы указали при создании транзакции.

Мы пробовали разные ключи, как это было предложено для стекового потока, такие как «NOTIFYURL», «NOTIFY_URL», «notifyurl» и «notify_url». Ни один из которых не работал.

Мы пытались удалить IPN из настроек учетной записи, но это было невозможно (notify_url всегда должен переопределять это в любом случае в соответствии с документацией).

paypal.Buttons({
        createOrder: function (data, actions) {
            return actions.order.create({
                intent: "CAPTURE",
                purchase_units: [{
                    amount: {
                        value: '@Model.Total.ToString("F")',
                    },
                    NOTIFYURL: "@notifyUrl"
                }]
            });
        },
        onApprove: function (data, actions) {
            return actions.order.capture().then(function (details) {
                return fetch('/umbraco/surface/PayPalPayment/process', {
                    method: 'post',
                    redirect: 'follow',
                    body: JSON.stringify({
                        OrderID: data.orderID,
                        PayerID: data.payerID,
                    }),
                    headers: {
                        'content-type': 'application/json'
                    }
                }).then(function (response) {
                    response.json().then(function (data) {
                        window.location.href = data.redirect;
                    })
                });
            }).catch(function (error) {
                window.location.href = '/umbraco/surface/PaymentFailed/PaymentFailed/?error=' + error;
            });
        }
    }).render('#paypal-button-container');

Примечание: переменные добавляются через синтаксис Razor, я подтвердил, что эти значения установлены в Fiddler правильно. Сообщение находится ниже, но URL IPN был отредактирован.

{"intent":"CAPTURE","purchase_units":[{"amount":{"value":"0.01","currency_code":"GBP"},"NOTIFYURL":"https://<REDACTED>/umbraco/surface/paypalipn/receive"}],"application_context":{}}

Мы должны видеть, что URL-адрес уведомления установлен, но при проверке идентификатора сообщения в истории IPN он пытается использовать URL-адрес IPN, найденный в учетной записи, а не предоставленный notify_url.

1 Ответ

0 голосов
/ 18 апреля 2019

URL уведомления не используется с API REST. Они не используют IPN. Они используют Webhooks . Вам нужно зарегистрировать веб-хуков в вашем приложении PayPal и соответственно настроить прослушиватель для этих хуков.

...