ccc

Paypal: Mandar un pedido desde una web a Paypal y obtener respuesta de Paypal

A Noviembre de 2017 este código sigue funcionando perfectamente:
<form name="_xclick" action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
  <input type="hidden" name="cmd" value="_xclick">  // puede ser "_cart" o "_xclick"
  <input type="hidden" name="upload" value="1">
  <input type="hidden" name="business" value="contactolsg@midominio.com">
  <input type="hidden" name="landing_page" value="login"> <!-- login ó billing para pedir datos tarjeta -->
  <input type="hidden" name="currency_code" value="EUR">

  <input type="hidden" name="item_name" value="DOMINIO 1">
  <input type="hidden" name="amount" value="25.30">
  <input type="hidden" name="item_number" value="234"> <!-- el id de ese item -->
  <input type="hidden" name="quantity" value="1">
  <input type="hidden" name="tax" value="10.50"> <!-- Impuestos -->


  <input type="hidden" name="return" value="http://www.midominio.com/paypal_bien.html"> <!-- currency -->
  <input type="hidden" name="cancel_return" value="http://www.midominio.com/paypal_mal.html"> <!-- currency -->
  <input type="hidden" name="notify_url" value="http://www.midominio.com/obtener_ipn.html"> <!-- currency -->
  <input type="hidden" name="custom" value="pedido_EDC_2345"> <!-- Sirve para identificar el pago Cuando se recibas la IPN -->

  <input type="image" src="http://www.paypal.com/es_XC/i/btn/btn_buynow_LG.gif" border="0" name="submit" alt="Make payments with PayPal">
</form>


Enviar múltiples items en el pedido:
<form name="_xclick" action="<?=$arr["url_sandbox"];?>" method="post" class='xclick'>
            <?=$arr["html_form"];?>
            <input type="hidden" name="cmd" value="_cart">  <!-- puede ser "_cart" o "_xclick" -->
            <input type="hidden" name="upload" value="1">
            <input type="hidden" name="business" value="<?=$arr["cuenta_business"];?>">
            <input type="hidden" name="landing_page" value="<?=$arr["tipo_pago"];?>"> <!-- login ó billing para pedir datos tarjeta -->
            <input type="hidden" name="currency_code" value="EUR">
            <?php
            foreach ($arr["pedidos"] as $clave=>$valor) {
               $clave++; // para q empiece en el 1
                ?>
                <input type="hidden" name="item_name_<?=$clave;?>" value="<?=$valor["item_name"];?>">
                <input type="hidden" name="amount_<?=$clave;?>" value="<?=$valor["amount"];?>">
                <input type="hidden" name="item_number_<?=$clave;?>" value="<?=$valor["item_number"];?>"> <!-- el id de ese item -->
                <input type="hidden" name="quantity_<?=$clave;?>" value="<?=$valor["quantity"];?>">
                <input type="hidden" name="tax_<?=$clave;?>" value="<?=$valor["tax"];?>"> <!-- Impuestos -->
                <?php
            }
            ?>
               
             <input type="hidden" name="return" value="<?=$arr["url_paypal_ok"];?>">
            <input type="hidden" name="cancel_return" value="<?=$arr["url_paypal_ko"];?>">
            <input type="hidden" name="notify_url" value="<?=$arr["url_ipn"];?>">
            <input type="hidden" name="custom" value="<?=$arr["custom"];?>>"> <!-- Sirve para identificar el pago Cuando se recibas la IPN -->

            <input type="image" src="http://www.paypal.com/es_XC/i/btn/btn_buynow_LG.gif" border="0" name="submit" alt="Pagar por Paypal">
        </form>


// Luego en la web que recoger (por ejemplo obtener_ipn.html)

<?php
  $req = 'cmd=_notify-validate';
  foreach ($_POST as $key => $value) {
     $value = urlencode(stripslashes($value));
     $req .= "&$key=$value";
     $$key = $value;

  }
  $header = "POST /cgi-bin/webscr HTTP/1.1\r\n";
  $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
  $header .= "Host: www.sandbox.paypal.com\r\n";  // www.paypal.com for a live site
  $header .= "Content-Length: " . strlen($req) . "\r\n";
  $header .= "Connection: close\r\n\r\n";

  //$fp = fsockopen ('www.sandbox.paypal.com', 80, $errno, $errstr, 30);
  $fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);
  $verify_url = 'https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_notify-validate&' . http_build_query( $_POST );

  if (stripos(file_get_contents( $verify_url ), "VERIFIED") === false) return false;

  if (!$fp) {
    fputs($fich_texto,"ERROR al obtener el IPN de Paypal<hr>".PHP_EOL);
  }
  else {
     fputs ($fp, $header . $req);
      while (!feof($fp)) {
  $res = fgets ($fp,1024);
  if (strstr($res,"VERIFIED") !== false) {
// Todo ha ido correcto en el pago y se pueden procesar los datos, para listarlos todos por ejemplo
foreach ($_POST as $key => $value) {
                  fputs($fich_texto,"El campo ".$key.": ".$value.PHP_EOL);
                }
  }
      }
  }
?>

1 comentario: