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

MethodMarketNotes
Alipay QRChina + Global touristsMerchant displays QR scanned via Alipay wallet.
WeChat Pay QRChinaPayments via WeChat mini-app or camera-based scan.
PIX QRBrazilCentral Bank regulated instant transfer system.
CoDiMexicoBank-to-bank transfer using QR codes.
PromptPayThailandCentral Bank-backed QR initiative.
UPI QRIndiaUnified Payments Interface; supported in apps like Google Pay, PhonePe.
VNPayVietnamLinked bank account QR-based transfers.
DuitNow QRMalaysiaInteroperable central QR system across banks/wallets.
BLIK QRPolandQR used in BLIK-enabled mobile apps.
PayNowSingaporeQR-based P2P and merchant payments.
InstaPay QRPhilippinesQR standard interoperable across banks and wallets.
QRISIndonesiaInter-bank and inter-wallet QR system.

Request Payload: SmartQRPayload

FieldTypeRequired?Description
paymentMethodApmMethodYesMust be SMART_QR.
paymentTypeApmFlowTypeYesAlways E_WALLET.
walletIdString?OptionalVaulted or preselected wallet identifier.
walletCredentialString?OptionalAuto-authentication token used in certain QR flows.
walletCurrencyString?OptionalCurrency expected for the transaction.
walletHolderEmailString?OptionalCustomer’s email used for reconciliation (if available).
walletHolderNameString?OptionalName of the wallet holder, used for display or compliance.
userTokenString?OptionalToken used for identity verification or session linking.
qrDataString?OptionalRaw QR payload generated on the merchant side (for custom QR display).

Response Payload: SmartQRResponseData

FieldTypeRequired/OptionalDescription
paymentMethodApmMethodYesAlways SMART_QR.
paymentTypeApmFlowTypeYesAlways E_WALLET.
redirectUrlStringOptionalFallback hosted page URL if QR scanning is not supported.
iframeUrlStringOptionalEmbedded iframe URL for in-app checkout (if supported).
providerTransactionIdStringYesUnique transaction ID from the payment provider.
sessionTokenStringOptionalToken for resuming or continuing the transaction session.
qrDataStringOptionalRaw QR string for custom QR generation by the merchant.
qrCodeImageUrlStringOptionalPre-hosted QR image URL for fast rendering on merchant UI.
qrMetadataMap<String, String>OptionalAdditional QR details like expiry time, amount, or QR version.
walletIdStringOptionalEchoed or resolved wallet ID.
walletCredentialStringOptionalSession or authentication token returned by the wallet provider.
walletCurrencyStringOptionalCurrency used in the wallet for this transaction.
walletHolderEmailStringOptionalEmail tied to the wallet or transaction.
walletHolderNameStringOptionalWallet holder’s name, useful for UI display or KYC compliance.
userTokenStringOptionalToken echoed from the request for merchant-side correlation.

Best Practices for QR Checkout

  • Use Provided QR Image: Always render the qrCodeImageUrl if available for the fastest QR display.
  • Custom QR Generation: Use qrData only 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 providerTransactionId and qrMetadata for status polling, reconciliation, or retry flows.