Mi Blog
👉 Cómo integrar una pasarela de pago TPV RedSys con PHP

Cómo integrar una pasarela de pago TPV RedSys con PHP

 
(23 votos)

Integrar tu pasarela de pago TPV RedSys con PHP es realmente sencillo. En el siguiente "tutorial" os voy a enseñar lo sencillo que resulta configurar la pasarela de pago para comprar productos en una página Web e integrarlo con PHP. Es obvio que faltan muchas cosas para montar una tienda online, pero el objetivo de este tutorial es solamente la parte de integración. Si quieres aprender como se hace, no lo dudes y sigue leyendo.

⬇️ Compra en Amazon el hardware que utilizo ⬇️

🔥 ¡DESCÚBRELOS! 🔥

 

 

¿QUÉ ES TPV

Un terminal punto de venta (TPV) es un dispositivo que ayuda en la tarea de gestión de un establecimiento comercial de venta al público que puede contar con sistemas informáticos especializados mediante una interfaz accesible para los vendedores.

Los TPV permiten la creación e impresión del ticket de venta mediante las referencias de productos, realizan diversas operaciones durante todo el proceso de venta, así como cambios en el inventario. También generan diversos reportes que ayudan en la gestión del negocio. Los TPV se componen de una parte hardware (dispositivos físicos) y otra software (sistema operativo y programa de gestión).

Se denominan TPV virtual a la plataforma de pago que se instala y configura en Internet para gestionar los pagos con tarjetas de débito/crédito para facilitar los pagos de los clientes a la hora de comprar productos.

 

 

1.- ELEMENTOS UTILIZADOS EN ESTE TUTORIAL

  • Servidor con Linux+Apache+PHP
  • Datos de configuración del TPV La Caixa
  • Tarjeta de débito "demo" para simular pagos en el TPV

 

 

2.- DOCUMENTACIÓN OFICIAL Y API PHP DE REDSYS

En la zona de Descargas de la web http://www.redsys.es/ tienes que descargarte el fichero correspondiente a la (API PHP) http://www.redsys.es/comercio-electronico/modulos/API_PHP.zip

Debes descomprimir dicho fichero y guardar el contenido en tu servidor Web, por ejemplo en www.tuweb.com/tpv/

El documento oficial de Integración del TPV con diferentes APIs, entre ellas la de PHP , puedes encontrarlo en la siguiente dirección: Manual integración para conexión por Redirección.pdf

 

 

3.- FORMULARIO DE PRUEBAS

En esta primera imagen se ve el formulario de pruebas que he creado para la pasarela de pago de La Caixa con RedSys + PHP. Como se puede ver hay 3 campos:

  • Cantidad: Introducimos la cantidad en Euros, por ejemplo 375
  • Nº Factura: Aquí introduciremos el número de factura ó pedido. No se pueden repetir los números de pedidos.
  • Concepto: Introduciremos el concepto, el nombre o lo que queremos.

TPV RedSys con PHPFormulario de Pago

En esta siguiente ilustración se ven los datos correctamente cumplimentados. Haremos click en "IR AL PASO 2":

TPV RedSys con PHPFormulario cumplimentado

En esta pantalla mostramos la confirmación de los datos que hemos introducido en el formulario. Como se puede ver el precio es correcto 375€ y el número de factura ó pedido también está correcto. Este paso lo he puesto solamente para verificar los datos introducidos en el formulario. Haremos click en "PAGO SEGURO CON TARJETA" para pasarle estos datos al TPV de La Caixa de RedSys:

TPV RedSys con PHPDatos de confirmación

La siguiente pantalla corresponde con el TPV de La Caixa donde podemos ver los datos correctamente enviados. Deberemos introducir nuestro número de tarjeta, la caducidad y el Cod. Seguridad:

TPV RedSys con PHPTPV La Caixa

A continuación, nos pide el código de identificación de nuestra tarjeta que introduciremos y aceptaremos:

TPV RedSys con PHPAceptar pago

Y por último se muestra un resultado OK o NO OK de nuestra operación. Si ha salido todo "ok", al darle a finalizar nos hará una redirección a nuestra página configurada con al variable $urlweb_ok. Si ha ocurrido un error, nos redireccionará a la web asociada a la variable $urlweb_nok:

TPV RedSys con PHPPago Aceptado

 

 

4.- CÓDIGO FUENTE DE LA PÁGINA

El código fuente completo del fichero "index.php" es el siguiente y no merece de mucha explicación ya que son varios "ifs" en PHP y los datos de configuración del TPV que deberéis rellenar con vuestros datos.

<!DOCTYPE HTML>
<html>
<head>
<title>PRUEBA TPV</title>
</head>
<body style="text-align:center">

