Tanto de las respuestas anteriores son correctas. Sin embargo, el soporte técnico de PayPal proporcionó un conjunto más completo de instrucciones que he proporcionado a continuación. Con suerte, ellos ayudarán a alguien más.
Modifique sus llamadas SetExpressCheckout para que los parámetros RETURNURL y CANCELURL apunten a una página de devolución especial que se encargará de cerrar la ventana emergente y continuar el proceso normal de pago (más sobre esto más adelante).
A continuación, modifique la secuencia de comandos que redirige al comprador al sitio web de PayPal. Normalmente, esta secuencia de comandos devolvería una respuesta "302 Encontrado" (o similar) al navegador, indicando al navegador que debería seguir un redireccionamiento a alguna otra página. (En PHP, esto generalmente se logra con la función "encabezado", por ejemplo, header(“Location: https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=$token”);
). En su lugar, este script debe emitir el siguiente código HTML/JavaScript (reemplazando "TOKEN" con el token que recibió de PayPal). Esto abrirá una ventana emergente donde el comprador puede continuar el proceso de pago en PayPal. Puede insertar texto adicional, como desee, para indicar al comprador que debe usar la ventana emergente para completar su proceso de pago. Para evitar problemas con los bloqueadores de ventanas emergentes, puede crear un enlace o botón en su página, indicando al comprador que debe hacer clic en el enlace/botón para continuar y usar este código para el manejador "onClick" del objeto.
<script type="text/javascript"> window.open("https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=TOKEN","_blank","width=1024,height=768,location=1,resizable=1,scrollbars=1,status=1",true); </script>
Ahora, cree una nueva página en la que se ejecuta el siguiente código (o similar - este código se basa en PHP, realice los ajustes necesarios para el idioma que está utilizando). Este código cerrará la ventana emergente y continuará el proceso de pago en su iframe existente. El parámetro RETURNURL de su llamada SetExpressCheckout debe apuntar a esta página. Reemplace "paypalreturn.php" con el script que usa actualmente para manejar a los compradores que regresan a su carrito de compras desde PayPal.
<html>
<body>
<script type="text/javascript">
window.opener.location="http://www.regattacentral.com/paypalreturn.php?token=<? echo $_REQUEST["token"]; ?>&PayerID=<? echo $_REQUEST["PayerID"]; ?>";
window.close();
</script>
</body>
</html>
Por último, repita este paso para su controlador CANCELURL.
• La compra se completa dentro del iframe y se muestra la identificación de la transacción.
Porque: El marco externo puede tener un Textfield o Textarea invisible justo sobre el IFrame que atrapa las teclas que golpeas. –