Skip to content

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:

php
RaastQr::iban('PK33ABCD0000000000000000')->toSvg();

Or be explicit about it, which is clearer when a builder has been passed around:

php
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:

php
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

StaticDynamic
AmountTyped by payerPre-filled
ExpiryNoneTomorrow by default
Payload flag1112
Good forCounters, signs, menusInvoices, checkout, order totals
Typing mistakesAmount onlyNone

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