Amazon Pay — Запрос между источниками заблокирован

Я видел и читал много сообщений о заблокированных запросах на перекрестное происхождение, но ни одно из них не имеет для меня особого смысла.

Я интегрирую Amazon Pay в сайт Sitecore/MVC, и все идет хорошо. Однако на странице, на которой я отображаю кнопку, я начал видеть ошибку. Если я открою инструменты разработчика в Chrome или Firefox, а затем загружу страницу, я увижу, что она красная:

ПОЛУЧИТЬ https://payments-uk-sandbox.amazon.com/merchantAc...tus?countryOfEstablishment=UK&ledgerCurrency=GBP 200 ОК, 66 мс Widgets.js (строка 43)

С последующим:

Запросы между источниками заблокированы: та же политика происхождения запрещает чтение удаленного ресурса по адресу https://payments-uk-sandbox.amazon.com/merchantAccount/AAAJJFJJJFJJF/accountStatus?countryOfEstablishment=UK&ledgerCurrency=GBP. (Причина: заголовок CORS «Access-Control-Allow-Origin» отсутствует).

Судя по тому, что я читаю и как я это понимаю, проблема на стороне Amazon. Это имело бы смысл, так как я не получал эту ошибку вчера, и я не изменил код на своей странице.

Может кто-нибудь сказать мне, если я имею это право? Могу ли я что-нибудь сделать? У меня есть контактное лицо по интеграции в Amazon, но им потребовалось 6 дней, чтобы ответить на последний вопрос, который у меня был, поэтому я не жду ответа в ближайшее время.


person Fred    schedule 28.06.2017    source источник


Ответы (1)


Вы должны вызвать это из бэкэнда и, если требуется, показать во внешнем интерфейсе. CORS появился потому, что Amazon не разрешает использовать этот метод во внешнем интерфейсе другого сайта из-за проблем с безопасностью.

Что нужно сделать: вам нужно создать на своем веб-сайте метод, который создает веб-запрос к amazon и возвращает некоторую информацию, и вы должны вызывать этот метод из js.

вот пример:

создать метод в контроллере

    public class HomeController : Controller
{

    public ActionResult GetAccountStatus()
    {
        var client = new WebClient();
        client.Encoding = Encoding.UTF8;

        var response = client.DownloadString("https://payments-uk-sandbox.amazon.com/merchantAccount/AAAJJFJJJFJJF/accountStatus?countryOfEstablishment=UK&ledgerCurrency=GBP");

        return response;
    }
}

чем из js по нажатию кнопки создать запрос на ваш сайт

$.ajax({method: "GET",url: "/home/GetAccountStatus"}).done(function( msg ) {
alert( "Data received: " + msg );});
person itikhomi    schedule 28.06.2017
comment
Хотите объяснить это немного лучше? - person Fred; 28.06.2017
comment
Код, который я использую, получен прямо от команды интеграции Amazon и работал без проблем до вчерашнего дня. - person Fred; 29.06.2017