Tạo mã VietQR API
Tạo mã QR chuyển khoản VietQR / NAPAS 247 với ngân hàng, số tài khoản, số tiền và nội dung chuyển khoản dạng PNG, SVG hoặc payload JSON. Giải mã VietQR có sẵn.
API VietQR tạo đúng chuỗi dữ liệu chuẩn EMVCo / NAPAS mà mọi ứng dụng ngân hàng Việt Nam quét được: chọn ngân hàng (bank=VCB, TCB, MB, tên ngân hàng hoặc mã BIN NAPAS 6 số), số tài khoản, số tiền VND (không bắt buộc) và nội dung chuyển khoản. Mặc định API trả về ảnh PNG; thêm format=svg để lấy SVG, hoặc format=json để nhận chuỗi payload, thông tin ngân hàng và cả hai dạng ảnh trong một phản hồi. Kích thước, màu, lề và mức sửa lỗi dùng giống API tạo mã QR.
Khi có số tiền, mã là QR động (01=12), không có số tiền thì là QR tĩnh. Trường 63 chứa mã kiểm tra CRC-16/CCITT theo đúng đặc tả. Nội dung chuyển khoản có dấu được chuyển sang không dấu (ngân hàng không truyền dấu ổn định) và API trả kèm nội dung gốc để bạn đối chiếu; nên giữ nội dung dưới 25 ký tự vì một số ngân hàng cắt phần còn lại.
GET /v1/vietqr/banks trả về danh sách ngân hàng và ví điện tử kèm mã và BIN. action=decode&payload=… phân tích một chuỗi VietQR có sẵn: ngân hàng, số tài khoản, số tiền, nội dung và checksum có hợp lệ không – tiện để kiểm tra một mã QR đã in thực sự chứa gì.
Tham số
| Tên | Vị trí | Kiểu | Bắt buộc | Mặc định | |
|---|---|---|---|---|---|
bank | body|query | string | có | Mã ngân hàng (VCB, ICB, BIDV, MB, TCB…), tên (Vietcombank) hoặc mã BIN NAPAS 6 số. Xem /v1/vietqr/banks. | |
account | body|query | string | có | Số tài khoản (hoặc số thẻ khi service=card), tối đa 19 chữ/số. | |
amount | body|query | number | không | Số tiền VND (số nguyên). Khi có, mã là QR động. | |
content | body|query | string | không | Nội dung chuyển khoản, tối đa 50 ký tự (được bỏ dấu). Tên khác: message, description. | |
service | body|query | string | không | account | account (QRIBFTTA) hoặc card (QRIBFTTC). |
account_name | body|query | string | không | Tên chủ tài khoản, chỉ trả lại trong JSON (không nằm trong mã QR). | |
format | body|query | string | không | png | png, svg hoặc json. |
size | body|query | number | không | 300 | Kích thước ảnh (64–2000 px). color, background, margin, ecc dùng như /v1/qr. |
action | body|query | string | không | decode để phân tích chuỗi VietQR truyền trong payload. |
Ví dụ
curl "https://apibox.io.vn/v1/vietqr?bank=VCB&account=0123456789&amount=150000&content=Thanh%20toan%20don%20ABX1234&format=json" \
-H "Authorization: Bearer YOUR_API_KEY"const res = await fetch('https://apibox.io.vn/v1/vietqr?bank=VCB&account=0123456789&amount=150000&content=Thanh%20toan%20don%20ABX1234&format=json', {
method: 'GET',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
},
});
const data = await res.json();
console.log(data);import requests
res = requests.get(
"https://apibox.io.vn/v1/vietqr?bank=VCB&account=0123456789&amount=150000&content=Thanh%20toan%20don%20ABX1234&format=json",
headers={"Authorization": "Bearer YOUR_API_KEY"},
timeout=30,
)
print(res.json())<?php
$ch = curl_init('https://apibox.io.vn/v1/vietqr?bank=VCB&account=0123456789&amount=150000&content=Thanh%20toan%20don%20ABX1234&format=json');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer YOUR_API_KEY'],
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));Kết quả trả về
{
"bank": {
"code": "VCB",
"bin": "970436",
"short_name": "Vietcombank",
"name": "Ngân hàng TMCP Ngoại thương Việt Nam"
},
"account": "0123456789",
"account_name": null,
"service": "account",
"amount": 150000,
"currency": "VND",
"content": "Thanh toan don ABX1234",
"data": "00020101021238540010A00000072701240006970436011001234567890208QRIBFTTA530370454061500005802VN62260822Thanh toan don ABX12346304FFCC",
"version": 5,
"modules": 37,
"ecc": "M",
"svg": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 45 45\" …</svg>",
"png_base64": "data:image/png;base64,iVBORw0KGgo…"
}
Ứng dụng
- Hiển thị QR thanh toán đúng số tiền và mã đơn ở trang thanh toán, hoá đơn
- Tự động đối soát giao dịch nhờ đưa mã đơn hàng vào nội dung chuyển khoản
- In QR nhận tiền ủng hộ, QR bán hàng cho một tài khoản ngân hàng
- Kiểm tra nội dung một mã VietQR trước khi công bố
Hỏi đáp
API có chuyển tiền hay cần ký hợp đồng với ngân hàng không?
Không. API chỉ tạo mã QR để ứng dụng ngân hàng của người trả tiền đọc. Việc chuyển tiền diễn ra giữa các ngân hàng qua NAPAS 247; muốn nhận thông báo khi có tiền vào, bạn cần API của ngân hàng hoặc dịch vụ như SePay, Casso.
Hỗ trợ những ngân hàng nào?
Mọi ngân hàng trong mạng NAPAS 247. /v1/vietqr/banks liệt kê khoảng 50 ngân hàng và ví điện tử kèm mã; nếu thiếu ngân hàng nào, bạn có thể truyền thẳng mã BIN 6 số vào bank.
Vì sao nội dung chuyển khoản tiếng Việt bị đổi?
Nội dung chuyển khoản chỉ được truyền ổn định ở dạng ASCII, nên dấu bị bỏ (“Thanh toán đơn” thành “Thanh toan don”) và ký hiệu được thay bằng dấu cách. Phản hồi có cả nội dung gốc và nội dung đã mã hoá.
API liên quan
Tạo mã QR
Tạo mã QR dạng PNG hoặc SVG chỉ với một request GET: link, văn bản, WiFi, danh thiếp vCard, e-mail, SMS, số điện thoại, toạ độ. Tuỳ chỉnh màu, kích thước.
|||Tạo mã vạch
Tạo mã vạch Code 128 cho tem nhãn, mã SKU, vận đơn chỉ với một request. Xuất SVG kèm dòng chữ hoặc PNG, tuỳ chỉnh chiều cao, độ rộng và màu sắc.
▭Ảnh placeholder
Lấy ảnh giữ chỗ đúng kích thước cho mockup và test: /v1/placeholder/600x400.png. Xuất SVG với chữ và màu tuỳ chỉnh, hoặc PNG một màu.