Webhook thông báo trạng thái liên kết tài khoản
Khi thực hiện tạo hoặc liên kết tài khoản ảo (VA) thông qua API Tạo tài khoản ảo (VA), một số ngân hàng áp dụng quy trình xử lý bất đồng bộ (Asynchronous Callback):
- Vietcombank (VCB): Áp dụng cho tài khoản Cá nhân và Hộ kinh doanh (chỉ cần truyền
webhookUrl, không cầnrequestId). - TPBank (TPB): Áp dụng cho tất cả các loại tài khoản (cần truyền cả
webhookUrlvàrequestId).
Khi gọi API create-va, đối tác truyền địa chỉ webhookUrl để nhận kết quả. Khi hệ thống ngân hàng hoàn tất việc kích hoạt tài khoản hoặc người dùng xác thực thành công, ngân hàng sẽ gửi kết quả về Tingee. Ngay sau đó, Tingee tự động gửi thông báo Webhook tới địa chỉ webhookUrl mà đối tác đã cung cấp.
Sơ đồ luồng xử lý
Chi tiết Webhook
Webhook thông báo trạng thái liên kết hoặc hủy liên kết tài khoản ảo từ VCB và TPBank về hệ thống đối tác.
Header gửi kèm
Các header này giúp bạn định danh, kiểm tra thời gian gửi và xác thực tính toàn vẹn của dữ liệu:
| Header | Mô tả |
|---|---|
Content-Type | Luôn là application/json. |
x-request-id | Mã định danh duy nhất cho mỗi lượt gửi webhook từ Tingee (dạng UUID). |
x-request-timestamp | Thời gian Tingee gửi thông báo (format: yyyyMMddHHmmssSSS, múi giờ UTC+7). |
x-signature | Chữ ký điện tử HMAC-SHA512 dùng để kiểm tra tính toàn vẹn dữ liệu. |
Body Parameter
Dữ liệu chi tiết về trạng thái tài khoản ngân hàng được gửi trong phần body:
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
requestId | string | ~ | Mã định danh yêu cầu ban đầu (chỉ áp dụng đối với TPBank; ngân hàng Vietcombank không áp dụng). |
merchantId | number | ✓ | ID của Merchant trên hệ thống Tingee. |
merchantAccountNumberId | number | ~ | ID bản ghi tài khoản ngân hàng trên hệ thống Tingee (có ở TPBank). |
shopId | number | ~ | ID của cửa hàng được gán tài khoản ảo này. |
bankName | string | ✓ | Tên ngân hàng ("VCB" hoặc "TPB"). |
bankBin | string | ✓ | Mã BIN ngân hàng: "970436" (Vietcombank) hoặc "970423" (TPBank). |
accountNumber | string | ✓ | Số tài khoản ngân hàng gốc của khách hàng. |
accountName | string | ~ | Tên chủ tài khoản ngân hàng (viết hoa không dấu). |
vaAccountNumber | string | ✓ | Số tài khoản ảo (VA) đã được cấp/liên kết thành công. |
isNotifyAccountNumber | boolean | ✓ | false: Tài khoản ảo (VA); true: Tài khoản gốc nhận biến động. |
status | string | ✓ | Trạng thái xử lý từ ngân hàng (xem chi tiết bảng bên dưới). |
Danh sách các trạng thái (status):
Giá trị status | Ý nghĩa | Hành động đề xuất |
|---|---|---|
confirm-va-success | Liên kết / Tạo VA thành công | Cập nhật số tài khoản ảo (vaAccountNumber) vào hệ thống để bắt đầu nhận thanh toán. |
delete-va-success | Hủy liên kết VA thành công | Đánh dấu tài khoản ảo đã ngừng nhận biến động hoặc hủy liên kết. |
confirm-va-failed | Liên kết / Tạo VA thất bại | Thông báo cho khách hàng kiểm tra lại thông tin hoặc thử lại. |
delete-va-failed | Hủy liên kết VA thất bại | Ghi nhận lỗi hủy liên kết để tra soát. |
Ví dụ Payload Body
- Vietcombank (VCB)
- TPBank (Thành công)
- TPBank (Hủy liên kết)
{
"merchantId": 1001,
"shopId": 24,
"bankName": "VCB",
"bankBin": "970436",
"accountNumber": "0123456789",
"accountName": "NGUYEN VAN A",
"vaAccountNumber": "99990123456789",
"isNotifyAccountNumber": false,
"status": "confirm-va-success"
}
{
"requestId": "REQ_20261008_001",
"merchantId": 1001,
"merchantAccountNumberId": 5678,
"shopId": 24,
"bankName": "TPB",
"bankBin": "970423",
"accountNumber": "0123456789",
"accountName": "NGUYEN VAN A",
"vaAccountNumber": "0123456789",
"isNotifyAccountNumber": false,
"status": "confirm-va-success"
}
{
"requestId": "REQ_20261008_002",
"merchantId": 1001,
"merchantAccountNumberId": 5678,
"shopId": 24,
"bankName": "TPB",
"bankBin": "970423",
"accountNumber": "0123456789",
"accountName": "NGUYEN VAN A",
"vaAccountNumber": "0123456789",
"isNotifyAccountNumber": false,
"status": "delete-va-success"
}
Phản hồi từ Server Đối tác
Sau khi nhận và xử lý webhook, máy chủ đối tác cần phản hồi mã HTTP 200 OK kèm theo JSON xác nhận:
{
"code": "00",
"message": "Success"
}