Мы отправляем заказ с помощью смарт-кнопки 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.