Saltar al contenido principal

RF35: Usuario registra método de pago

Descripción

Como usuario autenticado, quiero registrar una tarjeta como método de pago para poder pagar mi suscripción.

Los datos de tarjeta se capturan directamente en Stripe (Stripe.js / Elements) y se tokenizan como PaymentMethod; nunca pasan por los servidores de Finnova (Stripe §Frontend/Backend). El backend solo recibe el paymentMethodId y lo adjunta al Customer.

CampoValor
MóduloSubscription Module
ActorUsuario autenticado
EndpointPOST /subscription/payment-method ({ paymentMethodId })
PrecondicionesSesión activa; Customer de Stripe asegurado
PrioridadAlta (MVP)
EtapaMVP
Requisitos relacionadosRF33, RF36, RF46

Reglas de negocio

  • RN-35.1 — El número de tarjeta, CVV y datos PAN nunca llegan al backend de Finnova; solo el paymentMethodId tokenizado.
  • RN-35.2 — El PaymentMethod se adjunta al Customer y se marca como predeterminado para cobros.
  • RN-35.3 — Se valida la tarjeta (RF46), incluyendo 3D Secure si el emisor lo requiere.
  • RN-35.4 — Si el usuario no tiene Customer, se crea antes de adjuntar.

Validaciones de entrada

CampoReglasMensaje de error
paymentMethodIdObligatorio. Token válido de Stripe."No se pudo registrar el método de pago."
AuthorizationBearer válido."Sesión no válida." (401)

El backend nunca recibe ni registra en logs números de tarjeta o CVV.

Criterios de aceptación

Escenario 1: Registro de tarjeta exitoso

Dado que ingreso mi tarjeta en el formulario de Stripe, Cuando se tokeniza y envío el paymentMethodId, Entonces el sistema lo adjunta a mi Customer, Y lo marca como predeterminado, Y responde 201 Created mostrando marca y últimos 4 dígitos.

Escenario 2: Tarjeta rechazada o inválida

Dado que la tarjeta es rechazada o inválida (RF46), Cuando intento registrarla, Entonces el sistema responde con un error claro ("Tu tarjeta fue rechazada. Verifica los datos o usa otra"), Y no la marca como método válido.

Escenario 3: Requiere autenticación 3D Secure

Dado que el emisor exige 3D Secure, Cuando registro la tarjeta, Entonces la app completa el reto 3DS con Stripe antes de confirmar el registro.

Escenario 4: No exposición de datos de tarjeta (seguridad)

Dado que registro un método de pago, Cuando se inspeccionan logs y la base de datos, Entonces nunca aparece el número completo de tarjeta ni el CVV.

Criterios no funcionales

  • Scope PCI reducido a SAQ A (Stripe maneja los datos de tarjeta).
  • Llamadas con idempotency key; comunicación TLS 1.2+.

Diagrama de secuencia