Virtual Account
Cá nhân
Doanh nghiệp
Tạo Tài khoản định danh (Tài khoản ảo).
Tài khoản định danh (Tài khoản ảo) là tài khoản phụ liên kết trực tiếp với tài khoản chính của khách hàng. Số Tài khoản định danh được thiết kế và hiển thị dưới dạng dãy chữ/số ký tự tuân theo cấu trúc VA do Cas cung cấp.
Tài khoản định danh có chức năng là số tài khoản thụ hưởng của khách hàng, giúp quản lý khoản phải thu dễ dàng, giảm thiểu số lượng tài khoản chuyên thu tại các ngân hàng, chủ động trong việc tạo và quản lý các số Tài khoản định danh thuận tiện cho người dùng.
Giải pháp Virtual Account for Soundbox là giải pháp chuyên biệt cho các thiết bị Soundbox – loa thông báo thanh toán tự động tại cửa hàng. Khi có giao dịch vào số tài khoản ảo, hệ thống sẽ nhận diện và gửi thông báo để Soundbox đọc to số tiền, ví dụ: “Bạn đã nhận được 50.000 đồng”. Xem sản phẩm tại: https://loax.vn
Các bước tích hợp Virtual Account
Dưới đây là các bước để tích hợp Virtual Account vào sản phẩm của bạn.
- Tạo một phân quyền /grant/token với
scopeslàvirtual_account,virtualAccountNumbercó giá trị được thiết lập theo cấu trúc phía Cas cung cấp cho bạn vàfiServiceIdmã dịch vụ tài chính đăng ký VA này.
- virtualAccountNumber: sẽ được cấu hình riêng cho mỗi ứng dụng và mỗi dịch vụ tài chính tương ứng.
- fiServiceId: bạn có thể gọi API /fi-services để lấy thông tin.
- user (tuỳ chọn): thông tin khách hàng mà hệ thống của bạn đã lưu, dùng để điền sẵn biểu mẫu trên Cas Link và hỗ trợ kiểm tra thông tin tài khoản. Xem chi tiết
-
Mở giao diện Cas Link bằng
grantTokenđược trả về ở bước trên. Xem chi tiết -
Sau khi người dùng hoàn tất xác thực, phía giao diện của bạn sẽ nhận được một publicToken, dùng publicToken này để lấy accessToken cho phân quyền.
-
Sau khi có
accessToken, gọi API Lấy thông tin Tài khoản định danh để kiểm tra thông tin chi tiết của TK và bắt đầu thêm vào hệ thống của bạn. -
Kiểm tra VA hợp lệ với hệ thống của bạn, với trường hợp không hợp lệ gọi API /grant/remove để thực hiện xoá phân quyền.
Thông tin khách hàng (user)
user là trường tuỳ chọn khi tạo phân quyền. Nếu hệ thống của bạn đã lưu sẵn thông tin của khách hàng, hãy truyền vào để:
- Điền sẵn biểu mẫu liên kết: Cas Link tự động điền các ô tên chủ tài khoản, số định danh, số điện thoại và email, người dùng không cần nhập lại những thông tin bên bạn đã có.
- Hỗ trợ kiểm tra thông tin tài khoản: những thông tin này được gửi kèm khi Cas Link kiểm tra tài khoản với dịch vụ tài chính, giúp phát hiện sớm trường hợp tài khoản đăng ký Tài khoản định danh không đúng với khách hàng trên hệ thống của bạn.
| Trường | Kiểu | Mô tả |
|---|---|---|
legalName | string | Tên chủ tài khoản cá nhân |
idNumber | string | Số định danh cá nhân (CCCD/CMND) của chủ tài khoản |
companyName | string | Tên doanh nghiệp |
companyLegalId | string | Mã số thuế/mã số doanh nghiệp |
mobileNumber | string | Số điện thoại khách hàng đăng ký với ngân hàng |
email | string | Email của khách hàng |
Tuỳ theo dịch vụ tài chính là loại cá nhân hay doanh nghiệp mà bạn truyền cặp legalName/idNumber
hoặc companyName/companyLegalId. Trường nào không truyền thì Cas Link để trống ô tương ứng cho người dùng tự nhập.
Gọi API
Tạo phân quyền cho Virtual Account
- CURL
- Javascript (Axios)
curl --location 'https://sandbox.bankhub.dev/grant/token' \
--header 'X-BankHub-Api-Version: 2023-01-01' \
--header 'x-client-id: <CLIENT_ID_HERE>' \
--header 'x-secret-key: <SECRET_KEY_HERE>' \
--header 'Content-Type: application/json' \
--data '{
"scopes": "virtual_account",
"language": "vi",
"redirectUri": "https://your-domain.vn/link",
"fiServiceId": "ebf7fe6d-af63-11ee-aa7e-42010a400022",
"virtualAccountNumber": "V3CASLWXF4RGGY6",
"user": {
"companyName": "CONG TY TNHH ABC",
"companyLegalId": "0312345678",
"mobileNumber": "0901234567",
"email": "ketoan@abc.vn"
}
}'
const axios = require('axios');
const data = JSON.stringify({
"scopes": "virtual_account",
"language": "vi",
"redirectUri": "https://your-domain.vn/link",
"fiServiceId": "ebf7fe6d-af63-11ee-aa7e-42010a400022",
"virtualAccountNumber": "V3CASLWXF4RGGY6",
"user": {
"companyName": "CONG TY TNHH ABC",
"companyLegalId": "0312345678",
"mobileNumber": "0901234567",
"email": "ketoan@abc.vn"
}
});
const config = {
method: 'post',
maxBodyLength: Infinity,
url: 'https://sandbox.bankhub.dev/grant/token',
headers: {
'X-BankHub-Api-Version': '2023-01-01',
'x-client-id': '<CLIENT_ID_HERE>',
'x-secret-key': '<SECRET_KEY_HERE>',
'Content-Type': 'application/json'
},
data: data
};
axios.request(config)
.then((response) => {
console.log(JSON.stringify(response.data));
})
.catch((error) => {
console.log(error);
});
Xem chi tiết API, tại đây
Lấy accessToken từ publicToken
- CURL
- Javascript (Axios)
curl --location 'https://sandbox.bankhub.dev/grant/exchange' \
--header 'X-BankHub-Api-Version: 2023-01-01' \
--header 'x-client-id: <CLIENT_ID_HERE>' \
--header 'x-secret-key: <SECRET_KEY_HERE>' \
--header 'Content-Type: application/json' \
--data '{
"publicToken": "bdbde2bad-7685-4f95-987c-71309a4a3"
}'
const axios = require('axios');
const data = JSON.stringify({
"publicToken": "bdbde2bad-7685-4f95-987c-71309a4a3"
});
let config = {
method: 'post',
maxBodyLength: Infinity,
url: 'https://sandbox.bankhub.dev/grant/exchange',
headers: {
'X-BankHub-Api-Version': '2023-01-01',
'x-client-id': '<CLIENT_ID_HERE>',
'x-secret-key': '<SECRET_KEY_HERE>',
'Content-Type': 'application/json'
},
data: data
};
axios.request(config)
.then((response) => {
console.log(JSON.stringify(response.data));
})
.catch((error) => {
console.log(error);
});
Xem chi tiết API, tại đây
Lấy thông tin Tài khoản định danh
- CURL
- Javascript (Axios)
curl --location 'https://sandbox.bankhub.dev/virtual-account/identity' \
--header 'X-BankHub-Api-Version: 2023-01-01' \
--header 'Authorization: <ACCESS_TOKEN_HERE>' \
--header 'x-client-id: <CLIENT_ID_HERE>' \
--header 'x-secret-key: <SECRET_KEY_HERE>'
const axios = require('axios');
let config = {
method: 'get',
maxBodyLength: Infinity,
url: 'https://sandbox.bankhub.dev/virtual-account/identity',
headers: {
'X-BankHub-Api-Version': '2023-01-01',
'Authorization': '<ACCESS_TOKEN_HERE>',
'x-client-id': '<CLIENT_ID_HERE>',
'x-secret-key': '<SECRET_KEY_HERE>'
}
};
axios.request(config)
.then((response) => {
console.log(JSON.stringify(response.data));
})
.catch((error) => {
console.log(error);
});
Xem chi tiết API, tại đây