Liên hệ

    Tự động xác nhận chuyển khoản bằng mã VietQR động và Webhook ngân hàng thời gian thực

    Trả lời nhanh

    Giải pháp tự động xác nhận chuyển khoản bằng mã VietQR động chuẩn NAPAS kết hợp tài khoản ảo định danh (Virtual Account - VA) và Webhook ngân hàng thời gian thực giúp website bán hàng gạch nợ đơn hàng chỉ sau 2 đến 5 giây kể từ khi người mua bấm chuyển tiền. Hệ thống mã hóa sẵn số tài khoản thụ hưởng, số tiền chính xác và mã đơn hàng vào trong cấu trúc EMVCo QR, loại bỏ hoàn toàn thao tác chụp màn hình biên lai và chờ nhân viên kế toán kiểm tra sao kê thủ công.

    Chuyển khoản ngân hàng qua mã QR hiện là phương thức thanh toán được người tiêu dùng trực tuyến tại Việt Nam ưa chuộng nhờ tính tiện lợi và chi phí giao dịch thấp. Tuy nhiên, nếu vẫn dùng mã QR tĩnh và bắt khách gửi ảnh chụp màn hình chuyển khoản qua khung chat, doanh nghiệp sẽ đối mặt với nguy cơ biên lai giả mạo và tắc nghẽn khâu xử lý đơn giờ cao điểm.

    Phần 01

    1. Mã VietQR động chuẩn EMVCo NAPAS 247 khác gì so với mã QR tĩnh thông thường?

    Mã QR tĩnh (Static QR) là loại mã chỉ chứa thông tin ngân hàng và số tài khoản cố định của người nhận. Khi khách hàng quét mã tĩnh trên website, họ phải tự gõ số tiền cần thanh toán và tự nhập nội dung chuyển khoản (ví dụ: Thanh toan don hang DH1029). Trong thực tế vận hành, có tới 10% - 15% người mua nhập thiếu số lẻ, quên ghi mã đơn hàng hoặc bị ứng dụng ngân hàng tự động chèn thêm tên chủ tài khoản làm biến dạng cú pháp nhận diện.

    Ngược lại, mã VietQR động (Dynamic VietQR) được hệ thống máy chủ khởi tạo riêng cho từng đơn hàng theo tiêu chuẩn kỹ thuật EMVCo do Ngân hàng Nhà nước và tổ chức chuyển mạch tài chính quốc gia (NAPAS) ban hành. Chuỗi dữ liệu bên trong mã QR động đã nhúng sẵn mã định danh ngân hàng thụ hưởng (BIN), số tài khoản đích, số tiền chính xác của đơn hàng và chuỗi nội dung tham chiếu đã chuẩn hóa.

    Khi người mua dùng bất kỳ ứng dụng ngân hàng thương mại nào quét mã VietQR động trên màn hình thanh toán của website, toàn bộ các trường thông tin từ số tiền đến nội dung chuyển khoản đều được điền tự động và khóa lại (hoặc cảnh báo nếu chỉnh sửa). Khách hàng chỉ cần kiểm tra và xác nhận mã PIN / sinh trắc học là hoàn tất giao dịch.

    Về mặt kỹ thuật, chuỗi dữ liệu VietQR tuân thủ cấu trúc TLV (Tag - Length - Value - gồm Mã trường, Độ dài và Giá trị) kèm mã kiểm tra dư thừa chu trình 16-bit (CRC-16/CCITT-FALSE) ở 4 ký tự cuối cùng. Nếu bất kỳ ký tự nào trong chuỗi bị thay đổi trên đường truyền, mã kiểm tra CRC sẽ không khớp và ứng dụng ngân hàng sẽ từ chối đọc mã ngay lập tức, bảo toàn tính toàn vẹn của thông tin thanh toán.

    • Trường dữ liệu số 54 (Transaction Amount) khóa chính xác số tiền đơn hàng cần thu đến từng đồng lẻ.
    • Trường dữ liệu bổ sung số 62 (Additional Data Field Template) chứa mã tham chiếu đơn hàng duy nhất (Bill Number / Reference Label).
    • Hỗ trợ chuyển tiền nhanh liên ngân hàng 24 giờ mỗi ngày qua mạng lưới NAPAS 247 với thời gian hạch toán tức thời.
    • Có thể kết xuất dưới dạng hình ảnh trực quan kèm logo thương hiệu hoặc chuỗi dữ liệu thô (QR Payload) để vẽ trực tiếp bằng thư viện trên trình duyệt giúp tải trang cực nhanh.
    Phần 02

    2. Cơ chế Tài khoản định danh (Virtual Account - VA) so với Phân tích cú pháp nội dung (Memo Parsing)

    Để máy chủ website biết được khoản tiền vừa chảy vào tài khoản ngân hàng thuộc về đơn hàng nào, hiện có hai kiến trúc tích hợp phổ biến: Phân tích nội dung chuyển khoản trên tài khoản thường (Memo Parsing) và Cấp phát tài khoản ảo định danh theo đơn hàng (Dynamic Virtual Account - VA).

    Với phương pháp phân tích nội dung chuyển khoản (Memo Parsing), doanh nghiệp sử dụng một tài khoản ngân hàng duy nhất và dựa vào biểu thức chính quy (Regular Expression - Regex) để dò tìm mã đơn hàng (ví dụ: DH88992) bên trong chuỗi nội dung giao dịch báo về. Nhược điểm của cách này là một số ngân hàng giới hạn độ dài ký tự nội dung chuyển tiền liên ngân hàng hoặc người dùng vô tình xóa mất mã đơn hàng trước khi bấm chuyển, dẫn đến hệ thống không thể tự động khớp lệnh.

    Kiến trúc hiện đại và ổn định hơn cho website thương mại điện tử chuyên nghiệp là sử dụng Tài khoản định danh (Virtual Account - VA) thông qua kết nối Open Banking API với ngân hàng thương mại hoặc đơn vị trung gian thanh toán. Với mỗi đơn hàng (hoặc mỗi khách hàng thành viên), hệ thống tự động sinh ra một số tài khoản ảo riêng biệt có tiền tố của doanh nghiệp (ví dụ: 9688 + Mã đơn hàng), liên kết trực tiếp về tài khoản thanh toán gốc.

    Khi khách hàng quét mã VietQR động chứa số tài khoản định danh VA này, dù người mua có xóa sạch nội dung chuyển khoản hoặc ghi nội dung bất kỳ, hệ thống ngân hàng vẫn nhận diện chính xác 100% đơn hàng thông qua chính số tài khoản VA nhận tiền và chỉ chấp nhận giao dịch khi số tiền chuyển khớp đúng với giá trị đơn hàng đã đăng ký cho mã VA đó.

    So sánh kỹ thuật giữa phương pháp đọc nội dung chuyển khoản và Tài khoản định danh (VA)
    Tiêu chí kỹ thuậtĐọc nội dung chuyển khoản (Memo Parsing)Tài khoản định danh động (Dynamic VA)
    Cơ chế định danh đơn hàngQuét từ khóa mã đơn hàng trong chuỗi nội dung giao dịch bằng RegexMỗi đơn hàng có một số tài khoản nhận tiền (VA) riêng biệt, duy nhất
    Rủi ro khách sửa nội dungKhách xóa hoặc sửa mã đơn trong ô nội dung sẽ làm treo lệnh tự độngAn toàn tuyệt đối vì định danh nằm ở Số tài khoản nhận, không phụ thuộc nội dung
    Kiểm soát đúng số tiềnKhách vẫn có thể chuyển thiếu hoặc thừa nếu tự ý sửa ô số tiền trên appCấu hình VA chỉ nhận đúng số tiền khớp 100% với giá trị đơn hàng (Exact Amount)
    Thời gian gạch nợ & Báo cóTừ 5 - 30 giây tùy thuộc độ trễ đồng bộ lịch sử giao dịchTức thời (1 - 3 giây) ngay khi lệnh chuyển mạch NAPAS 247 hoàn tất
    Đối tượng phù hợp triển khaiCửa hàng nhỏ, lượng đơn vừa phải, muốn tận dụng ngay tài khoản hiện hữuDoanh nghiệp TMĐT, bán lẻ quy mô vừa và lớn, cần tự động hóa kế toán chặt chẽ
    Phần 03

    3. Kiến trúc Webhook nhận biến động số dư và đồng bộ giao diện thời gian thực

    Luồng dữ liệu khép kín của một giao dịch VietQR tự động diễn ra qua 4 bước: (1) Khách đặt hàng, máy chủ web gọi API tạo mã VietQR động và hiển thị lên màn hình; (2) Khách quét mã và chuyển tiền trên ứng dụng ngân hàng; (3) Ngân hàng thụ hưởng ghi có và bắn bản tin Webhook (HTTP POST) chứa chi tiết giao dịch về Endpoint của website; (4) Máy chủ website xác thực chữ ký Webhook, cập nhật đơn hàng và đẩy thông báo lên màn hình của khách.

    Ở bước nhận bản tin Webhook từ ngân hàng hoặc cổng thanh toán, lập trình viên cần thiết kế cơ chế xử lý bất đồng bộ (Idempotent Webhook Handler). Do đặc thù mạng viễn thông, nếu máy chủ website phản hồi chậm quá 3 - 5 giây, hệ thống gửi Webhook sẽ coi như lần gửi đó thất bại và tự động gửi lại bản tin đó thêm nhiều lần nữa (Retry Mechanism).

    Vì vậy, hàm xử lý Webhook trên website phải kiểm tra khóa duy nhất của giao dịch ngân hàng (Bank Reference Number / Transaction ID) trong cơ sở dữ liệu. Nếu mã giao dịch này đã được ghi nhận và xử lý trước đó, hệ thống chỉ cần trả về mã trạng thái HTTP 200 OK ngay lập tức mà không thực hiện cộng tiền hay gửi lại email xác nhận đơn hàng lần thứ hai.

    Để mang lại cảm giác phản hồi tức thì trên giao diện người dùng (Frontend), trang hiển thị mã QR trên website nên thiết lập một kênh lắng nghe sự kiện từ máy chủ bằng công nghệ Server-Sent Events (SSE) hoặc WebSocket. Ngay khoảnh khắc máy chủ xử lý xong bản tin Webhook, một tín hiệu sẽ được bắn thẳng lên trình duyệt để ẩn mã QR, phát hiệu ứng âm thanh báo thành công và chuyển sang trang theo dõi vận đơn mà khách không cần nhấn nút tải lại trang.

    • Xác thực chữ ký số (Digital Signature / Checksum) trong Header của mọi bản tin Webhook để ngăn chặn kẻ gian gửi yêu cầu giả mạo báo đã chuyển tiền.
    • Ghi nhận toàn bộ dữ liệu nguyên bản (Raw Payload) của bản tin Webhook vào bảng nhật ký kiểm toán (Payment Audit Logs) trước khi thực thi logic nghiệp vụ.
    • Phản hồi mã HTTP 200 OK cho máy chủ ngân hàng trong vòng dưới 1.000ms bằng cách đẩy các tác vụ nặng (như tạo hóa đơn PDF, gửi email, đồng bộ ERP) vào hàng đợi chạy ngầm (Background Queue).
    • Hủy hiệu lực của mã VietQR động / đóng tài khoản VA ngay sau khi đơn hàng đã thanh toán thành công hoặc khi khách hàng bấm hủy đơn để tránh khách quét nhầm lại mã cũ.
    Phần 04

    4. Kịch bản xử lý ngoại lệ: Chuyển thiếu tiền, chuyển thừa tiền và chuyển khoản làm nhiều lần

    Trong trường hợp doanh nghiệp chưa sử dụng tài khoản định danh VA có khóa cứng số tiền mà dùng phương thức VietQR đọc nội dung chuyển khoản, hệ thống chắc chắn sẽ gặp các tình huống ngoại lệ từ phía người mua như: chuyển thiếu vài nghìn đồng do nhìn nhầm phí ship, chuyển thừa tiền, hoặc chia một đơn hàng giá trị lớn thành 2 - 3 lần chuyển khoản khác nhau do vướng hạn mức giao dịch một lần của thẻ.

    Nếu mã nguồn website chỉ viết điều kiện so sánh bằng tuyệt đối (Số tiền nhận bằng Tổng tiền đơn hàng), những đơn hàng khách chuyển thiếu hoặc chia làm nhiều lần chuyển sẽ bị treo ở trạng thái Chờ thanh toán dù tiền thực tế đã vào tài khoản công ty, gây bức xúc cho người mua và làm tăng tải cho đội ngũ chăm sóc khách hàng.

    Cách thiết kế cơ sở dữ liệu chuẩn là tách bảng Đơn hàng (Orders) và bảng Giao dịch thanh toán (Payment Transactions) theo quan hệ một - nhiều (1-N). Mỗi bản tin Webhook báo có hợp lệ có chứa mã đơn hàng sẽ tạo ra một bản ghi giao dịch mới và cộng dồn vào trường Tổng số tiền đã thanh toán (Paid Amount) của đơn hàng đó.

    Hệ thống sẽ tự động phân loại trạng thái thanh toán thành 4 mức rõ ràng: Chưa thanh toán (Unpaid), Thanh toán một phần (Partially Paid - khi tổng tiền nhận lớn hơn 0 nhưng nhỏ hơn giá trị đơn hàng), Đã thanh toán đủ (Paid) và Thanh toán dư (Overpaid). Khi phát sinh trạng thái Thanh toán một phần, website lập tức cập nhật ngay trên màn hình cho khách biết số tiền vừa nhận được và số tiền còn thiếu kèm mã QR mới chỉ chứa đúng phần chênh lệch cần chuyển thêm.

    • Cho phép cấu hình ngưỡng sai số chấp nhận tự động (Payment Tolerance - ví dụ lệch dưới 1.000 VNĐ do làm tròn) tùy theo quy định kế toán của doanh nghiệp.
    • Hiển thị tiến độ thanh toán trực quan trên màn hình Checkout khi khách phải chia đơn hàng 100 triệu đồng thành 2 lần chuyển khoản 50 triệu đồng.
    • Tự động gửi cảnh báo kèm thông tin tài khoản người chuyển về bộ phận kế toán đối với các giao dịch chuyển dư tiền hoặc chuyển tiền vào đơn hàng đã bị hủy vì quá hạn.
    • Định kỳ cuối ngày chạy tiến trình đối soát tự động giữa danh sách đơn hàng trên website và tệp sao kê điện tử (MT940 / API Statement) của ngân hàng để rà soát không sót bất kỳ giao dịch nào.
    FAQ

    Câu hỏi thường gặp

    Giải đáp nhanh những điểm thương hiệu bán lẻ D2C, chuỗi cửa hàng đa chi nhánh, doanh nghiệp sản xuất – phân phối B2B và đơn vị xây dựng sàn giao dịch thương mại điện tử hay hỏi về chủ đề này.

    Tích hợp mã VietQR động tự động xác nhận đơn hàng có mất phí theo phần trăm giá trị giao dịch không?

    Khác với thanh toán thẻ tín dụng hay ví điện tử thường tính phí theo tỷ lệ phần trăm (MDR từ 1% đến 2,5%), dịch vụ gạch nợ tự động qua mã VietQR động hoặc tài khoản định danh VA thường chỉ thu phí cố định rất thấp trên mỗi giao dịch thành công (hoặc theo gói cước tháng), giúp doanh nghiệp tiết kiệm chi phí đáng kể đối với các đơn hàng có giá trị lớn.

    Nếu hệ thống mạng của ngân hàng bảo trì vào ban đêm khiến Webhook báo về chậm thì website xử lý thế nào?

    Trên giao diện thanh toán, sau khoảng 60 giây kể từ khi khách nhấn nút Tôi đã chuyển khoản mà máy chủ chưa nhận được Webhook, website nên cho phép đơn hàng chuyển sang trạng thái Chờ xác minh thanh toán và giữ nguyên giỏ hàng cho khách yên tâm. Ngay khi ngân hàng hoàn tất bảo trì và đẩy bù bản tin Webhook (hoặc qua tiến trình truy vấn lịch sử giao dịch định kỳ), đơn hàng sẽ tự động duyệt mà không cần thao tác lại.

    Một mã VietQR động tạo ra cho đơn hàng trên website có thời hạn sử dụng trong bao lâu?

    Thời gian hiệu lực của mã VietQR động do hệ thống website và cấu hình tài khoản định danh VA quy định tùy theo đặc thù ngành hàng. Với các sản phẩm có số lượng tồn kho giới hạn hoặc chương trình giảm giá chớp nhoáng (Flash Sale), thời hạn mã QR thường đặt từ 10 đến 15 phút; với đơn hàng bán lẻ thông thường có thể cấu hình hiệu lực trong vòng 24 giờ.

    Nhận tư vấn & báo giá

    Nhận tư vấn kiến trúc & Báo giá chi tiết hệ thống Website Thương mại điện tử

    Hãy cho Uptech biết mô hình bán hàng của bạn (B2C, B2B hay Đa kho/Sàn), số lượng mã sản phẩm (SKU) dự kiến và các phần mềm cổng thanh toán, vận chuyển, ERP/POS cần kết nối. Kỹ sư giải pháp của Uptech sẽ phân tích và gửi bản đề xuất kiến trúc kèm dự toán chi phí minh bạch trong 24 giờ làm việc.

    • Phản hồi kèm sơ đồ kiến trúc đề xuất trong vòng 24 giờ làm việc
    • Tư vấn miễn phí lộ trình đồng bộ tồn kho ERP/POS và cấu trúc SEO danh mục lớn
    • Hợp đồng pháp nhân rõ ràng, bàn giao mã nguồn, xuất hóa đơn GTGT (VAT) đầy đủ
    Nhận tư vấn & báo giá

    Miễn phí khảo sát. Phản hồi trong ngày làm việc gần nhất.

    Bạn cần loại website nào?

    Hoặc nhắn Zalo / gọi 0961 163 961