Skip to content

Discussion paper

Paying with Bangla QR on a Single Phone

A proposal for a same-device payment link. Bangla QR was built for a camera pointed at a code on another screen. This paper proposes one small addition for the customer who has only one.

Author
Lutfar Rahman
Managing Director & CEO, KaritKarma Limited
Published
For
Bangladesh Bank, Payment Systems Department and the Bangla QR Implementation Unit

Summary

Bangla QR is now mandatory and interoperable. It was built for one situation: a customer points a phone camera at a code displayed somewhere else. When a customer shops on a phone, the code appears on the same phone that holds the payer app. The camera cannot scan its own screen, and the payment stalls.

This paper proposes one small addition to the standard: a payment link that carries the existing Bangla QR string. A tap on the link opens a payer app, which reads the string with the parser it already has. India's UPI solved the same problem the same way. We also propose minimum safety rules for the link and a conformance test run by the Implementation Unit.

Plain terms

URI scheme
The first word of a link, before the colon. In banglaqr://pay the scheme is banglaqr. An app tells the phone which schemes it can open.
Deep link
A link that opens a specific screen inside an app, not just the app.
Chooser
The list a phone shows when more than one app can open a link. The customer picks one.
CRC
A short check code at the end of the Bangla QR string. If any character changes, the code no longer matches, and the app rejects the string.

1. The problem

Many Bangladeshi internet users own a single device, a smartphone. On that device, a merchant website or app can display a Bangla QR, and the payer's bank or MFS app is installed on the same phone. The customer has no way to feed one to the other:

  • The camera cannot scan the screen that is running the scanner.
  • A screenshot can sometimes be imported from the gallery, but that depends on each app offering the feature, and customers are not told to look for it.
  • The only remaining route is a second device, which this customer does not have.
Why Bangla QR stalls on a single phoneTop: one phone shows a QR on its own screen while its camera cannot scan that same screen, so the loop is crossed out. Bottom: with two devices, a QR at a shop counter is scanned by a customer's phone camera and the payment works.ONE PHONE: STALLScamerashop QR on screenCamera cannot scan its own screenTWO DEVICES: WORKScounter QRscanscustomer phone
A camera needs a code on another surface. One phone cannot give it one.

The result is a payment method that works at a shop counter and fails where digital commerce is growing: mobile web and in-app checkout. The same gap is likely to appear in person-to-person payments, which Bangladesh Bank has planned to introduce through Bangla QR.

This paper does not quote a figure for single-device users or abandoned checkouts. Bangladesh Bank and the scheme operators hold the transaction data that would size the problem, and we ask them to measure it.

2. Where Bangla QR stands today

  • Bangladesh Bank circular PSD-1 No. 01 of 1 April 2026 requires banks, MFS providers, PSPs and PSOs to replace proprietary merchant QR codes with Bangla QR by 30 June 2026, with penalties up to Tk 30 lakh. One regulator already reaches every payer and acquirer.
  • Banks and MFS apps have been directed to keep Bangla QR visible on their app homepages. Payer apps are therefore expected to read Bangla QR already, so a link only needs to hand them a string.
  • The specification is based on the EMV Merchant-Presented QR Code Specification. The payload is a standard machine-readable string with a checksum, merchant name, amount and reference fields.
  • The Cashless Bangladesh Unit was renamed the Bangla QR Implementation Unit, and instant settlement and zero interchange have been set by directive. A body exists to issue and maintain operating rules.
  • Person-to-person Bangla QR was planned from 1 November 2026, which widens the gap.

We searched published circulars and press coverage for any link, URI scheme or same-device provision in the standard and found none. We have not seen the full technical specification, so this is an absence of evidence, not proof. The Implementation Unit will know whether such a provision exists.

3. A precedent

India's UPI faced the same constraint. Its merchants present a link of the form upi://pay?pa=...&am=... in addition to a QR. When a customer taps it on an Android phone, the operating system lists every installed app that registered for the upi scheme. The customer picks an app, the app opens on its confirmation screen, and the customer approves. No camera is involved and no app is favoured. The mechanism is ordinary mobile-operating-system behaviour. It needs the scheme agreed once, and each app to register for it.

4. The proposal

4.1 A payment link that wraps the existing string

banglaqr://pay?v=1&d=<percent-encoded EMV QR string>
  • v is the link version.
  • d is the complete Bangla QR string, including its checksum, unchanged.
  • Static and dynamic codes are both supported. A dynamic code carries the amount and an order reference.
