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 e-commerce 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 e-commerce.

De esta forma, existen 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.

Formulario

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.

Procesamiento del pago con PHP

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
}   
?>

Variables del formulario a enviar a PayPal

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" />

Resultado

Ahora, 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

Descargar

Autor
Escrito por Jose Aguilar - Director ejecutivo y tecnológico en JA Modules. Experto programador PrestaShop y Experto programador WordPress.
Te ha servido? Valora esta entrada!
(16 votos, promedio: 5 de 5)
Comparte en las redes sociales
¿Buscas trabajo de programador?

21 respuestas a “Como implementar una pasarela de pago con PayPal utilizando PHP”

  1. Mohmmed dice:

    Muchas Gracias por el tuto… me ha funciinado de maravilla

  2. Kevin del Cid dice:

    Amigo conoces alguna forma de que el pago sea obtenido, que se haga un descuento de comision y luego sea transferido a la cuenta de otra persona similar a como lo hace ebay?

    • Jose Aguilar dice:

      Hola Kevin,

      La API de paypal permite hacer esto pero comento que es complejo y requiere que conozcas bien la api de paypal para marketplace.

      En cualquier caso, te adelanto que posible si que es pero quizá tienes que hacerte partner de paypal para que acepten tus aplicaciones con este objetivo.

      Saludos

  3. CARLOS dice:

    Hola probe tu ejemplo y por mas pruebas que hice en el archivo ipn.php no recibo ninguna respuesta.

  4. Ramon dice:

    Genial tu aportación!! 👍👍👍

    Habrá alguna manera de en la variable notify_url mandar un valor para indicar que pago especifico se realizo??

    Gracias y saludos

  5. Sisco dice:

    Hola José, te agradezco tu aplicación para recibir pagos con paypal.
    Lo he probado y de momento no ha funcionado correctamente.
    He abierto una cuenta Business en sandbox.paypal pero no he visto ningún movimiento en el apartado transacciones.
    Tengo que activar PayPal Checkout ?

    Un saludo y de nuevo muchas gracias por tus comentarios.

  6. mario alberto hernandez dice:

    gestoy viendo tu ejemplo, pero veo que solo es posible pagar utilizando tu saldo o cuenta de paypal, pero en tu imagen veo que aparece la opcion de pagar con tarjeta de credito o debido, hay alguna forma de poner eso, es que es lo que requiero en mi web, que pueda ser con la misma cuenta de paypal o por medio de una tarjeta.

  7. juan dice:

    buenas tardes, gracias de antemano por esta explicación me ayudo mucho.
    pregunta:
    una vez completado el pago como lo redirijo a mi sitio web?

  8. carlos dice:

    Espectacular trabajo,

    Tengo una pregunta, como lo ligas a tu cuenta de paypal?

  9. Elías Revuelta Iturraspe dice:

    Hola
    Estoy buscando información para integrar paypal en una app a crear con App Inventor y deseaba saber si su articulo y código es compatible.
    Gracias por su atención y un saludo

  10. Alexander dice:

    No me funcino me dice que paypal esta en mantenimiento por que presenta problemas

  11. Luis Antonio dice:

    Wow eres todo un Crack! gracias por tu contribución.

  12. jack dice:

    Hola, podrias dejar el codigo fuente para descargar? estoy aprendiendo a como usar la api de paypal, muchas gracias

Deja una respuesta

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Ver más sobre