< ?php
if ($_POST['submitPayment']) {
?><h3>PASO.2) Confirmar y pagar en pasarela de pago:</h3>
<p>Vas a realizar un pago de:</p>
<center><h1 style="color:RED">< ?php echo $_POST['cantidad'] . "€"?></h1></center>
<center><h3>Factura Nº: < ?php echo $_POST['factura'];?></h3></center>
< ?php } else { ?>
<h3>PASO.1) Introduce los datos y tipo de reserva:</h3>
< ?php }?>
<!-- PASARELA DE PAGO -->
< ?php
if ($_POST['submitPayment']) {
include "apiRedsys.php";
$miObj = new RedsysAPI;
// $url_tpv = 'https://sis-t.redsys.es:25443/sis/realizarPago'; // PASARELA DE PRUEBAS
$url_tpv = 'https://sis.redsys.es/sis/realizarPago'; // PASARELA DE PRODUCCIÓN
$version = "HMAC_SHA256_V1";
$clave = 'CLAVE'; //poner la clave SHA-256 facilitada por el banco
$name = 'EMPRESA';
$code = 'CODIGO ';
$terminal='1';
$order=$_POST['factura'] . $_POST['tipodepago'];
$totalpedido=$_POST['cantidad'];
$amount=$totalpedido*100;
$currency = '978';
$consumerlng = '001';
$transactionType = '0';
$urlMerchant = 'https://www.raulprietofernandez.net/tpv/validacion.php'; // URL DEL COMERCIO CMS
$urlweb_ok = 'https://www.raulprietofernandez.net/tpv/ok.php'; // URL OK
$urlweb_ko = 'https://www.raulprietofernandez.net/tpv/no-ok.php'; // URL NOK
$concepto = $_POST['concepto'];

$miObj->setParameter("DS_MERCHANT_AMOUNT",$amount);
$miObj->setParameter("DS_MERCHANT_CURRENCY",$currency);
$miObj->setParameter("DS_MERCHANT_ORDER",$order);
$miObj->setParameter("DS_MERCHANT_MERCHANTCODE",$code);
$miObj->setParameter("DS_MERCHANT_TERMINAL",$terminal);
$miObj->setParameter("DS_MERCHANT_TRANSACTIONTYPE",$transactionType);
$miObj->setParameter("DS_MERCHANT_MERCHANTURL",$urlMerchant);
$miObj->setParameter("DS_MERCHANT_URLOK",$urlweb_ok);
$miObj->setParameter("DS_MERCHANT_URLKO",$urlweb_ko);
$miObj->setParameter("DS_MERCHANT_MERCHANTNAME",$name);
$miObj->setParameter("DS_MERCHANT_CONSUMERLANGUAGE",$consumerlng);
$miObj->setParameter("DS_MERCHANT_PRODUCTDESCRIPTION",$concepto);



$params = $miObj->createMerchantParameters();
$signature = $miObj->createMerchantSignature($clave);

?>

<form id="realizarPago" action="< ?php echo $url_tpv; ?>" method="post" target="_self">
<input type='hidden' name='Ds_SignatureVersion' value='< ?php echo $version; ?>'>
<input type='hidden' name='Ds_MerchantParameters' value='< ?php echo $params; ?>'>
<input type='hidden' name='Ds_Signature' value='< ?php echo $signature; ?>'>
<input class="btn btn-lg btn-primary btn-block" type="submit" name="submitPayment" value="PAGO SEGURO CON TARJETA" />
</form>

< ?php } else { ?>
<p>Desde aquí puedes:</p>
<ul style="margin-left:55px">
<li>1.- Pagar la <strong>reserva</strong> del viaje</li>
<li>2.- Pagar la <strong>totalidad</strong> del viaje</li>
<li>3.- Pagar <strong>la parte que te quede por pagar</strong>.</li>
</ul>
</br></br>
<form class="form-amount" action="< ?php echo $_SERVER['PHP_SELF'];?>" method="post">
<div class="form-group">
<label for="tipodepago">Tipo de Pago</label>
<select id="tipodepago" name='tipodepago' class="form-control input-sm">
<option value="">SELECCIONA TIPO DE INGRESO</option>
<option value="-R">RESERVA DE VIAJE (200€)</option>
<option value="-C">PAGO COMPLETO DEL VIAJE</option>
<option value="-U">ÚLTIMO PAGO</option>
</select><br/>

<label for="amount">Cantidad</label>
<input type="text" id="cantidad" name="cantidad" autocomplete="off" class="form-control" placeholder="Por ejemplo: 450">
<label for="amount">Nº Factura <span style="color:red;font-style:italic">(no el nº de reserva)</span></label>
<input type="text" id="factura" name="factura" autocomplete="off" maxlength="12" class="form-control" placeholder="Por ejemplo: 000000923 (todos los números)">
<label for="amount">Concepto</label>
<input type="text" id="concepto" name="concepto" autocomplete="off" maxlength="125" class="form-control" placeholder="Por ejemplo: Manuel Gonzalez Perez - Viaje Valthorens 2016">
</div>
<input class="btn btn-lg btn-primary btn-block" name="submitPayment" type="submit" value="IR AL PASO 2">
</form>

< ?php }?>

</body>
</html>

Importante: Tienes que eliminar el espacio antes de la interrogación "< ?php" de todas las coincidencias del fichero. He tenido que hacer esto para que Apache no lo interpretase.

ACTUALIZACIÓN 17/11/2017

Recientemente he implementado otro TPV de RedSys con control de usuarios y pagos. Puedes ver el resultado en las siguientes imagenes o en esta url: https://www.raulprietofernandez.net/blog/webs/nueva-web-con-tpv-redsys-y-control-de-pagos

Las características funcionales del portal son las siguientes:

  • Validación de formularios
  • Revisión de datos antes del pago
  • Envio de datos al TPV a través de HTTPS y la APi de RedSYS
  • Panel de control protegido
  • Listado de todos los pagos y su estado
  • Filtrado de pagos por (pendiente, ok y error)
  • Borrado de registros y purgado de la base de datos
  • Generación de QRCodes para cada transaccción
  • Desactivación del ticket una vez usado el QRCODE
  • Envío de confirmación por Email al cliente
  • Envío por Email al clinete con el QRCode adjunto

TPV REDSYS CMS

TPV REDSYS CMS

TPV REDSYS CMS

ENJOY!