2011-09-03 17 views
5

Utilizamos Payments Pro NVP API de PayPal para proporcionar una tarjeta de crédito transparente y procesamiento de PayPal en nuestro sitio. Creamos un widget de carrito basado en iframe que nuestros clientes pusieron en en su sitio para que sus usuarios puedan comprar artículos y pagar a través de nuestra cuenta Paypal.Integración de PayPal con carrito basado en iframe

Mientras que las transacciones con tarjeta de crédito funcionan bien, estamos viendo problemas cuando un usuario intenta pagar con su cuenta de PayPal. La API utiliza una redirección al hacer clic en el logotipo de PayPal, pero luego parece que el código de PayPal ejecuta una secuencia de comandos de framebusting y la transacción no puede continuar.

Estoy buscando sugerencias o ejemplos de código para saber cómo manejar a los usuarios que desean pagar con PayPal mediante el iframe. Una opción es abrir una nueva ventana emergente, pero luego deja el diseño abierto a problemas, ya que el usuario puede alternar entre esa ventana y la ventana que contiene el iframe y es concebible que el carro se desincronice con lo que muestra la ventana de PayPal.

Respuesta

6

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.

1

PayPal Express Checkout/'Pagar con PayPal' en Pro Hosted no admite iframes por razones de seguridad. Abrir una ventana emergente (o establecer target = _parent) es la única manera de procesar esto correctamente.

+4

Porque: El marco externo puede tener un Textfield o Textarea invisible justo sobre el IFrame que atrapa las teclas que golpeas. –

0

Indica tu objetivo de forma que - target = "_ top"