Static QR Codes
A static code carries an account but no amount and no expiry. The payer scans it, sees your account pre-filled, and types the figure themselves.
This is the code you print once and leave on the counter, the menu, the stall sign or the shop window.
Creating One
Simply leave the amount off:
RaastQr::iban('PK33ABCD0000000000000000')->toSvg();Or be explicit about it, which is clearer when a builder has been passed around:
RaastQr::make()->amount($maybeNull)->staticCode()->toSvg();staticCode() clears both the amount and the expiry.
Why SVG for Print
Static codes usually end up on paper, and paper wants vectors:
RaastQr::iban($iban)
->format('svg')
->size(1200)
->color('#01411C')
->label('Scan to pay')
->save(storage_path('app/counter-card.svg'));An SVG scales to any size a printer can handle without a soft edge. See the Counter Card example for a full print-ready page.
Static vs Dynamic
| Static | Dynamic | |
|---|---|---|
| Amount | Typed by payer | Pre-filled |
| Expiry | None | Tomorrow by default |
| Payload flag | 11 | 12 |
| Good for | Counters, signs, menus | Invoices, checkout, order totals |
| Typing mistakes | Amount only | None |
Reconciliation
A single static code means every payment lands in the same account with no reference attached. If you need to match payments to orders, a dynamic code per order still won't do it — the P2P format has no reference field either.
For anything past a small counter operation, ask payers to send a screenshot, or use Raast P2M through an acquirer that gives you real settlement reporting.
Made with ❤️ from Pakistan