Integrar una pasarela TPV de RedSYS en PHP en nuestra Web o en una nueva es sumamente sencillo. Siguiendo el manual que publiqué hace ya bastantes meses Cómo integrar una pasarela de pago TPV RedSys con PHP , acabo de realizar un pequeño portal conectado a RedSys y con control de pago de usuarios. Si quieres ver el resultado final, continúa leyendo...
Hace unas semanas me encargaron el diseño de una pequeña página web (desde cero) con pasarela de pagos integrada a RedSYS, la cual debía ser capaz de hacer ingresos en cuenta a través de un sencillo formulario. Poco a poco el portal y sus funcionalidades se fueron complicando y todas ellas (aunque oculpas a lusuario final) tuve que diseñarlas, testearlas y validarlas.
Como es lógico, no voy a publicar el código de este nuevo proyecto privado, pero a modo de resumen, 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
La página principal con el formulario de pago es la siguiente:

Una vez que el usuario valida los datos, los confirma y se realiza el envío de información al TPV de RedSYS a través de su API:

Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.
El panel de control ha sido diseñado de forma muy sencilla para ver a simple vista el estado de los pagos. El admin puede borrar y listar los pagos en función de su estado (ok, error, pendiente):

Dirección Web: URL privada no accesible
Recuerda que el tutorial para integrar la pasarela RedSYS TPV en PHP puedes verlo aqui Cómo integrar una pasarela de pago TPV RedSys con PHP
ENJOY!
Comentarios
me parece genial el ejemplo, tienes un enlace diposnible para bajar el código?
Gracias
Pues el único código que tengo disponible para poder distribuir es el del TPV, pero no el del CMS que hice para el cliente :(
www.raulprietofernandez.net/blog/webs/como-integrar-una-pasarela-de-pago-tpv-redsys-con-php
Mas que nada porque ya no lo tengo
Un saludo
Tienes que recoger el POST que envia redsys en una nueva web php ( la url que especificas en $URL_Merchant) y para recogerlo es muy fácil, es solamente un array de datos:
include "assets/apiredsys/apiRedsys.php";
$miObj = new RedsysAPI;
$version = $_POST['Ds_SignatureVersion'];
$params = $_POST['Ds_MerchantParameters'];
$signatureRecibida = $_POST['Ds_Signature'];
$decodec = $miObj->decodeMerchantParameters($params);
Con eso tienes los datos del post en $miObj, y puedes sacar los datos que envía como el codigo de respuesta con:
$codigoRespuesta = $miObj->getParameter('Ds_Response');
Si tienes acceso a los logs de Apache, podrás ver en los logs si RedSys está enviando los datos a la URL correcta. Puedes probar tambien a hacer POST de forma manual a tu web URL_MERCHANT para ver si funciona bien (con datos de ejemplo).
Prueba a ver si te funciona :)
Muchas gracias. Me ha funcionado a la perfección. Con los datos de Ds_Order y con el php especificado en la $URL_Merchant he podido cargar en la BBDD los pedidos de forma automática sin tener que esperar que los clientes le den a "finalizar" en la última pantalla de Redsys.
Muchas gracias. Me ha funcionado a la perfección. Con los datos de Ds_Order y con el php especificado en la $URL_Merchant he podido cargar en la BBDD los pedidos de forma automática sin tener que esperar que los clientes le den a -finalizar- en la última pantalla de Redsys.
Me alegro que te sirviese y que ya lo tengas funcionando.
Enhorabuena
Saludos
Yo recojo los valores el la pagina de validacion con el $_POST, pero ¿es posible recuperar los datos indicados en ProductDescription mediante este método?
cualquier ayuda es buena.
Muchas gracias
Voy a intentar aclararte un poco las dudas y como funciona RedSys.
En RedSys solo se almacena (si no recuerdo mal), el comercio, el dinero de la transacción, la fecha y hora, número de pedido .... básicamente esos datos. Si tu por ejemplo haces un formulario, y tienes otros campos como: "Tipo de Contrato", "Dirección", "Código Postal", esos datos no los puedes almacenar en RedSys, por tanto no los vas a poder recuperar en el $_POST que envia RedSys nada de esa información.
Por eso, el flujo para hacer el TPV es el siguiente:
1.- Rellenar formulario de pedido y enviar.
2.- Guardar esos datos en una BBDD en local (yo uso el código de pedido como clave primaria) antes de pasar a la URL del TPV de RedSys.
3.- Cuando RedSys envia el $_POST con el array de datos del resultado de la operación, viene entre los datos, el código de pedido. Con ese código de pedido que envía RedSYS, ya puedes modificar el pedido con el mismo número que hayas guardado en el paso 2 en la BBDD local.
Resumen: En RedSys no puedes guardar "datos adicionales", solo los relacionados a la transacción. Los demás datos debes gestionarlos en tu gestor de compras (CMS o tu desarrollo propio) :)
Espero haberte ayudado y aclarado un poco tus dudas.
Saludos
1. Al cargar el index.php me aparece este error:
Notice: Undefined index: submitPayment in C:\xampp\htdocs\humus\index.php on line 13
PASO.1) Introduce los datos y tipo de pack:
Notice: Undefined index: submitPayment in C:\xampp\htdocs\humus\index.php on line 28
2.- Al hacer el submit a la pasarela me aparece el siguiente(he puesto los datos de comercio y todo el rollo, correctos)
Your request has not been processed. Please contact the administrator.
Your support ID is: 18192039040761644768
Gracias de antemano. Mario
Podrías colgar en algún sito el php ? Oculta los datos de tu TPV. Yo esa parte ya no puedo probarla porque no tengo acceso a ningún TPV, pero puedo mirarte lo del punto 1.
Saludos