Payment method · Vietnam

VietQR for business: how merchants accept VietQR payments

VietQR is the common QR standard that Vietnamese banks use for transfers, run by NAPAS, the national interbank switch. For a merchant it means one code that customers of almost any Vietnamese bank can scan and pay from their own banking app. This page explains how VietQR collection works, why online sellers need a code per order rather than one printed account code, what a VietQR API integration should handle, and how VietQR fits with the e-wallets when you collect through CVPay.

What VietQR is

NAPAS (the National Payment Corporation of Vietnam) created VietQR so that QR transfers would follow one format across banks instead of each bank inventing its own. A VietQR code follows the international EMVCo QR layout and encodes the receiving bank, the account and, optionally, an amount and a payment description. Any participating banking app can read it, and so can many e-wallet apps that allow transfers to bank accounts.

When the customer confirms, the money moves as an ordinary interbank transfer over NAPAS. Nothing new is installed on the customer’s phone, there is no card number to type and no separate wallet to fund. That is why VietQR has become the default way Vietnamese shoppers pay for online orders when they are not using cash on delivery.

How a customer pays an order with VietQR

  1. 01

    The checkout shows a code

    Your page renders the VietQR image for this order together with the amount and the order reference in plain text.

  2. 02

    The customer opens their bank app

    They choose “scan QR” in the app of whichever bank they use. On a phone they can also save the image and open it from the gallery inside the bank app.

  3. 03

    The transfer details fill themselves in

    The account, the amount and the reference come from the code, so the customer only reviews and confirms with their usual PIN, OTP or biometric step.

  4. 04

    Your system hears back

    Your provider matches the incoming transfer to the order and notifies your backend, which releases the order.

Static account QR versus a dynamic code per order

Many small shops in Vietnam simply print the VietQR of their bank account and ask customers to type the amount and a note. That is a static code: it identifies who gets paid, but not for what. Every incoming transfer then has to be matched by a person reading bank statements, and customers routinely mistype amounts or forget the reference.

An online business needs the opposite: a dynamic code generated for each order, carrying the exact amount and a unique reference that your provider can match automatically. It is the single most important difference between “we accept VietQR” on a market stall and VietQR that works for an e-commerce checkout or a platform with thousands of orders a day.

What a VietQR API integration should handle

  • Create a payment for an order and receive what you need to display the code, with the amount and reference bound to it.
  • Expire the code if the customer does not pay, so a late transfer cannot silently attach to an order you have already cancelled.
  • Handle the awkward cases: a customer who pays a different amount, pays twice, or pays after expiry. Agree with your provider how each one is reported and refunded.
  • Report the final status through a server-to-server notification, never through the customer’s browser returning to your site.
  • Give you a daily file you can reconcile line by line against your own orders.

Collecting VietQR through CVPay

Each step below starts with a fixed CVPay product fact, followed by what your own team should do at that point.

  1. 01

    Open the account

    Merchants are onboarded after a KYB review. A sandbox environment is opened first, and the sandbox is isolated from production.

    Register from this page and prepare your company documents and a clear description of what Vietnamese customers will pay you for. Use the sandbox to try the full order lifecycle, including codes that expire unpaid.

  2. 02

    Integrate once

    One merchant account and one API cover all three currencies.

    Build your order flow so the payment method is a parameter. If you later add wallets or USDT, it should be a configuration change rather than a second project.

  3. 03

    Wire up notifications

    Payment status changes are sent as webhook callbacks, and every callback is signed.

    Verify the signature on every callback, store the raw body, and make the handler safe to run twice for the same payment.

  4. 04

    Confirm your methods

    Pay-in methods include VietQR, MoMo, ZaloPay and Viettel Money in Vietnam, and GCash, Maya, GrabPay and QR Ph in the Philippines.

    Before launch, confirm which of these methods are active on your merchant account and show customers only those.

VietQR together with MoMo and ZaloPay

VietQR reaches people who pay from a bank app. A sizeable group of shoppers, especially younger mobile users, would rather confirm inside an e-wallet such as MoMo or ZaloPay. Many Vietnamese checkouts therefore show VietQR first and one or two wallets next to it. When all three come from the same provider, they share one order model and one notification format, which keeps your reconciliation in one place.

CVPay facts for VietQR merchants

These are the product facts you can rely on. Anything not listed here, ask us before you build on it.

  • Pay-in methods include VietQR, MoMo, ZaloPay and Viettel Money in Vietnam, and GCash, Maya, GrabPay and QR Ph in the Philippines.
  • One merchant account and one API cover all three currencies.
  • Payment status changes are sent as webhook callbacks, and every callback is signed.
  • Merchants are onboarded after a KYB review. A sandbox environment is opened first, and the sandbox is isolated from production.

Which methods are enabled on a specific merchant account is confirmed during onboarding.

FAQ

Who operates VietQR?+

VietQR is the QR transfer standard of NAPAS, Vietnam’s national interbank payment switch, and it is supported by participating Vietnamese banks.

Is there a VietQR API for merchants?+

Banks and payment providers expose their own APIs that create VietQR payments and report their status. A merchant integrates with its bank or provider, not with NAPAS directly.

Can a company outside Vietnam accept VietQR?+

A VietQR code points to a Vietnamese bank account, so a foreign company normally collects through a payment provider that will onboard it and handle the local side of the collection.

Is VietQR enabled on every CVPay merchant account?+

Not automatically. VietQR is one of CVPay’s pay-in methods in Vietnam, and the methods enabled on a specific merchant account are confirmed during onboarding.

Related

Start accepting payments today.

Create an account and go live, or talk to our team about your requirements.