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