Anatomy of the Bangla QR payment linkThe link banglaqr://pay?v=1&d=<EMV string> split into four parts: 1 the scheme banglaqr, 2 the action pay, 3 the version v=1, and 4 the payload d, which carries the full Bangla QR string. An arrow from the payload points to a box saying it is the same string the camera scan reads, unchanged.THE LINKbanglaqr://pay?v=1&d=<EMV string>Same string a camera scan reads1Scheme. banglaqr: the name apps register with the phone2Action. pay: open a confirm screen3Version. v=1: lets the format change later4Payload. d: the full Bangla QR string, with its CRC
Four parts. The payload is the string a camera scan would have read.

4.2 An HTTPS equivalent

A custom scheme works well on Android, where the system offers a chooser. iOS has no chooser for custom schemes, and when more than one app claims a scheme the app that opens is not reliable. For iOS and for browsers that block custom schemes, define an HTTPS form of the same link on a domain designated by the Implementation Unit, which each payer app can verify. On desktop the existing QR remains the path.

4.3 What a payer app does with the link

  1. Receive the link and extract d.
  2. Pass it into the same reader used for camera scans and verify the checksum.
  3. Show the confirmation screen with the merchant name and amount decoded from the string.
  4. Require the customer's normal authentication before any money moves.

The flow, step by step

The same sequence, as it runs on one phone from the merchant checkout to the order match.

The same-device payment flow in eight stepsEight steps from top to bottom: 1, Merchant page (Mobile checkout shows the link); 2, Tap Pay with Bangla QR (No camera needed); 3, Phone lists payer apps (Apps that registered the scheme); 4, Customer picks an app (Bank or MFS app opens); 5, Confirm screen (Merchant and amount from the string); 6, Customer authenticates (PIN, biometric or OTP); 7, Payment (Same controls as a camera scan); 8, Merchant notified (Order reference matches the order).1Merchant pageMobile checkout shows the link2Tap Pay with Bangla QRNo camera needed3Phone lists payer appsApps that registered the scheme4Customer picks an appBank or MFS app opens5Confirm screenMerchant and amount from the string6Customer authenticatesPIN, biometric or OTP7PaymentSame controls as a camera scan8Merchant notifiedOrder reference matches the order
The flow on one phone, from the merchant checkout to the order match.

The same eight steps as text:

  1. Merchant page. Mobile checkout shows the link
  2. Tap Pay with Bangla QR. No camera needed
  3. Phone lists payer apps. Apps that registered the scheme
  4. Customer picks an app. Bank or MFS app opens
  5. Confirm screen. Merchant and amount from the string
  6. Customer authenticates. PIN, biometric or OTP
  7. Payment. Same controls as a camera scan
  8. Merchant notified. Order reference matches the order

What the payer app decides

The app applies the checks it already applies to a camera scan. Three failures end in an error screen. Extra parameters are not a failure: they are ignored.

What a payer app does with a Bangla QR linkA top to bottom flowchart. Receive the link, extract d and ignore other parameters, verify the CRC, decode merchant and amount, run the scan controls, show the confirm screen, let the customer authenticate, then submit the payment. A failed CRC, contradictory fields or a failed control each lead to an error screen and no payment is made.Receive the linkExtract dIgnore every other parameterVerify the CRCSame reader as a camera scanbad CRCDecode merchant and amountReject contradictory fieldsbad fieldsRun scan controlsCash-out, merchant categorycheck failedShow confirm screenNothing is paid yetCustomer authenticatesNormal PIN or biometricSubmit the paymentError screenno payment
Three things end in an error screen. Everything else follows the normal scan path.

What each phone does with the link

How the link behaves on Android, iOS and desktopThree columns. Android shows a chooser listing every installed app that registered the scheme. iOS has no chooser and opens the app that claims the scheme, or the HTTPS link. On desktop the page shows the QR to scan with a phone.AndroidShows a chooserof every app thatregistered theschemeiOSOpens the appthat claims thescheme, or theHTTPS linkDesktopShows the QRto scan witha phone
A chooser is the system list that asks which app should handle a link.

Who does what

Who does whatThree lanes. Bangladesh Bank and the Implementation Unit publish the link, mandate support and run the conformance test. Payer apps register the scheme, parse the string, confirm and authenticate. Merchants and PSPs build the link and QR from one string, carry the order reference and offer fallbacks.Bangladesh Bank and the Implementation UnitPublish the link in the specificationMandate support by a set dateRun the conformance test, publish resultsPayer apps (banks and MFS)Register the scheme and the HTTPS linkParse d with the scan readerConfirm, then authenticateMerchants and PSPsBuild link and QR from one stringCarry the order referenceOffer the fallback chain
Each party does a small, separate piece.

