Kiến thức thanh toán

Xác nhận chuyển khoản: mã đơn hay virtual account?

Hai cách phổ biến để biết khoản tiền vừa về thuộc đơn nào: đặt mã đơn trong nội dung chuyển khoản, hoặc cấp cho mỗi đơn, mỗi khách một virtual account. Ưu, nhược điểm và khi nào nên dùng cách nào.

Nội dung bài viết
  1. Cách 1: Mã đơn trong nội dung chuyển khoản
  2. Cách 2: Virtual account cho mỗi đơn hoặc mỗi khách
  3. Nên chọn cách nào
  4. Khớp xong vẫn phải kiểm số tiền
  5. BankOpenAPI hỗ trợ cả hai cách

Nhận chuyển khoản thì dễ, biết khoản tiền vừa về là của đơn nào mới khó. Nhiều shop vẫn để một người mở app ngân hàng, đọc nội dung từng giao dịch rồi bấm xác nhận đơn bằng tay. Cách này chậm, dễ sót và không chạy được ngoài giờ làm việc.

Để app tự xác nhận thanh toán, mỗi giao dịch phải mang theo một thông tin giúp hệ thống khớp nó với đúng đơn. Có hai cách phổ biến.

Cách 1: Mã đơn trong nội dung chuyển khoản

Khi khách đặt hàng, app hiện mã QR (VietQR) đã điền sẵn số tài khoản, số tiền và nội dung là mã đơn, ví dụ DH1024. Khách quét mã và chuyển khoản. Khi webhook báo có về, hệ thống tìm mã đơn trong nội dung rồi so số tiền.

Ưu điểm:

  • Dùng ngay tài khoản ngân hàng đang có, không cần mở thêm gì.
  • Khách quen với việc quét VietQR, gần như không phải gõ tay.

Nhược điểm:

  • Khách có thể sửa hoặc xóa nội dung, nhất là khi chuyển khoản bằng tay thay vì quét mã.
  • Nội dung có thể bị ngân hàng cắt ngắn, đổi chữ hoa, bỏ dấu, hoặc chèn thêm thông tin phía trước.
  • Phải viết logic tìm mã cho chịu được các biến thể như DH 1024, dh1024, DH1024 thanh toan.

Mẹo: dùng mã ngắn, chỉ gồm chữ in hoa và số, có tiền tố cố định (DH, HD...). Tránh dấu gạch ngang, gạch dưới và ký tự đặc biệt vì một số ngân hàng bỏ chúng đi.

Cách 2: Virtual account cho mỗi đơn hoặc mỗi khách

Virtual account (tài khoản định danh) là số tài khoản phụ gắn với tài khoản chính của bạn. Tiền chuyển vào virtual account vẫn về tài khoản chính, nhưng giao dịch mang theo số virtual account nhận tiền. Bạn cấp cho mỗi đơn, hoặc mỗi khách, một số riêng, nên chỉ cần nhìn số tài khoản nhận là biết tiền của ai.

Ưu điểm:

  • Không phụ thuộc nội dung chuyển khoản: khách ghi gì, hay không ghi gì, vẫn khớp được.
  • Hợp với khách trả định kỳ, nạp ví, trả góp: mỗi khách giữ một số tài khoản cố định.

Nhược điểm:

  • Chỉ dùng được với ngân hàng có hỗ trợ virtual account.
  • Cần quản lý vòng đời của số tài khoản: cấp, gắn với đơn hoặc khách, đóng khi không dùng.

Nên chọn cách nào

  • Shop bán lẻ, đơn một lần: mã đơn trong nội dung kèm VietQR là đủ, triển khai trong một buổi.
  • Khách trả nhiều lần (nạp ví, học phí, thuê bao): virtual account theo khách, khách lưu một số tài khoản là dùng mãi.
  • Đơn giá trị lớn, cần chắc chắn: virtual account theo đơn, khớp chính xác dù khách ghi nội dung thế nào.

Nhiều hệ thống dùng cả hai: virtual account là cách chính, mã đơn trong nội dung là cách dự phòng.

Khớp xong vẫn phải kiểm số tiền

Tìm được đơn chưa phải là xong. Hệ thống còn phải so số tiền nhận với số tiền của đơn, vì khách có thể chuyển thiếu, chuyển thừa hoặc chuyển làm nhiều lần. Bài Đối soát chuyển khoản: 6 trường hợp lệch hay gặp đi vào chi tiết từng trường hợp.

BankOpenAPI hỗ trợ cả hai cách

BankOpenAPI khớp tiền về với đơn theo mã trong nội dung hoặc theo virtual account, rồi gửi webhook kèm kết quả khớp cho server của bạn. Bạn chỉ cần cập nhật trạng thái đơn khi nhận được webhook.

Bắt đầu với BankOpenAPI

Đăng ký tài khoản, liên kết tài khoản ngân hàng và nhận webhook báo có đầu tiên. Cần tư vấn thì nhắn chúng tôi.