He estado tratando de integrar los botones de PayPal en mi sitio web de Django, pero sigo teniendo este problema en el que la ventana emergente de PayPal aparece como: en blanco # bloqueado. Puedo ver este error en la consola:
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', …}Lo que no entiendo es que el problema no está allí si solo abro el archivo HTML en un navegador... El script se ve así:
<!-- 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¤cy=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, eg // 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>Cuál es el problema ? No entiendo.
Hay una nueva característica en Django 4.0 que sigue a la adición del encabezado COOP en los navegadores más nuevos que, según tengo entendido, evita que los sitios remotos abran una ventana en el mismo contexto de navegación.
La configuración predeterminada de SECURE_CROSS_ORIGIN_OPENER_POLICY en django aísla el contexto de navegación solo al origen del documento actual. Configurarlo en el mismo origen-permitir-ventanas emergentes permite que la ventana emergente de PayPal se abra en el contexto actual.
Consulte https://docs.djangoproject.com/en/4.0/ref/middleware/#cross-origin-opener-policy
TLDR; establecer SECURE_CROSS_ORIGIN_OPENER_POLICY='permitir ventanas emergentes del mismo origen'
Para django 4.0 settings.py agregar
SECURE_CROSS_ORIGIN_OPENER_POLICY='permitir ventanas emergentes del mismo origen'
No se puede abrir la ventana emergente - bloqueada
Pruebe con un navegador diferente con la configuración predeterminada. Parece que el que está utilizando tiene algo no estándar configurado o instalado que está bloqueando el proceso de pago.