Implementer's checklist

Short, testable items for each party. Each one can be checked yes or no.

Bangladesh Bank and the Implementation Unit

  • The specification names the scheme and the version, for example banglaqr and v=1.
  • The specification names the HTTPS domain and the body that runs it.
  • The five test cases below are published, with the expected result for each.
  • A date is set by which every bank and MFS app must accept the link.
  • A list of apps that pass the conformance test is public and kept current.

Payer app developers

  • The app registers the scheme with the phone, and also the HTTPS link for iOS.
  • The link hands d to the same parser the camera scan uses, with no second parser.
  • The CRC is checked before anything is shown.
  • Merchant name and amount on screen come from d, never from other text in the link.
  • Parameters other than v and d are ignored.
  • No payment starts before the customer authenticates.
  • All five test cases below pass.

Merchants and gateways

  • The link and the QR are built from one Bangla QR string, so they cannot disagree.
  • d is percent-encoded, which means special characters are written as % codes.
  • A dynamic code carries the order reference, and the payment notification returns it.
  • Mobile checkout shows the link first, then the share sheet, then Save QR.
  • Desktop checkout shows the QR.
  • A customer who leaves checkout and comes back is matched to their order by the reference.

Test cases

Five links every payer app should pass before release. The expected result is the same for every app.

Test cases and the expected payer app behaviour
CaseInputExpected behaviour
Valid linkA correct link with a good CRC.Confirm screen shows the merchant name and amount from d. No payment until the customer authenticates.
Bad CRCA link whose last four characters of d are wrong.Rejected. Error screen. No merchant or amount shown as payable.
Tampered amountThe amount inside d is changed and the CRC is left as it was.The CRC no longer matches. Rejected with an error screen.
Extra parameterA valid link with &am=1 added to the end.The extra parameter is ignored. The confirm screen shows the amount from d only.
Not a Bangla QR payloadd holds a web address or another kind of QR text.Rejected as not Bangla QR. Error screen. Nothing is opened or paid.

5. Safety rules

  • Never pay automatically. A link only opens a confirmation screen.
  • Show what was decoded. Merchant name and amount come from the string, not from text in the link.
  • Verify the checksum and reject any string that fails it or has contradictory fields.
  • Ignore any parameter other than v and d.
  • Apply every control a camera scan applies, including cash-out and merchant-category checks.

Because the rules match a camera scan, the link adds a new way to deliver the string and no new way to move money.

6. Fallbacks while adoption is incomplete

Until every app supports the link, merchants and gateways can offer a chain on mobile: try the link, then the system share sheet, then a Save QR button with instructions to use the app's gallery import. This reduces failures but cannot remove them, because it depends on features each app may or may not have. It is a bridge, not a solution.

7. What we ask of Bangladesh Bank

  1. Adopt a standard payment link for Bangla QR, in this form or an improved one, published as part of the specification.
  2. Require every bank and MFS app to accept it, together with gallery import and pasted payloads, by a set date, as was done for homepage visibility.
  3. Make the safety rules in section 5 mandatory for any app that accepts the link.
  4. Confirm the payment-reference path: dynamic codes carry an order reference in the standard bill-number or reference field, and the payment notification returns it, so a customer who leaves checkout and comes back is matched to their order.
  5. Run a conformance test and sandbox through the Implementation Unit, and publish the list of apps that pass.
  6. Measure the problem: the share of Bangla QR attempts on mobile checkouts that are abandoned before completion.

8. Open questions for the regulator

  • Does the current technical specification already define a link or same-device provision that we have not seen?
  • Should the HTTPS form live on a domain run by Bangladesh Bank, the scheme operator, or a neutral body?
  • What lead time should apps be given before the link becomes mandatory?
  • Should offline operation, which Bangladesh Bank is reportedly working on, be considered in the same revision?

9. Our offer

KaritKarma will prepare a reference implementation: a link builder, a test page that exercises each fallback, and a short payer-side guide for parsing the link. We will publish it openly for any bank, MFS or gateway, and contribute it to a pilot with the apps and the Implementation Unit the regulator chooses.

Sources

Dates and directives are as reported in the sources above and should be confirmed against the primary circulars.

Respond to this paper

Comments on this paper are welcome.