VietQR là chuẩn QR thanh toán do NAPAS (Cổng Thanh toán Quốc gia) phát hành từ 2021. Mọi app bank tại Việt Nam — Vietcombank, MB, TPBank, ACB, BIDV, Techcombank, … — đều scan được QR này và auto-fill số TK + số tiền + nội dung CK. Khách chỉ cần xác nhận → xong.
Tại sao tích hợp VietQR cho website?
- Khách không phải gõ tay — giảm 90% sai sót nội dung CK
- Số tiền chính xác đến đồng — không bị nhập sai
- Tỉ lệ chuyển khoản thành công cao — UX nhanh hơn 5x so với gõ tay
- 0% phí — VietQR là chuẩn mở, không có cổng nào thu phí
Generate VietQR URL — 1 dòng
Không cần SDK. Dùng generator qr.beepay.vn — service VietQR của BeePay, free, optimize sẵn cho web Việt. Dạng quick-link đơn giản nhất:
https://qr.beepay.vn/img/{BANK}-{ACCOUNT}.png
?amount={AMOUNT}
&addInfo={ORDER_ID}
Ví dụ thực tế:
https://qr.beepay.vn/img/MB-0935085858.png
?amount=500000
&addInfo=SHOP12345
Nếu muốn dùng JSON API (trả về EMV string + base64 PNG + metadata) — POST /v1/qr/generate. Hoặc cần raw EMV để render QR client-side — GET /v1/qr/string. Full docs ở qr.beepay.vn/docs.html.
Các param chi tiết
- BANK — mã ngân hàng (vd
VCB,TCB,MB,ACB,BIDV,TPB,STB,VPB, …) hoặc 6-digit BIN. Full list 47 bank Việt Nam ở qr.beepay.vn/v1/banks - ACCOUNT — số tài khoản hoặc số thẻ
- amount — số tiền (VND, integer). Có amount → QR tĩnh khoá tiền; bỏ amount → QR động khách tự nhập
- addInfo — nội dung CK, max 25 ký tự, dùng để parse order_id ở webhook
- serviceCode —
QRIBFTTA(chuyển vào tài khoản, default) hoặcQRIBFTTC(vào số thẻ) - size — kích thước ảnh PNG, từ 128 đến 1024 px (default 512)
Deeplink — mở thẳng app bank trên mobile
Trên mobile, ngoài hiển thị QR còn có thể đính thêm nút "Mở app bank" — bấm vào sẽ mở thẳng app ACB / MB / VCB / TCB với số tiền & nội dung đã fill sẵn:
https://qr.beepay.vn/pay?app=acb&ba=5847@ACB&am=100000&tn=BEEPAY+HD123
Useful cho khách mobile-first — đỡ phải chụp QR rồi quay lại app bank quét.
Tích hợp tự động vào checkout flow
Khi user click "Thanh toán" → server tạo order với order_id duy nhất → trả QR URL về frontend → render <img src={qrUrl}/>. Khách quét → app bank mở → auto-fill → bấm xác nhận. Trong vòng 5-15 giây, BeePay nhận SMS biên lai từ bank của bạn → POST webhook về site → đơn flip thành paid.
Tip cho UX
- Hiển thị logo bank bên cạnh QR — lấy từ list
qr.beepay.vn/v1/banks - Có nút "Copy nội dung CK" cho khách dùng app cũ không scan được
- Countdown 15 phút cho QR — quá hạn gen QR mới (avoid replay attack)
- Polling status mỗi 3s, ngừng polling khi tab hidden (page visibility API)
Full code tích hợp BeePay + VietQR tại hướng dẫn 5 bước.
