Como implementar una pasarela de pago con PayPal utilizando PHP

En este artículo vamos a ver como implementar una pasarela de pago con PayPal utilizando PHP.

Aunque en la mayoría de gestores de contenido y plataformas de Ecommerce ya disponen de un plugin o módulo con esta implementación, siempre puede ser interesante realizar una pasarela de pago a medida sin necesidad de utilizar ningún gestor de contenido ni plataforma de Ecommerce.

Existe varias formas de implementar una pasarela de pago utilizando PayPal. Nos centraremos en explicar una solución para implementar un sistema de pago de servicios o productos con PayPal indicando previamente un concepto e importe.

En un archivo PHP, crearemos un formulario simple donde tan solo vamos a demandar un concepto y el importe correspondiente.

<form class="form-amount" action="index.php" method="post">
    <div class="form-group">
        <label for="concept">Concepto</label>
        <input type="text" id="concept" name="concept" class="form-control" placeholder="Indicar un concepto">
    </div>
    <div class="form-group">
        <label for="amount">Importe</label>
        <input type="text" id="amount" name="amount" class="form-control" placeholder="Por ejemplo: 50.00">
    </div>
    <input class="btn btn-lg btn-primary btn-block" name="submitPayment" type="submit" value="Pagar">
</form>

Nuestro formulario para crear un pago tan solo necesita un concepto y el importe.

Que sucede cuando pulsamos en “Pagar”?

if (isset($_POST['submitPayment'])) {
 
    $amount = $_POST['amount']; 
    $concept = $_POST['concept'];
    $order = date('ymdHis');
    ?>
 
    <div class="loading">Un momento, por favor</div>
 
    <form id="realizarPago" action="https://www.paypal.com/cgi-bin/webscr" method="post">
        <input name="cmd" type="hidden" value="_cart" />
        <input name="upload" type="hidden" value="1" />
        <input name="business" type="hidden" value="your-email@paypal.com" />
        <input name="shopping_url" type="hidden" value="https://www.jose-aguilar.com/scripts/php/pago-con-paypal/" />
        <input name="currency_code" type="hidden" value="EUR" />
        <input name="return" type="hidden" value="https://www.jose-aguilar.com/scripts/php/pago-con-paypal/confirmation.php" />
        <input name="notify_url" type="hidden" value="https://www.jose-aguilar.com/scripts/php/pago-con-paypal/ipn.php" />
 
        <input name="rm" type="hidden" value="2" />
        <input name="item_number_1" type="hidden" value="<?php echo $order; ?>" />
        <input name="item_name_1" type="hidden" value="<?php echo $concept; ?>" />
        <input name="amount_1" type="hidden" value="<?php echo $amount; ?>" />
        <input name="quantity_1" type="hidden" value="1" /> 
 
    </form>
    <script>
    $(document).ready(function () {
        $("#realizarPago").submit();
    });
    </script>
<?php
}   
?>

Recibimos las variables del formulario y generamos con ellas el formulario con id=”realizarPago” que enviaremos directamente hacia PayPal.

En el action del formulario con id=”realizarPago” podrás ver que estamos empleando la ruta “https://www.paypal.com/cgi-bin/webscr”. Esto ruta se utiliza para saltar a PayPal en modo real. Para ponerlo en modo pruebas o sandbox la url debería ser: “https://www.sandbox.paypal.com/cgi-bin/webscr”

Es importante saber que el formulario con id=”realizarPago” es un formulario que no será visible y que se enviará nada más reciba las variables (concepto e importe) mediante jQuery.

Que variables estamos enviando a PayPal?

cmd ->Tipo de transacción. Queremos utilizar el carrito de la compra. Su valor es “_cart”.

upload -> Lo definimos a 1 para indicar que se trata de un carrito de la compra de un tercero.

business -> Se debe especificar el email de la cuenta de PayPal que recibe el dinero. La cuenta debe ser una cuenta Business.

shopping_url -> Se debe indicar la url del comercio.

currency_code -> Estamos especificando la moneda. En nuestro caso euros = EUR.

return -> Se debe espeficicar la página de confirmación del pago. Dede ser una url que indique que el pago se ha realizado correctamente.

notify_url -> Debe ser la URL a la que PayPal envía información sobre el pago, en forma de mensajes de notificación de pago instantáneo. En este archivo es donde debes gestionar el proceso final del pago. Por ejemplo, si todo ha ido bien, enviar un email al usuario con esta información y registrar el pago en la base de datos.

rm -> Es el método de envío del formulario a usar. 1 = GET, 2 = POST.

item_number_x -> Se trata del número de referencia del producto o servicio x.

item_name_x -> Se trata del nombre del producto o servicio x.

amount_x -> Se trata del importe del producto o servicio x.

quantity_x -> Se trata de la cantidad del producto o servicio x.

La x debe substituirse por un número y representa el número de item. Por ejemplo si queremos enviar 2 items a Paypal, lo deberemos enviar así:

<input name="item_number_1" type="hidden" value="10001" />
<input name="item_name_1" type="hidden" value="Producto Uno" />
<input name="amount_1" type="hidden" value="50.99" />
<input name="quantity_1" type="hidden" value="2" /> 
 
<input name="item_number_2" type="hidden" value="10002" />
<input name="item_name_2" type="hidden" value="Producto Dos" />
<input name="amount_2" type="hidden" value="60.45" />
<input name="quantity_2" type="hidden" value="2" />

Si por ejemplo, introdujimos como concepto “Servicio de mantenimiento” y como importe “200” €, en la parasarela de PayPal nos saldrá reflejado así:

paypal-php

Ver ejemplo en funcionamiento y realizar un pago ahora

Ver más documentación sobre la API de PayPal

 

1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (3 votos, promedio: 5,00 de 5)
Cargando…

Comparte en las redes sociales

Escrito por Jose Aguilar - Experto programador Prestashop y Wordpress.

One comment on “Como implementar una pasarela de pago con PayPal utilizando PHP

1 Pings/Trackbacks for "Como implementar una pasarela de pago con PayPal utilizando PHP"

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*