QR Payments
The SMART_QR payment method enables customers to complete transactions by scanning a QR code using their local payment app. It abstracts multiple region-specific, QR-enabled payment methods under a single unified interface, allowing merchants to provide a localized and seamless checkout experience with minimal integration complexity.
Unlike SMART_E_WALLET, which relies on wallet credentials or browser redirects, SMART_QR transactions are initiated through QR scanning. The underlying payment rail (e.g., e-wallet, bank transfer, national QR standard) is dynamically determined by the customer’s app, not by the merchant.
Behind the QR Interface
A QR code serves as a presentation layer, not a payment method itself. The actual payment method is selected by the user’s mobile app (e.g., Alipay, PIX, CoDi). The Smart APM engine dynamically maps the payment rail based on regional logic and customer preferences.
QR-Compatible Payment Methods Supported by SMART_QR
SMART_QR| Method | Market | Notes |
|---|---|---|
| Alipay QR | China + Global tourists | Merchant displays QR scanned via Alipay wallet. |
| WeChat Pay QR | China | Payments via WeChat mini-app or camera-based scan. |
| PIX QR | Brazil | Central Bank regulated instant transfer system. |
| CoDi | Mexico | Bank-to-bank transfer using QR codes. |
| PromptPay | Thailand | Central Bank-backed QR initiative. |
| UPI QR | India | Unified Payments Interface; supported in apps like Google Pay, PhonePe. |
| VNPay | Vietnam | Linked bank account QR-based transfers. |
| DuitNow QR | Malaysia | Interoperable central QR system across banks/wallets. |
| BLIK QR | Poland | QR used in BLIK-enabled mobile apps. |
| PayNow | Singapore | QR-based P2P and merchant payments. |
| InstaPay QR | Philippines | QR standard interoperable across banks and wallets. |
| QRIS | Indonesia | Inter-bank and inter-wallet QR system. |
Request Payload: SmartQRPayload
SmartQRPayload| Field | Type | Required? | Description |
|---|---|---|---|
paymentMethod | ApmMethod | Yes | Must be SMART_QR. |
paymentType | ApmFlowType | Yes | Always E_WALLET. |
walletId | String? | Optional | Vaulted or preselected wallet identifier. |
walletCredential | String? | Optional | Auto-authentication token used in certain QR flows. |
walletCurrency | String? | Optional | Currency expected for the transaction. |
walletHolderEmail | String? | Optional | Customer’s email used for reconciliation (if available). |
walletHolderName | String? | Optional | Name of the wallet holder, used for display or compliance. |
userToken | String? | Optional | Token used for identity verification or session linking. |
qrData | String? | Optional | Raw QR payload generated on the merchant side (for custom QR display). |
Response Payload: SmartQRResponseData
SmartQRResponseData| Field | Type | Required/Optional | Description |
|---|---|---|---|
paymentMethod | ApmMethod | Yes | Always SMART_QR. |
paymentType | ApmFlowType | Yes | Always E_WALLET. |
redirectUrl | String | Optional | Fallback hosted page URL if QR scanning is not supported. |
iframeUrl | String | Optional | Embedded iframe URL for in-app checkout (if supported). |
providerTransactionId | String | Yes | Unique transaction ID from the payment provider. |
sessionToken | String | Optional | Token for resuming or continuing the transaction session. |
qrData | String | Optional | Raw QR string for custom QR generation by the merchant. |
qrCodeImageUrl | String | Optional | Pre-hosted QR image URL for fast rendering on merchant UI. |
qrMetadata | Map<String, String> | Optional | Additional QR details like expiry time, amount, or QR version. |
walletId | String | Optional | Echoed or resolved wallet ID. |
walletCredential | String | Optional | Session or authentication token returned by the wallet provider. |
walletCurrency | String | Optional | Currency used in the wallet for this transaction. |
walletHolderEmail | String | Optional | Email tied to the wallet or transaction. |
walletHolderName | String | Optional | Wallet holder’s name, useful for UI display or KYC compliance. |
userToken | String | Optional | Token echoed from the request for merchant-side correlation. |
Best Practices for QR Checkout
- Use Provided QR Image: Always render the
qrCodeImageUrlif available for the fastest QR display. - Custom QR Generation: Use
qrDataonly when you need to generate your own QR code. - Handle Expiration: QR codes typically expire within 1–5 minutes; handle timeout and retry gracefully.
- Dynamic Rail Mapping: Do not assume the payment method from the QR; it’s selected by the customer’s app.
- Transaction Tracking: Use
providerTransactionIdandqrMetadatafor status polling, reconciliation, or retry flows.
Updated 8 days ago
