Открытие страницы оплаты без запроса разрешения пользователя

Я делал интеграцию с экварингом Сбербанка. При создании ордера их API возвращает ссылку на страницу оплаты.
Когда пользователь ввел сумму и нажал кнопку «Оплатить», мне нужно пользователя перевести по ссылке сбера на страницу оплаты.

Сначала я использовал в скрипте window.open и пользователь вынужден был реагировать на этот не совсем понятный и даже пугающий запрос.

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

В моем случае пользователь выполняет щелчок, поэтому у меня есть доверенное событие. Однако я теряю этот доверенный контекст, выполнив запрос Ajax.
Можно обойти это — выполнив синхронный запрос Ajax, который заблокирует ваш браузер во время его запуска, но сохранит контекст события.
Либо открыть новую вкладку с прелоадером до выполнения Ajax запроса, а потом в success сделать редирект.

$("body").on("click", "#AddFundSubmit", function (e) {
		e.preventDefault();
		if ($(this).text() != 'Пополнить') {
			return false;
		}
		if (!MinimalAddFund()) return false;
	  
		
		
		//Соберем массив параметров для оплаты
		var payParams = {
			'[0].Key': 'name',
			'[0].Value': $('input[name="name"]').val(),
			'[1].Key': 'cost',
			'[1].Value': $('input[name="cost"]').val(),
			'[2].Key': 'phone_number',
			'[2].Value': $('input[name="phone_number"]').val(),
		};
		
		//Перед отправкой запроса откроем новый таб и выставим прелоадер
		newWindow = window.open('about:blank', 'tempWindow');
		$(newWindow.document).find('body').append('<div class="loading">Загрузка страницы оплаты...</div>');
		
		$.ajax({
			url: "/Payment/Pay/",
			method: "POST",
			data: payParams,
			beforeSend: function () {
				$('#AddFundSubmit').text("Подождите...");
			},
			success: function (response) {
				$('#AddFundSubmit').text("Пополнить");
				$(newWindow.document).find('.loading').remove(); //скрываем прелоадер
				newWindow.location.replace(response); //делаем редирект на страницу оплаты                
			},
			error: function () {
				newWindow.close(); // В случае ошибки при получении урла закроем этот таб
				$('#AddFundSubmit').text("Пополнить");

			}
		});

		return false;

	});

Добавить комментарий