Payments & Transactions
Process digital payments, manage digital wallets, and track every financial transaction across your Fleetbase ecosystem.
Payments & Transactions
The Payments module covers three interconnected areas: payment gateways for processing real money, wallets for tracking internal balances, and transactions as the immutable audit trail of every wallet movement.
Navigate to Ledger → Payments to access gateways, wallets, and transactions.
Core Components
Payment Gateways
External payment processors — Stripe, QPay, and Cash — integrated with encrypted credentials and sandbox/live environments. All three drivers support both purchase and refund capabilities. Stripe additionally supports tokenization, setup intents, checkout sessions, webhooks, and recurring payments. Each gateway interaction is logged as a GatewayTransaction for idempotency and audit. See Payment Gateways.
Wallets
Digital balance accounts tied to drivers, customers, your company, or individual users. Every wallet operation (credit, topup, transfer, payout) creates one or more journal entries maintaining double-entry integrity. Wallets can be frozen to block all operations. See Wallets.
Transactions
The complete, immutable ledger of every wallet movement. Transactions are never edited or deleted — they are the full audit trail for compliance and reconciliation. See Transactions.
A Typical Payment Lifecycle
Customer pays via Stripe (e.g. invoice payment or wallet top-up)
→ GatewayTransaction logged (idempotency check)
→ PaymentSucceeded event fires
→ Ledger Transaction created (credit direction)
→ Journal Entry posted by the relevant service
(invoice → invoice_payment / wallet → general / storefront → storefront_sale)The exact journal entries differ per source — see the per-flow examples on Wallets and Invoices.
Webhook Security
All payment gateways send webhooks to confirm transactions. Each driver verifies its webhook signature before processing (Stripe via Webhook::constructEvent, QPay via its own driver). Duplicate webhooks are deduplicated using GatewayTransaction::isProcessed() — a check on (gateway_reference_id, event_type) — so each event is processed exactly once.
Multi-Currency
Wallets are denominated in a single currency. If you operate in multiple currencies, create separate wallets per currency. Transaction records include exchange_rate, settled_currency, and settled_amount fields for multi-currency reconciliation.