If you sell anything in person in Pakistan — from a mobile phone accessories stall to a boutique clothing shop — you've almost certainly seen a small laminated QR code taped near the till, usually alongside a JazzCash or Easypaisa logo. Understanding how these actually work, rather than just copy-pasting a code someone gave you, makes it much easier to troubleshoot when a customer says "the scan isn't working."

Two different kinds of QR payment codes

Broadly, merchant payment QR codes in Pakistan fall into two categories:

Wallet-specific codes. JazzCash and Easypaisa each issue their own merchant QR codes tied to a specific merchant account. A customer using the matching app scans the code, the amount is entered (or it's pre-filled if it's a fixed-amount code), and the payment settles into that wallet.

Raast-based codes. Raast is the State Bank of Pakistan's instant payment system, and it's designed to be interoperable — the idea being that a single Raast QR code can be paid from any participating bank or wallet app, rather than requiring a different code for every provider. For a merchant, this is the more future-proof option, since it doesn't lock customers into having one specific app installed.

What actually happens on a technical level

A payment QR code doesn't contain your bank account balance or move money by itself — it encodes structured data (merchant ID, and sometimes a fixed amount) that the paying app reads and uses to initiate a transfer through the relevant payment rail. This is worth knowing because it means the QR code image itself is not sensitive in the way a PIN is; what matters is that the merchant ID encoded inside it is correct and belongs to you.

Practical tips for small merchants

  • Get your QR code directly from your bank or wallet provider, not a screenshot forwarded from another shop. A blurry, re-photographed QR code is a common source of failed scans.
  • Print at a decent size and laminate it. Codes taped near a till get sun-faded and creased within weeks; a scan failure at checkout is a lost sale.
  • Consider a dynamic code for variable amounts. Some providers let you generate a code where the customer enters the amount themselves, rather than needing a new fixed-amount code printed for every price point.
  • Keep a backup payment method visible. Network issues happen. A visible cash or card fallback avoids an awkward moment when a scan fails at a busy counter.

If you're building your own checkout flow

If you're a developer building a small e-commerce or point-of-sale tool rather than just displaying a code at a till, remember that most wallet and Raast integrations require you to generate the QR payload through their official API or SDK — you can't just encode an arbitrary string as a QR code and expect the wallet apps to recognise it as a valid payment request. A generic QR code generator (like the one on this site) is the right tool for encoding a URL, a Wi-Fi password, or a business card — not for producing a wallet-recognised payment code, which needs to come from the payment provider's own integration.