Confirmación automática de pago

Actualizado el 2026-04-26

Confirmación automática de pago

En cuanto el huésped realiza el depósito o el pago completo a través de Stripe o Bancontact, ponemos en marcha automáticamente todo el flujo. Todo lo que entra lo ve en tiempo real en la página de Pagos.

Vista general de pagos con transacciones pendientes, pagadas y procesadas

¿Qué ocurre cuando llega un pago?

  1. El webhook (de Stripe o Bancontact) llega a /webhooks/stripe-payment o /webhooks/bancontact
  2. BedFlow actualiza la factura:
    • financial.paid += importe
    • financial.balance = total - pagado
    • financial_state pasa a 'partial' (depósito) o 'paid' (completo)
    • Se añade un payment record individual a payments[]
  3. La reserva pasa de pending a confirmed + deposit_paid = true
  4. Sale un correo al huésped — el correo concreto depende de la situación:
    • Primer pago (depósito o pago completo de una vez) → "Pago recibido" (plantilla booking-confirmed)
    • Importe restante tras un depósito previo → "Totalmente pagado" (plantilla booking-fully-paid)
  5. Notificación de Telegram a su teléfono:
    • 💳 "Pago recibido" (en depósito) o ✅ "Totalmente pagado"
    • Con nombre del huésped, importe, saldo restante, fecha de llegada y referencia
  6. WhatsApp al huésped (solo en el primer pago — en el pago final basta con el correo)
  7. Se genera y se guarda la URL del portal del huésped en la reserva — el huésped puede abrir su portal desde el correo

Flujo de ejemplo: Jan Jansen reserva 3 noches

| Momento | Jan ve | Usted ve | |---|---|---| | Reserva a través del widget | "Gracias — consulte su correo para el enlace de pago" | Telegram 🎫 "Nueva reserva" | | Abre el correo, hace clic en Stripe | Checkout de Stripe, paga €96 de depósito | — | | Webhook de Stripe | "Pago recibido — restan €231 a la llegada" | Telegram 💳 "€96 recibidos de Jan" | | 2 días después paga el resto | "¡Totalmente pagado! Hasta pronto." | Telegram ✅ "Totalmente pagado por Jan" |

¿Dónde está implementado?

  • app/Http/Controllers/PaymentController.php::handleBookingPaymentConfirmed() es el núcleo
  • app/Services/EmailAutomationService::processEvent() selecciona la plantilla adecuada
  • app/Services/TelegramNotificationService::info('payment_received', ...) envía el push al administrador