En este tutorial vas a montar una integración real y funcional de Redsys en .NET para:
- Pago con tarjeta.
- Pago con Bizum.
Incluye:
- Formulario frontend.
- Backend que firma
Ds_MerchantParameters. - Redirección al TPV Redsys.
URL OK / URL KO.- Notificación online (
MerchantURL) con validación de firma.
Actualizado: 20 de febrero de 2026.
¿Es viable hacerlo en .NET?
Sí, totalmente viable.
Conclusión técnica (basada en documentación oficial de Redsys):
- El flujo de redirección es HTTP estándar (
POSTconDs_SignatureVersion,Ds_MerchantParameters,Ds_Signature). - La firma
HMAC_SHA512_V2se puede implementar en .NET sin dependencias raras. - Bizum en redirección se activa con
DS_MERCHANT_PAYMETHODS = z.
Por tanto, no hace falta cambiar a otra tecnología para este caso.
Proyecto de ejemplo en GitHub
Puedes clonar el proyecto desde:
https://github.com/davidcantonnadales/servidor-backend-redsys-tarjeta-bizum
Estructura principal:
RedsysBizumDemo.Web: aplicación MVC con formulario y callbacks.RedsysBizumDemo.Tests: test de firma contra vector oficial de Redsys.
Flujo real de pago (tarjeta/Bizum)
El circuito completo implementado es:
- Usuario rellena formulario de pago.
- Pulsa botón
TarjetaoBizum. - Backend construye parámetros
DS_MERCHANT_*. - Backend firma y genera formulario auto-submit a Redsys.
- Usuario paga en Redsys.
- Redsys envía:
- notificación server-to-server a
MerchantURL - redirección navegador a
URLOKoURLKO
- notificación server-to-server a
- Backend valida firma en ambos canales y decide estado final.
Parámetros clave que usa el ejemplo
DS_MERCHANT_AMOUNT: importe en céntimos.DS_MERCHANT_ORDER: pedido (máx 12 chars, empieza por 4 dígitos).DS_MERCHANT_MERCHANTCODE: FUC.DS_MERCHANT_TERMINAL: terminal.DS_MERCHANT_TRANSACTIONTYPE:0(autorización).DS_MERCHANT_CURRENCY:978(EUR).DS_MERCHANT_MERCHANTURL: callback online.DS_MERCHANT_URLOKyDS_MERCHANT_URLKO: retorno navegador.DS_MERCHANT_PAYMETHODS = zpara forzar Bizum.
Paso 1: ejecutar el proyecto
git clone https://github.com/davidcantonnadales/servidor-backend-redsys-tarjeta-bizum.git
cd servidor-backend-redsys-tarjeta-bizum/solucion
dotnet restore
dotnet build -c Release
dotnet run --project RedsysBizumDemo.Web/RedsysBizumDemo.Web.csproj
Abre:
https://localhost:7206
Paso 2: configurar callback público (imprescindible)
Redsys no puede llamar a localhost desde internet. Necesitas URL pública:
- Dominio real.
- O túnel temporal (
ngrok).
Ejemplo rápido:
ngrok http 5277
Después, actualiza:
Redsys:NotificationBaseUrl en RedsysBizumDemo.Web/appsettings.json
con la URL pública (normalmente HTTPS) de ngrok.
Paso 3: probar pago con tarjeta (sandbox)
Credenciales de prueba oficiales usadas en el ejemplo:
- FUC:
999008881 - Terminal:
001 - Moneda:
978
Tarjeta de prueba (entorno test):
- Número:
4548810000000003 - Caducidad:
12/49 - CVV:
123
Paso 4: probar Bizum (sandbox)
En el mismo formulario, pulsa Pagar con Bizum (envía DS_MERCHANT_PAYMETHODS=z).
Usuario demo Bizum de Redsys:
- Usuario:
000000034 - Contraseña:
1111
Implementación de firma en el ejemplo (.NET)
En RedsysBizumDemo.Web/Services/RedsysSignature.cs:
- Se diversifica clave con AES-CBC e IV de ceros.
- Se genera clave de operación en Base64.
- Ese valor Base64 de la clave diversificada se usa como clave de HMAC.
- Se calcula HMAC SHA-512 de
Ds_MerchantParameters. - Se transforma a Base64URL para
Ds_Signature.
Además, el proyecto incluye verificación de firma en:
POST /payments/notificationGET/POST /payments/result/okGET/POST /payments/result/ko
Prueba anti-regresión (sin suposiciones)
El test RedsysBizumDemo.Tests/UnitTest1.cs valida la firma con un vector oficial publicado por Redsys.
Ejecuta:
dotnet test -c Release
Si este test falla, no subas a producción.
Qué valida el backend para aceptar un pago
Regla de este ejemplo:
- Firma válida (
Ds_Signaturecorrecta). Ds_Responseen rango autorizado (0..99).
Ese estado se guarda en memoria y se muestra en la home.
Errores reales típicos (y cómo evitarlos)
MerchantURLinaccesible desde internet: no llegan notificaciones.- Firma incorrecta: siempre validar Base64URL, pedido y clave.
- Pedido inválido: Redsys exige formato concreto.
- Bizum no activo en terminal: aunque envíes
z, no funcionará sin activación contractual.
Checklist para pasar a producción
- Cambiar
UseSandbox=false. - Usar FUC/terminal/clave reales.
- Configurar URLs HTTPS reales.
- Persistir pagos en base de datos (no en memoria).
- Añadir idempotencia en notificación online.
- Registrar trazas seguras sin exponer datos sensibles.
Fuentes oficiales utilizadas
- Firmar operación (HMAC SHA512 V2)
- Realizar pago por redirección
- Operativa Bizum
- Parámetros de entrada/salida
- Tarjetas y entornos de prueba
Conclusión
Integrar Redsys con tarjeta y Bizum en .NET es viable y sólido si respetas tres reglas:
- Firma exacta según especificación.
- Callback online público y verificable.
- Validación estricta de
Ds_Responsey firma antes de marcar pedido como pagado.
Share this content: