que pro plus direct developer php iframe paypal website-payment-pro

php - plus - Ejemplo de trabajo de PayPal Sitio web Payments Pro Hosted Solution Iframe?



paypal pro api (1)

Deseo usar el uso de paypals. Pagos en el sitio web Pro Hosted Solution para que podamos aceptar pagos a través de PayPal sin que nuestros usuarios sientan que abandonan el sitio y sin que tengamos que cumplir con PCI.

Queremos que esto funcione en este formato:

  • El usuario acierta la página de compra de un artículo y selecciona la cantidad y los hits. Comprar ahora.
  • La solicitud de AJAX se envía al servidor para validar la cantidad / calcular el total, etc.
  • La solicitud de AJAX devuelve la url de iframe
  • Iframe se completa con la página, y una vez que ha terminado de cargarse se muestra el iframe
  • El usuario completa los datos de la tarjeta de crédito y PayPal completa la transacción
  • La página de éxito que paypal redirige el iframe a llamadas javascript en la página principal para redirigir a otra url.

Entonces, tengo la página de selección de cantidad,
Sé cómo enviar los datos al servidor y validar la cantidad / calcular el total

Lo que no sé hacer es enviar este pedido a paypal para obtener la url del iframe.

Lo que he intentado hacer (como un ejemplo independiente muy básico) es:

<?php class paypal { private $APIuser; private $APIpass; private $APIsign; private $APIvers = ''74.0''; private $APIaddr = ''https://api-3t.sandbox.paypal.com/nvp''; private $post_params = array(); function __construct($APIuser, $APIpass, $APIsign){ $this->APIuser = $APIuser; $this->APIpass = $APIpass; $this->APIsign = $APIsign; } function param($name, $value = null){ $this->post_params[$name] = $value; return $this; } function getUrl(){ $post = $this->post_params; $post[''pwd''] = $this->APIpass; $post[''user''] = $this->APIuser; $post[''method''] = ''BMCreateButton''; $post[''version''] = $this->APIvers; $post[''signature''] = $this->APIsign; $post[''buttoncode''] = ''CLEARTEXT''; $post[''buttontype''] = ''PAYMENT''; $post_string = ''?''; foreach($post as $k => $v) $post_string .= $k.''=''.urlencode($v).''&''; $post_string = substr($post_string, 0, -1); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $this->APIaddr.$post_string); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $out = curl_exec($ch); curl_close($ch); $out = explode(''&'', $out); $final = array(); foreach($out as $k => &$v){ $v = explode(''='', $v); $final[$v[0]] = urldecode($v[1]); } return $final; } } //mock variables $price = 10.00; $APIu = ''xxxxxxxxxx''; $APIp = ''xxxxxxxxxx''; $APIs = ''xxxxxxxxxx''; $paypal = new paypal($APIu, $APIp, $APIs); $paypal->param(''L_BUTTONVAR0=subtotal'', $price*$_GET[''quantity'']); $paypal->param(''L_BUTTONVAR1=template'', ''templateD''); $resp = $paypal->getUrl(); ?> <iframe width="100%" height=100%" src="<?php echo $resp[''EMAILLINK'']; ?>"></iframe>

Lo cual al principio parece funcionar bien, hasta que ingrese los detalles de su tarjeta de crédito de los compradores de prueba y reciba un golpe con

Regrese a la página de pago y corrija la dirección.

¿Qué estoy haciendo mal / qué necesito para que esto funcione?


En realidad, pruebe la siguiente llamada a API y avíseme si esto funciona para usted:

MÉTODO = BMCreateButton &
BUTTONTYPE = PAGO Y
BUTTONCODE = TOKEN &
L_BUTTONVAR0 = subtotal = 11 y
L_BUTTONVAR1 = impuesto = 2 y
L_BUTTONVAR2 = envío = 3 y
L_BUTTONVAR3 = manejo = 4 &
L_BUTTONVAR4 = template = templateC