Automatische betaalbevestiging

Bijgewerkt op 2026-04-22

Zodra een gast z'n voorschot of volledige betaling doet via Stripe of Bancontact, zetten we automatisch de hele flow in gang.

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