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í:
Ver ejemplo en funcionamiento y realizar un pago ahora
Muchas Gracias por el tuto… me ha funciinado de maravilla
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?
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
Hola probe tu ejemplo y por mas pruebas que hice en el archivo ipn.php no recibo ninguna respuesta.
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
Hola,
Dejaré tu pregunta abierta por si alguien puede responderte.
Saludos
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.
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.
Hola,
Revisa la API de PayPal para ver que opciones presenta actualmente.
Saludos
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?
Hola,
Debes rellenar el input «return» con la url de tu sitio.
Saludos
Espectacular trabajo,
Tengo una pregunta, como lo ligas a tu cuenta de paypal?
Hola,
tu cuenta de paypal debe ser tipo negocios y debes agregar el email en el input name=»business»
Saludos
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
Hola,
Me gustaría poder responderte con certeza pero no tengo ni idea de lo que es «App Inventor». Si funciona con PHP no creo que tengas problemas.
Saludos
No me funcino me dice que paypal esta en mantenimiento por que presenta problemas
Hola,
Quizá tan sol ha sido un problema temporal. El sitio de demostración está funcionando.
Saludos
Wow eres todo un Crack! gracias por tu contribución.
Hola, podrias dejar el codigo fuente para descargar? estoy aprendiendo a como usar la api de paypal, muchas gracias
Hola,
El enlace para descargar ya está disponible en el artículo.
Saludos
[…] https://www.jose-aguilar.com/blog/implementar-una-pasarela-pago-paypal-utilizando-php/ […]