QR Payments

šŸ“± Overview

SMART_QR allows customers to pay by scanning a QR code with their local payment app. It abstracts multiple region-specific, QR-compatible payment methods behind a single, unified interface, enabling merchants to provide seamless, localized checkout experiences with minimal integration effort.

Unlike SMART_E_WALLET, which relies on wallet credentials or browser redirects, SMART_QR initiates transactions via QR code scanning. The actual payment rail—whether it's an e-wallet, bank transfer, or national QR standard—is determined by the customer's app, not the merchant.


šŸ” Behind the QR Interface

A QR code is not itself a payment method — it’s a presentation layer. The actual payment method is selected by the user’s app, such as Alipay, PIX, or CoDi. The Smart APM engine maps the payment dynamically, based on market logic.

🌐 QR-compatible methods supported by SMART_QR:

MethodMarketNotes
Alipay QRChina + Global touristsWallet-scan QR shown by merchant
WeChat Pay QRChinaWeChat mini app or camera-based scan
PIX QRBrazilCentral Bank regulated
CoDiMexicoBank transfer using QR
PromptPayThailandCentral bank QR initiative
UPI QRIndiaUsed in apps like Google Pay, PhonePe
VNPayVietnamLinked bank accounts via QR
DuitNow QRMalaysiaInteroperable central QR system
BLIK QRPolandApp-scan or static merchant QR
PayNowSingaporeP2P and merchant QR usage
InstaPay QRPhilippinesQR across banks and wallets
QRISIndonesiaInter-bank/inter-wallet QR

šŸ“¤ Request: SmartQRPayload

FieldTypeRequired?Description
paymentMethodApmMethodYesAlways SMART_QR
paymentTypeApmFlowTypeYesAlways E_WALLET
walletIdString?OptionalVaulted/preselected wallet ID
walletCredentialString?OptionalAuto-authentication token for certain flows
walletCurrencyString?OptionalCurrency expected by the wallet
walletHolderEmailString?OptionalUsed for reconciliation (if available)
walletHolderNameString?OptionalShown on UI or for compliance purposes
userTokenString?OptionalToken for identity/session linking
qrDataString?OptionalRaw QR payload if generated on merchant side

šŸ“„ Response: SmartQRResponseData

FieldTypeRequired?Description
paymentMethodApmMethodYesAlways SMART_QR
paymentTypeApmFlowTypeYesAlways E_WALLET
redirectUrlString?OptionalHosted page fallback (if QR flow is not supported)
iframeUrlString?OptionalURL for embedding checkout (if supported)
providerTransactionIdStringāœ…Unique transaction ID from the provider
sessionTokenString?OptionalToken to resume or continue session
qrDataString?OptionalRaw QR string, usable for custom QR rendering
qrCodeImageUrlString?OptionalPre-hosted QR image (recommended for quick display)
qrMetadataMap<String, String>?OptionalExtra details like expiry, amount, or QR version
walletIdString?OptionalEchoed or resolved wallet ID
walletCredentialString?OptionalSession or login credential for the wallet
walletCurrencyString?OptionalCurrency used in the wallet
walletHolderEmailString?OptionalEmail associated with wallet or transaction
walletHolderNameString?OptionalName for UI display or KYC purposes
userTokenString?OptionalEchoed token from payload for merchant correlation

āœ… Best Practices for QR Checkout

  • Always render the qrCodeImageUrl if it's returned — it's the fastest way to display the QR.
  • Use qrData only if you want to generate your own QR image.
  • QRs expire quickly — usually within 1 to 5 minutes. Make sure to handle timeout or retry UX gracefully.
  • Do not infer the payment method from the QR — it’s chosen by the user’s app.
  • Leverage providerTransactionId and qrMetadata for reconciliation, status polling, or retries.