Automatische betaalbevestiging

Bijgewerkt op 2026-04-26

Automatische betaalbevestiging

Zodra een gast z'n voorschot of volledige betaling doet via Stripe of Bancontact, zetten we automatisch de hele flow in gang. Alles wat binnenkomt zie je real-time op de Betalingen-pagina.

Betalingen-overzicht met openstaande, betaalde en verwerkte transacties

Wat gebeurt er wanneer een betaling binnenkomt?

  1. Webhook (van Stripe of Bancontact) komt binnen bij /webhooks/stripe-payment of /webhooks/bancontact
  2. BedFlow update de factuur:
    • financial.paid += bedrag
    • financial.balance = totaal - betaald
    • financial_state wordt 'partial' (voorschot) of 'paid' (volledig)
    • Individueel payment record wordt toegevoegd aan payments[]
  3. De boeking gaat van pending naar confirmed + deposit_paid = true
  4. Email vertrekt naar de gast — welke email hangt af van de situatie:
    • Eerste betaling (voorschot of in één keer full) → "Betaling ontvangen" (template booking-confirmed)
    • Restbedrag na eerder voorschot → "Volledig betaald" (template booking-fully-paid)
  5. Telegram notificatie naar jou op je telefoon:
    • 💳 "Betaling ontvangen" (bij voorschot) of ✅ "Volledig betaald"
    • Met gastnaam, bedrag, resterend saldo, aankomstdatum, referentie
  6. WhatsApp naar de gast (alleen bij eerste betaling — bij final betaling volstaat de email)
  7. Gastportaal URL wordt gegenereerd en opgeslagen op de boeking — de gast kan z'n portaal openen vanuit de email

Voorbeeldflow: Jan Jansen boekt 3 nachten

| Moment | Jan ziet | Jij ziet | |---|---|---| | Boekt via widget | "Bedankt — check je mail voor betaallink" | Telegram 🎫 "Nieuwe boeking" | | Opent mail, klikt Stripe | Stripe checkout, betaalt €96 voorschot | — | | Stripe webhook | "Betaling ontvangen — resterend €231 bij aankomst" | Telegram 💳 "€96 ontvangen van Jan" | | 2 dagen later betaalt rest | "Volledig betaald! Tot snel." | Telegram ✅ "Volledig betaald door Jan" |

Waar zit dit gebouwd?

  • app/Http/Controllers/PaymentController.php::handleBookingPaymentConfirmed() is het hart
  • app/Services/EmailAutomationService::processEvent() kiest de juiste template
  • app/Services/TelegramNotificationService::info('payment_received', ...) stuurt de admin push