QR Payment Checkout Status: From Code Display to Verified Completion
By PayEurasia Team · 11 October 2026 · 4 min read
Last updated 11 October 2026

Design QR checkout states for displayed, waiting, verified and expired sessions without treating a scan or app return as payment confirmation.
Header image: conceptual illustration.
Displaying a QR code starts a payment journey; it does not confirm that money arrived. A customer may scan the code, leave the wallet app, return to checkout or pay after the screen's timer has ended. Each observation needs a different status and recovery rule.
A useful QR checkout makes these states understandable without turning a scan or redirect into financial approval. This article addresses the status design, not a claim that any particular provider or PayEurasia supports a specific QR method.
Define what kind of code is being shown
Ask the provider whether the QR identifies a merchant, a fixed amount, a specific order or a time-limited payment resource. A static merchant code may not carry an order identity. A dynamic code may be tied to an attempt, but that relationship must be documented and verified.
Do not assume that every QR carries amount and currency or prevents repeated payments. Display the expected merchant and amount as readable text where the supported flow allows it, so the customer can understand the intended operation.
The UPI merchant guide provides method-specific questions. Actual QR formats, expiry and verification rules must come from the provider's current documentation.
Separate displayed, waiting and verified states
Code displayed means the checkout rendered a code. Scan observed, if the system genuinely has that signal, means only that a scan-related action occurred. Waiting means the merchant has not yet verified a final payment result.
Verified success requires successful final provider status, expected merchant/order reference, amount and currency. Financial crediting must be idempotent. Failed and expired states should use the provider's actual definitions rather than a frontend timer's assumption.
Unknown outcome is distinct from failure. If a status lookup is unavailable, explain that confirmation is not available. Do not claim payment did not happen simply because the browser stopped waiting.
Tie the screen to a durable attempt
Keep the attempt identity on the server and resolve it to the order. Reopening the page should retrieve the existing attempt, not silently generate a new payable code. If a new attempt is permitted, retain its relationship to the previous one and ensure the old attempt's outcome is resolved appropriately.
Use authenticated provider notifications or supported status checks. Stripe's payment-status guidance describes asynchronous status handling and warns about excessive polling. That guidance illustrates the need for controlled server-side verification; it is not a universal QR API.
The webhook guide covers the delivery boundary. A verified notification must still be matched to the intended attempt before it affects the order.
A payment result arrives after the countdown
Invented example: DEMO-QR-ORDER expects BDT 1,400. The screen displays a provider-supported order-linked QR and waits for confirmation. The browser's display timer ends before the merchant receives a final result.
The interface reports that the displayed session ended while the payment outcome is being resolved only if an actual recovery process is running. It does not mark the order failed or invite an immediate replacement payment.
A later verified result confirms the correct merchant, order, amount and currency. The merchant posts one credit and updates the order. If the provider instead definitively reports an unpaid expired attempt, a new attempt may proceed according to the supported workflow. For bKash or Nagad guidance, a controlled replacement must wait until prior failure or expiration is definitive.
Provide usable alternatives and status text
A QR on the same phone may require a provider-supported app link or another accessible route. Do not invent a deep link or instruct users to bypass the provider's official flow. Explain the supported choices in text and keep support access available.
W3C status-message guidance explains how changes can be presented to assistive technology without unnecessary focus movement. Announce meaningful transitions, not every check interval. A code image alone cannot communicate waiting, expired or verified completion to everyone.
QR status test checklist
- Code display is not treated as successful payment.
- The provider's code type, identity and expiry rules are documented.
- Scan or app-return signals do not authorize fulfillment.
- Refresh retrieves the existing attempt.
- A late result resolves through the ordinary verification path.
- Unknown outcome remains distinct from definitive failure.
- Duplicate events cannot produce extra credit.
- Text and assistive-technology status updates communicate the same result.
Questions about scanning and expiry
Is scanning the code evidence of payment?
No. It may show customer activity, but only a verified final provider result can establish the payment outcome.
Should a countdown automatically enable another code?
Not if the previous financial outcome is still uncertain. Resolve the existing attempt using the documented provider flow before permitting a replacement.
Talk to PayEurasia
Working in a high-risk vertical across South Asia? We can probably help.
Request integration →