Scan the QR on your printed ticket, pay by mobile money without leaving the car, and drive straight to the barrier. No kiosk, no walk back, no app to install.
The whole journey is a scan, a phone prompt, and an open gate. Nothing to download, nothing to queue for.
The printed ticket carries a QR code. It encodes a signed link — ticket numbers can't be guessed or enumerated.
The link opens the exact amount due, priced live by the real fee engine. Part-hours round up; a daily cap keeps long stays sane.
Enter any mobile number and approve the prompt on your handset — MTN, Telecel or AT. The screen waits with you.
Once settled, the gate is told automatically. The screen turns green and the barrier lifts on arrival.
Every seam that touches a payment is verified, replay-safe and independently priced. The pretty part is the least of it.
The QR points to a signed URL. Tamper with it and you get a 403 — ticket numbers can't be enumerated.
The provider posts settlement from its own servers. Authenticity comes from a verified HMAC signature, not a session.
A callback delivered twice settles once. The ledger swallows the redelivery — no double charge, no second gate signal.
Every price — the panel's and the driver's — runs through the same FeeCalculator. What's advertised is what's charged.
A grace period charges nothing but still tells the gate. Beyond a day, a cap keeps multi-day stays from ballooning.
Paid tickets reach the barrier through a worker, so a slow gate never blocks the driver's confirmation.
The live demo can seed any of these on request, so the tricky cases can be shown rather than waited for. Each is priced by the real engine.
| Scenario | What it shows | |
|---|---|---|
| Inside the free window | Arrived 8 minutes ago. Nothing to pay — the gate is told anyway, and no charge is raised. | |
| Short stay | The ordinary case: a 90-minute pickup, billed as two hours. | |
| Half day | Part-hours round up — 5h 20m is charged as six hours. | |
| Overnight | Past 24 hours, so the daily cap applies to the first day and the remainder is billed hourly. | |
| Long stay (capped) | Three days. Without the cap this would be far larger — the cap is what keeps it sane. | |
| Already paid at the kiosk | The barrier already considers this settled. Scanning the QR shows the exit screen — we do not charge for it twice. | no double charge |
The demo console refuses to load unless both vendor seams — the payment gateway and the barrier — are the fake ones. That's the safety property: no configuration flag can point this at a real gateway or a live gate. Yet approving a payment still exercises the real path.
Approving builds the callback the aggregator would send and signs it with a real HMAC — through the actual webhook.
“Redeliver the callback” sends the same event id twice. The ledger holds; it stays paid exactly once.
The whole flow runs locally with no vendor account and no payment credentials. Both are behind fakes.
Spawn a ticket, scan the QR with a real phone, and approve the payment from the console — the phone catches up on its own.
Open the live demo →