Pagos online con tarjeta (Redsys)
🔒 Solo administradores pueden activar la pasarela, configurar credenciales del banco y decidir qué equipos pueden recibir enlaces de pago. Los directores de torneo y los coordinadores de club pueden generar enlaces para los equipos que el admin haya habilitado. Los entrenadores además necesitan que el admin haya marcado Permitir a entrenadores generar enlaces de pago de su equipo en la configuración del tenant.
💡 La pasarela no está activa por defecto. Mientras no haya credenciales guardadas y no marques Activar Redsys para este tenant, en la app no aparece nada relacionado con pagos online (ni botón en el equipo, ni opción de configuración, ni badges).
Esta funcionalidad permite cobrar el saldo pendiente de un equipo con tarjeta, generando un enlace público que el club o las familias abren desde el navegador y pagan en la pasarela del banco. Cuando el banco confirma el cobro, el pendiente del equipo baja automáticamente igual que si hubieras registrado un pago manual.
1. Activar la pasarela (una sola vez por entidad)
- Navbar superior → Configuración (solo visible a administradores).
- En el hub que se abre, pulsa la tarjeta Configuración de pagos (mostrará el badge Pendiente si todavía no está completa).
- Pide a tu banco las credenciales del TPV Virtual Redsys:
| Dato | Cómo lo llama Redsys |
|---|---|
| Código de comercio | Ds_Merchant_MerchantCode (suelen ser 9 dígitos) |
| Terminal | Ds_Merchant_Terminal (normalmente 001 o similar) |
| Clave secreta | Clave SHA-256 del comercio |
- Rellena los tres campos.
- Elige Entorno:
- Test / Pruebas — para hacer pagos de prueba sin que se cobre nada.
- Producción — solo cuando ya tengas el alta operativa en tu banco.
- (Opcional) Cambia los días por defecto antes de expirar un enlace (7 por defecto).
- (Opcional) Marca Permitir a entrenadores generar enlaces de pago de su equipo si quieres delegar esa responsabilidad a entrenadores (aún así tendrás que habilitar cada equipo por separado, ver paso 2).
- Marca Activar Redsys para este tenant y pulsa Guardar configuración.
🔒 La clave secreta se guarda cifrada y no vuelve a mostrarse en pantalla. Si quieres cambiarla, basta con teclear la nueva. Si dejas el campo vacío al guardar, mantiene la que ya tenías.
⚠️ Solo se puede activar la pasarela cuando los tres datos obligatorios están rellenados. Si falta uno, la app rechaza la activación con un aviso.
2. Habilitar la generación de enlaces por equipo
Aunque la pasarela esté activa, directores, coordinadores y entrenadores no pueden generar enlaces de pago hasta que un admin marque cada equipo como habilitado. Esto da control fino para casos como: solo cobrar online a algunos clubs, dar de baja temporalmente la generación en un equipo concreto, etc. Admin y director de torneo nunca necesitan esta habilitación: pueden generar siempre que la pasarela esté activa.
Habilitar varios equipos en masa (desde el torneo)
- Entra al detalle del torneo.
- En la botonera superior pulsa Permisos de pago por equipo (solo visible a admin).
- Se abre un modal con la lista de equipos del torneo. Cada uno tiene un checkbox y, si ya estaba habilitado, la fecha en que se hizo.
- Marca los equipos a habilitar, desmarca los que quieres deshabilitar, y pulsa Guardar permisos.
💡 También están los atajos Marcar todos / Desmarcar todos para clubs grandes.
Habilitar/deshabilitar un equipo concreto (desde el equipo)
En la botonera superior de la página del equipo, los administradores ven un toggle:
- Habilitar pagos (gris, con candado) — si el equipo aún no está habilitado.
- Pagos habilitados ✓ (con check verde y tooltip con la fecha) — si ya lo está. Al pulsarlo pide confirmación y deshabilita.
💡 Queda registrado quién y cuándo habilitó cada equipo (por si necesitas auditarlo).
Qué pasa al deshabilitar un equipo con enlaces vivos
- Los enlaces pendientes existentes siguen funcionando — el club puede pagarlos.
- No se pueden generar enlaces nuevos desde ese equipo (excepto admin/director).
- El botón Enlaces de pago desaparece de la página del equipo para coach/coordinator (admin/director siguen viéndolo).
- Los badges de estado que ya estaban (Pagado, En curso, etc.) siguen mostrándose — informan del histórico.
3. Generar un enlace de pago para un equipo
- Entra al detalle del equipo.
- Pulsa Enlaces de pago en la botonera superior.
- Pulsa Nuevo enlace.
- Elige el tipo de enlace:
| Tipo | Para qué sirve |
|---|---|
| Enlace abierto reutilizable | El más recomendado para compartir con muchas familias. Generas un único enlace y lo difundes a todo el equipo. Cuando un padre lo abre, ve la lista de jugadores y entrenadores con saldo pendiente, elige al suyo y paga exactamente su parte (habitación + inscripción + extras). El enlace permanece activo hasta que se cancele o todos los jugadores queden saldados. |
| Total del equipo | El club paga de una sola vez todo el pendiente disponible del equipo. Útil cuando el club centraliza los cobros y luego repercute a las familias. |
| Por jugadores | Reparte el pendiente entre los jugadores que selecciones. Cada jugador queda asociado al enlace, pero el pago es único e indivisible: alguien paga el enlace entero. |
| Por habitaciones | Igual que el anterior pero por habitaciones del equipo. |
| Importe manual | Importe libre con un título descriptivo. Útil para fianzas, multas, importes especiales, o para pagos parciales por adelantado (ver casos más abajo). Admin y director de torneo pueden además permitir un importe por encima del pendiente marcando un checkbox extra. |
- Pon un título descriptivo (lo verá quien pague) y opcionalmente una descripción.
- Si quieres cambiar la fecha de expiración, márcala. Si la dejas en blanco, usa los días por defecto (7).
- Pulsa Generar enlace.
💡 La app valida que no generes enlaces que sumen más que el pendiente del equipo. Si ya hay un enlace activo de 500 € y el pendiente es 800 €, solo te dejará generar uno nuevo por hasta 300 €.
💡 Tampoco te deja incluir un concepto que ya está en otro enlace activo (p.ej. la habitación 3 está ya en un enlace pendiente y quieres meterla en otro nuevo). Para liberarla, cancela primero el enlace anterior.
🔓 Excepción para admin y director de torneo: en el tipo Importe manual aparece un checkbox extra "Permitir importe por encima del pendiente disponible". Solo lo verás si eres admin global o director del torneo, y solo lo marques cuando realmente lo necesites (cobros excepcionales, sobrecargos manuales): queda registrado para auditoría con el flag
over_budget.
♻️ Enlaces abiertos reutilizables: no se aplican estas validaciones porque el enlace en sí no compromete saldo. Es cada child (uno por padre que paga) el que valida que su importe no exceda el saldo individual del jugador seleccionado.
4. Compartir el enlace
Al generar el enlace te lleva directamente a su página de detalle, donde encuentras:
- La URL pública completa en un campo grande, listo para copiar (ejemplo:
https://intranet.tu-entidad.com/pagar/abc123…). - Botón Copiar URL — la pone en el portapapeles y muestra confirmación.
- Botón Compartir por WhatsApp — abre WhatsApp con un mensaje prerellenado tipo "Hola, te paso el enlace de pago para Cadete 'A'…" y la URL.
- Botón Enviar por correo — abre tu cliente de email con asunto y cuerpo prerellenados.
- Botón Abrir checkout — abre el enlace en otra pestaña para que veas exactamente lo que va a ver el pagador.
💡 En el listado de enlaces (botón Enlaces de pago del equipo) cada fila también muestra la URL completa pegable con su botón Copiar, por si necesitas reenviar uno viejo.
Quien recibe el enlace no necesita cuenta en la app: lo abre, ve un resumen del importe y los conceptos, pulsa Pagar y se le redirige a la pasarela del banco. Cuando vuelve, ve un mensaje de confirmación o de error.
5. ¿Qué pasa cuando alguien paga?
- El banco notifica el cobro directamente al servidor, no a tu navegador. Aunque la persona cierre la pestaña en mitad del proceso, el pago se procesa igual.
- El estado del enlace pasa a Pagado. Si el enlace era hijo de un enlace abierto reutilizable, el padre sigue activo para que otras familias puedan seguir pagando.
- Se generan automáticamente uno o varios cobros en el equipo (tipo Pago, método redsys) que descuentan el pendiente del equipo. Cada cobro queda asociado al jugador o entrenador correspondiente del enlace:
- Items por jugador → un cobro por persona, con el jugador asociado.
- Items por habitación → un cobro por habitación. Si la habitación tiene un titular (jugador/entrenador "dueño"), el cobro se asocia a él; si es una habitación de equipo, queda como cobro del equipo.
- Total del equipo / Importe manual → un cobro asociado al equipo (sin persona concreta).
- Los cobros aparecen en el listado de movimientos del equipo con la nota Cobro automático Redsys · enlace … y la columna Asociado a indica el jugador, entrenador o "Equipo".
- Los jugadores y habitaciones incluidos en el enlace muestran un badge verde "Pagado" junto al nombre.
💡 Si el banco notifica el mismo cobro varias veces (cosa normal en Redsys), la app lo detecta y no duplica el pago.
👤 Ver el detalle de pagos de una persona: en la lista de jugadores o entrenadores del equipo, el kebab menu (botón ⋮) incluye la opción "Ver pagos", que abre el balance individual del jugador (coste desglosado en habitación + inscripción + extras, pagado, comprometido, pendiente) y el histórico de cobros asociados.
6. Estados de un enlace y badges en los listados
Columna "Tipo" del listado de enlaces
En la tabla Enlaces de pago del equipo, la columna Tipo muestra:
- Enlace abierto reutilizable, Total del equipo, Por habitaciones o Importe fijo manual según el tipo elegido al crearlo.
- Cuando el enlace está dirigido a uno o varios jugadores/entrenadores (incluidos los enlaces hijo que se generan automáticamente cuando un padre paga desde un enlace abierto), la columna muestra directamente los nombres:
- Un solo jugador →
Juan Pérez. - Varios →
Juan Pérez, María García, Pedro Ruiz. - Más de 3 →
Juan Pérez, María García, Pedro Ruiz y 2 más.
- Un solo jugador →
Esto te permite identificar de un vistazo quién está incluido en cada enlace sin tener que entrar al detalle. El detalle del enlace (botón Ver) mantiene el desglose completo con los importes por persona.
Estados del enlace
En el listado y en el detalle, el estado se muestra como badge con color para identificarlo de un vistazo. Pasando el ratón por encima del badge aparece un tooltip con la explicación.
| Estado | Color | Qué significa |
|---|---|---|
| Pendiente | Ámbar | Recién generado, todavía nadie lo ha abierto. |
| En proceso | Azul | Alguien le dio a Pagar y está en la pasarela del banco. |
| Pagado | Verde | El banco confirmó el cobro y el pendiente del equipo se descontó. |
| Fallido | Rojo | El banco rechazó el pago (tarjeta denegada, error, etc.). El club puede reintentar abriendo el mismo enlace de nuevo. |
| Cancelado | Rojo oscuro | Lo cancelaste manualmente desde el listado. El importe vuelve a estar disponible para otro enlace. |
| Expirado | Gris | Pasó la fecha de expiración sin que se completara el pago. Se libera automáticamente cada hora. |
| Borrador | Gris | Estado interno: el enlace existe pero todavía no se ha publicado para pago. |
Badges en el detalle del equipo
En la lista de jugadores (y de habitaciones, en Alojamiento) aparecen automáticamente badges al lado del nombre:
| Badge | Color | Cuándo aparece |
|---|---|---|
| Pagado | Verde | Hay al menos un enlace en estado Pagado que incluye ese jugador/habitación, y el importe pagado cubre el coste actual. |
| En curso | Ámbar | Hay un enlace Pendiente o En proceso que incluye ese jugador/habitación. |
| Pago parcial | Ámbar oscuro | Hay pago previo pero el coste actual del item es superior. Solo se detecta automáticamente en habitaciones (porque ahí podemos comparar contra el precio actual). Indica que tienes que generar un enlace nuevo por la diferencia. Solo lo ven administradores. |
💡 Si generaste un enlace de tipo Total equipo, el badge se propaga a todos los jugadores y habitaciones del equipo aunque no los hayas seleccionado individualmente.
7. Cancelar un enlace
Si un enlace ya no procede (cambió el importe, el club pagó por transferencia, etc.) entra al listado de enlaces del equipo y pulsa Cancelar en la fila correspondiente. Se libera el importe inmediatamente y puedes generar uno nuevo.
⚠️ Solo se pueden cancelar enlaces que no estén ya pagados. Para revertir un cobro ya hecho hay que hacerlo en el banco directamente — la app no devuelve dinero.
⚠️ Si cancelas un enlace mientras alguien lo está pagando ahora mismo en la pasarela (estado En proceso) y el banco autoriza el cobro segundos después, gana el cobro real: la app marcará el enlace como Pagado y descontará el pendiente. Esto es intencional para no perder cobros legítimos.
8. Casos de uso prácticos
8.0. Un enlace para que cada padre pague la parte de su hijo (recomendado)
Escenario clásico: tienes 14 jugadores y no quieres generar 14 enlaces ni que el club centralice el cobro.
- Genera un único enlace tipo Enlace abierto reutilizable.
- Compártelo por el grupo de WhatsApp del equipo, en la web del club, etc. Un solo enlace para todos.
- Cada padre lo abre, ve la lista de jugadores y entrenadores con saldo pendiente, marca a su hijo y le aparece el importe exacto: su parte de habitación + su parte de inscripción + sus extras (excursiones, bus, etc.).
- Paga con tarjeta y se descuenta su parte del pendiente del equipo. El enlace sigue activo para los siguientes padres.
- Si dos padres entran a la vez, la app bloquea con un sistema de turnos: el segundo que intente pagar al mismo jugador recibe un mensaje claro de que "ya tiene un pago en curso" y puede elegir otro.
💡 Cancelación del enlace abierto: cuando ya todos hayan pagado (o cuando lo decidas), cancela el enlace desde el listado. Los enlaces hijo que estén En proceso siguen funcionando — no se interrumpen los pagos en curso.
⚠️ No funciona si el equipo tiene un coste total sobrescrito manualmente (override de presupuesto). En ese caso la app no puede saber cuánto le toca a cada jugador y el enlace abierto mostrará un mensaje pidiendo contactar con el organizador.
8.1. El club paga el 50% ahora y el 50% restante en un mes
La pasarela cobra cada enlace entero o nada — no hay división dentro de un mismo enlace. Para cobrar a plazos:
- Genera un enlace tipo Importe manual por el 50% del pendiente, título "Primer plazo".
- Compártelo con el club por WhatsApp/email.
- Cuando esté pagado, el pendiente del equipo baja un 50%. El badge de jugadores no cambia (era un importe manual, no toca conceptos específicos).
- Cuando llegue el momento del segundo plazo, genera otro enlace tipo Importe manual por el resto.
💡 Esta es la forma estándar para "fraccionar" cobros en la app. Cada plazo es un enlace independiente que la familia paga cuando puede.
8.2. Una habitación pagada cambia de ocupantes (sube el precio)
Escenario: la habitación 12 estaba pagada en 320 €. Se incorpora un acompañante extra, el precio sube a 380 €.
- En el detalle de alojamiento, la habitación 12 pasa a mostrar el badge Pago parcial (administradores y directores del torneo).
- Resolución: genera un nuevo enlace tipo Importe manual por 60 €, título "Diferencia habitación 12 · acompañante extra".
- Cuando se paga el segundo enlace, el badge Pagado queda restaurado.
⚠️ Si la habitación cambia y baja de precio (un ocupante se cae), la app no lo detecta automáticamente como "saldo a favor". Tendrás que registrar manualmente un movimiento contrario o devolver por banco — la pasarela no hace reembolsos automáticos.
8.3. Un jugador pagado se transfiere a otro equipo
El enlace ya pagado queda asociado al equipo original. El nuevo equipo no hereda el pago. Si el jugador tiene saldo pendiente en el equipo nuevo, hay que generar un cobro independiente. Si quieres trasladar el cobro de un equipo a otro, hazlo manualmente (cobro negativo en el origen + cobro positivo en el destino).
8.4. La familia abre el enlace, le da a Pagar y cierra la pestaña
- El enlace queda en estado En proceso.
- Si el banco autoriza igualmente, llega la notificación al servidor → Pagado + cobro automático. Aunque la familia no haya visto la pantalla de "OK", el cobro se procesa.
- Si el banco rechaza o no notifica nada en X minutos, el enlace vuelve a estar disponible y la familia puede reintentar abriéndolo de nuevo.
8.5. Pruebas antes de ir a producción
Mientras la pasarela esté en entorno Test / Pruebas:
- Los enlaces funcionan exactamente igual.
- En la pasarela puedes usar las tarjetas de prueba que da Redsys (tu banco te las facilita).
- No se cobra nada de verdad, pero sí se descuenta el pendiente en la app igual que en producción.
Cuando estés conforme, pide al banco las credenciales de producción, cámbialas en Configuración de pagos y pon el entorno en Producción. No mezcles credenciales de test con entorno producción — la pasarela rechazará los pagos.
8.6. Quité los permisos de pago a un equipo pero hay enlaces vivos
- Los enlaces existentes se siguen pudiendo pagar (las URLs siguen funcionando).
- Coach/coordinator del equipo no pueden generar nuevos ni ven el botón "Enlaces de pago".
- Tu equipo de admin/director sí lo ve y puede gestionar (cancelar, generar nuevos, etc.).
8.7. Registrar un pago manual asociándolo a varias personas
Para los pagos que no pasan por Redsys (transferencia, efectivo, etc.), el formulario Registrar pago (en Alojamiento → Pagos y señales) ahora permite:
- Modo equipo (por defecto): introduces un importe único y el pago queda como "Equipo".
- Modo multi-persona: abres el panel "Asociar el pago a personas concretas (opcional)", marcas uno o varios jugadores/entrenadores y rellenas el importe de cada uno por separado. La app crea una fila de cobro por persona, todas comparten fecha, método y referencia.
Útil cuando una familia paga su transferencia única que cubre a dos hermanos en el mismo equipo (uno 200 €, el otro 150 €): puedes desglosarlo en un solo formulario.
8.8. ¿Y si quiero eliminar a un jugador que ya tiene pagos asociados?
La app no te deja eliminar ni un jugador ni un entrenador que tenga cobros vinculados (sean manuales o de Redsys). Verás un mensaje:
"No se puede eliminar a {nombre} porque tiene N pago(s) asociado(s). Reasigna o elimina los pagos primero."
Para resolverlo: primero elimina o reasigna los cobros desde Pagos y señales del equipo (o desde Ver pagos en el kebab del jugador), y luego ya podrás eliminar a la persona.
8.9. Desactivé la pasarela del tenant entero
- Desaparece la opción Configuración de pagos del hub.
- Desaparece el botón Enlaces de pago en cada equipo.
- Desaparece el botón Permisos de pago por equipo del torneo.
- Los badges y los enlaces existentes siguen visibles para consulta histórica, pero nadie puede pagar los pendientes (la pasarela rechaza con un error 503 La pasarela de pago no está operativa).
- Para reactivar, basta con volver a marcar Activar Redsys para este tenant y guardar.