Кнопка PayPal JavaScript SDK открывает окно about:blank#blocked в шаблоне Django, но не в локальном HTML-файле

Я пытался интегрировать кнопки PayPal на свой сайт Django, но у меня постоянно возникает проблема, когда всплывающее окно PayPal отображается как about:blank#blocked. Я вижу эту ошибку в консоли:

popup_open_error_iframe_fallback 
{err: 'n: Can not open popup window - blocked\n    at Ie (…owser=false&allowBillingPayments=true:1342:297830', timestamp: '1644780862712', referer: 'www.sandbox.paypal.com', sdkCorrelationID: 'f12370135a997', sessionID: 'uid_d36969c1b2_mtk6mja6mzy', …}

Я не понимаю, что проблема не возникает, если я просто открываю сам HTML-файл в браузере... Скрипт выглядит следующим образом:

<!-- Set up a container element for the button -->
<div id="paypal-button-container" class='text-center mt-2'></div>

<!-- Include the PayPal JavaScript SDK -->
<script src="https://www.paypal.com/sdk/js?client-id=blahblahmyid&currency=EUR"></script>

<script>
    // Render the PayPal button into #paypal-button-container
    paypal.Buttons({
        locale: 'it_IT',
        style: {
            color: 'gold',
            shape: 'rect',
            layout: 'vertical',
            label: 'pay'
        },

        // Set up the transaction
        createOrder: function(data, actions) {
            return actions.order.create({
                purchase_units: [{
                    amount: {
                        value: '88.44'
                    }
                }]
            });
        },

        // Finalize the transaction
        onApprove: function(data, actions) {
            return actions.order.capture().then(function(orderData) {
                // Successful capture! For demo purposes:
                console.log('Capture result', orderData, JSON.stringify(orderData, null, 2));
                var transaction = orderData.purchase_units[0].payments.captures[0];
                alert('Transaction '+ transaction.status + ': ' + transaction.id + '\n\nSee console for all available details');

                // Replace the above to show a success message within this page, e.g.
                // const element = document.getElementById('paypal-button-container');
                // element.innerHTML = '';
                // element.innerHTML = '<h3>Thank you for your payment!</h3>';
                // Or go to another URL:  actions.redirect('thank_you.html');
            });
        }


    }).render('#paypal-button-container');
</script>

В чем проблема? Я не понимаю.

Невозможно открыть всплывающее окно - заблокировано

Попробуйте использовать другой браузер с настройками по умолчанию. Похоже, что в используемом вами браузере настроено или установлено что-то нестандартное, что блокирует проверку.

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

Я не могу говорить за OP, но у меня недавно возникла такая же проблема. Интересно, что это происходит только если я просматриваю страницу (или демо-страницу paypal) через django и на localhost, если я просматриваю ее по внешнему адресу, то проблем нет. Так что это указывает на настройки сервера django, но я все еще пытаюсь выяснить это.

Для django 4.0 settings.py добавить

SECURE_CROSS_ORIGIN_OPENER_POLICY='same-origin-allow-popups'

Вернуться на верх