Confirmação automática de pagamento
Atualizado em 2026-04-26
Assim que um hóspede faz o sinal ou o pagamento total via Stripe ou Bancontact, todo o fluxo é colocado automaticamente em marcha. Tudo o que entra é visível em tempo real na página de Pagamentos.

O que acontece quando entra um pagamento?
- Chega um webhook (do Stripe ou Bancontact) a
/webhooks/stripe-paymentou/webhooks/bancontact - O BedFlow atualiza a fatura:
financial.paid+= valorfinancial.balance= total - pagofinancial_statepassa a'partial'(sinal) ou'paid'(total)- É adicionado um registo de pagamento individual a
payments[]
- A reserva passa de
pendingparaconfirmed+deposit_paid = true - Sai um e-mail para o hóspede — qual depende da situação:
- Primeiro pagamento (sinal ou total de uma vez) → "Pagamento recebido" (template
booking-confirmed) - Restante após sinal anterior → "Totalmente pago" (template
booking-fully-paid)
- Primeiro pagamento (sinal ou total de uma vez) → "Pagamento recebido" (template
- Notificação Telegram para si no telemóvel:
- 💳 "Pagamento recebido" (no caso de sinal) ou ✅ "Totalmente pago"
- Com nome do hóspede, valor, saldo restante, data de chegada, referência
- WhatsApp para o hóspede (apenas no primeiro pagamento — no pagamento final basta o e-mail)
- O URL do portal do hóspede é gerado e guardado na reserva — o hóspede pode abrir o seu portal a partir do e-mail
Exemplo de fluxo: Jan Jansen reserva 3 noites
| Momento | O Jan vê | Você vê | |---|---|---| | Reserva via widget | "Obrigado — verifique o e-mail para o link de pagamento" | Telegram 🎫 "Nova reserva" | | Abre o e-mail, clica em Stripe | Checkout Stripe, paga €96 de sinal | — | | Webhook Stripe | "Pagamento recebido — restante €231 à chegada" | Telegram 💳 "€96 recebidos do Jan" | | 2 dias depois paga o resto | "Totalmente pago! Até breve." | Telegram ✅ "Totalmente pago pelo Jan" |
Onde está construído?
app/Http/Controllers/PaymentController.php::handleBookingPaymentConfirmed()é o coraçãoapp/Services/EmailAutomationService::processEvent()escolhe o template certoapp/Services/TelegramNotificationService::info('payment_received', ...)envia o push para o admin