简体   繁体   中英

PayPal Smart Button Orders API Ignoring notify_url in purchase_units object

We are sending an order using the PayPal Smart Button with their latest JS SDK (February 2019). We have set the notify_url in the purchase_units object in the createOrder function as specified in the Orders API Documentation.

The transaction is still taking the IPN url from the account rather than the one we have provided upon creating the transaction.

We have tried different keys as suggested on stackoverflow such as 'NOTIFYURL', 'NOTIFY_URL', 'notifyurl' and 'notify_url'. None of which worked.

We have tried to remove the IPN from the account settings but this was not possible (notify_url should always override this anyway according to documentation).

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

Note: variables are added via Razor Syntax, I have confirmed that these values are being set correctly in Fiddler. Post is below but the IPN Url has been redacted.

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

We should be seeing the notify URL being set but when checking the message ID in the IPN history it is trying to use the IPN url found on the account rather than the notify_url that was provided.

Notify URL is not used with the REST APIs. They don't use IPN. They use Webhooks . You will need to register webhooks in your PayPal app and setup a listener for those hooks accordingly.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM