Đọc tin biến động số dư API
Đọc SMS, thông báo biến động số dư của ngân hàng Việt Nam: số tiền +/−, số dư, thời gian, số tài khoản đã che, nội dung chuyển khoản và mã đơn hàng.
Gửi nội dung tin nhắn SMS, thông báo app hoặc email "biến động số dư" của ngân hàng (Vietcombank, VietinBank, BIDV, Agribank, Techcombank, MB, ACB, VPBank, TPBank, Sacombank…), API trả về ngân hàng, chiều giao dịch (in tiền vào / out tiền ra), số tiền, số dư sau giao dịch, thời gian (ISO, giờ Việt Nam), số tài khoản đã che chỉ còn 4 số cuối, nội dung chuyển khoản nguyên văn và bản chuẩn hoá (chữ in hoa, không dấu như ngân hàng gửi), cùng mã tham chiếu (FT…, Ref). Bộ đọc dựa trên từ khoá và định dạng số chứ không gắn cứng một mẫu cho mỗi ngân hàng, nên mẫu tin lạ hoặc mới đổi vẫn cho kết quả một phần, kèm confidence và warnings.
Lấy mã đơn hàng trong nội dung bằng prefix (vd. DH nhận DH1234, "DH 1234", "DH-1234") hoặc pattern (biểu thức chính quy, tối đa 100 ký tự). Gửi kèm orders ([{"code": "DH1234", "amount": 500000}]) để khớp thanh toán: ưu tiên theo mã, sau đó theo số tiền duy nhất, trả status matched (đủ) / underpaid (thiếu) / overpaid (thừa) và số chênh lệch. Xử lý hàng loạt tới 100 tin bằng messages, kèm danh sách đơn chưa được thanh toán.
Đây là lõi của luồng "chuyển khoản tự xác nhận" tự dựng (chuyển tiếp SMS từ điện thoại Android, hook email, webhook thông báo ngân hàng). Không lưu, không ghi log nội dung; số tài khoản được che trong kết quả.
Tham số
| Tên | Vị trí | Kiểu | Bắt buộc | Mặc định | |
|---|---|---|---|---|---|
text | body|query | string | có | Nội dung thông báo (tối đa 2.000 ký tự). Hoặc messages: mảng tối đa 100 tin. | |
prefix | body|query | string | không | Tiền tố mã đơn cần lấy trong nội dung, vd. DH (chữ, số, tối đa 12 ký tự). | |
pattern | body|query | string | không | Biểu thức chính quy cho mã đơn thay cho prefix (tối đa 100 ký tự, không lồng lượng từ). | |
bank | body|query | string | không | Ngân hàng khi tin không ghi tên (mã VietQR VCB, ICB, BIDV, MB…, tên hoặc BIN). | |
orders | body | array | không | Các khoản chờ thanh toán [{"code", "amount", "id"?}] (tối đa 1.000) để đối chiếu. | |
expected_amount | body|query | number | không | Một số tiền cần nhận (khi không gửi orders): trạng thái đủ / thiếu / thừa. |
Ví dụ
curl -X POST "https://apibox.io.vn/v1/vn-bank-notify" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"MBBank: TK 07xxx123|GD: +350,000VND 10/11/26 09:15 |SD: 2,350,000VND|ND: DH777 chuyen khoan","prefix":"DH"}'const res = await fetch('https://apibox.io.vn/v1/vn-bank-notify', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"text": "MBBank: TK 07xxx123|GD: +350,000VND 10/11/26 09:15 |SD: 2,350,000VND|ND: DH777 chuyen khoan",
"prefix": "DH"
}),
});
const data = await res.json();
console.log(data);import requests
res = requests.post(
"https://apibox.io.vn/v1/vn-bank-notify",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={"text": "MBBank: TK 07xxx123|GD: +350,000VND 10/11/26 09:15 |SD: 2,350,000VND|ND: DH777 chuyen khoan", "prefix": "DH"},
timeout=30,
)
print(res.json())<?php
$ch = curl_init('https://apibox.io.vn/v1/vn-bank-notify');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer YOUR_API_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => '{"text":"MBBank: TK 07xxx123|GD: +350,000VND 10/11/26 09:15 |SD: 2,350,000VND|ND: DH777 chuyen khoan","prefix":"DH"}',
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));Kết quả trả về
{
"bank": {
"code": "MB",
"bin": "970422",
"short_name": "MBBank",
"name": "Ngân hàng TMCP Quân đội"
},
"direction": "in",
"amount": 350000,
"signed_amount": 350000,
"currency": "VND",
"amount_text": "GD: +350,000VND",
"balance": 2350000,
"account_masked": "****7123",
"account_last4": "7123",
"time": "2026-11-10T09:15:00+07:00",
"time_text": "10/11/26 09:15",
"content": "DH777 chuyen khoan",
"content_normalized": "DH777 CHUYEN KHOAN",
"reference": null,
"order_code": "DH777",
"confidence": 1,
"warnings": []
}
Ứng dụng
- Tự xác nhận đơn chuyển khoản từ SMS được chuyển tiếp
- Đưa thông báo biến động số dư vào kế toán mà không cần cổng trả phí
- Khớp tiền về với hoá đơn theo mã đơn và số tiền
- Chuẩn hoá nội dung chuyển khoản bị ngân hàng cắt ngắn, bỏ dấu
Hỏi đáp
Hỗ trợ những ngân hàng nào?
Bộ đọc nhận các từ khoá phổ biến (TK, GD, PS, SD, ND, Ref…) mà mọi ngân hàng lớn đều dùng, và nhận biết ngân hàng qua tên trong tin hoặc tham số bank. Mẫu tin thay đổi vẫn đọc được một phần, kèm cảnh báo.
Dữ liệu có bị lưu không?
Không. Tin nhắn chỉ được xử lý trong bộ nhớ cho đúng yêu cầu đó, số tài khoản trả về đã được che (giữ 4 số cuối).
Khớp đơn hàng thế nào?
Theo mã đơn tìm thấy trong nội dung (bỏ qua dấu cách, gạch nối, dấu tiếng Việt), nếu không có thì theo số tiền duy nhất. Trạng thái cho biết tiền đủ, thiếu hay thừa.
API liên quan
Kiểm tra JSON
Kiểm tra cú pháp JSON, báo đúng dòng và cột bị lỗi, và validate dữ liệu theo JSON Schema (draft 4, 7, 2019-09 hoặc 2020-12).
{ }Định dạng JSON
Làm đẹp JSON với thụt lề 0-8 dấu cách hoặc tab, rút gọn (minify) hoặc sắp xếp key theo bảng chữ cái. Báo lỗi cú pháp kèm dòng và cột.
CSVCSV sang JSON
Chuyển CSV thành mảng object JSON theo dòng tiêu đề, tự nhận dấu phân cách, tự chuyển số và boolean, báo lỗi từng dòng.