Truy vấn thông tin lệnh chi hộ
Truy vấn danh sách và chi tiết các giao dịch trong luồng Maker/Checker (BIDV).
Header Request
| Header | Bắt buộc | Mô tả |
|---|---|---|
Content-Type | ✓ | application/json |
x-client-id | ✓ | Mã định danh của đối tác do TINGEE cung cấp. |
x-signature | ✓ | Chữ ký xác thực HMAC SHA512. |
x-request-timestamp | ✓ | Thời gian gửi request (format: yyyyMMddHHmmssSSS, múi giờ UTC+7) |
Body Parameter
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
bankBin | string | ✓ | Mã BIN ngân hàng (Truyền cố định 970418 - BIDV). |
actionType | string | ✓ | Loại nghiệp vụ: - INTERNAL_TRANSFER- SALARY- BILL_PAYMENT |
inquiryType | string | ✓ | Loại truy vấn. Bao gồm các giá trị sau:
|
role | string | ✓ | Vai trò (Maker / Checker). |
id | string | ✕ | Mã ID giao dịch. Truyền vào khi muốn tra soát chi tiết giao dịch chi hộ theo ID |
batchId | string | ✕ | Mã lô giao dịch. Truyền vào khi muốn tra soát chi tiết giao dịch chi hộ trong Lô |
status | string | ✕ | Trạng thái giao dịch để lọc. - VALID: Giao dịch hợp lệ - INVALID: Giao dịch không hợp lệ Truyền vào khi loại truy vấn inquiryType là BATCH_UPLOAD_INQUIRY |
startDate | string | ✕ | Lọc theo ngày khởi tạo lớn hơn hoặc bằng giá trị nhập vào (định dạng YYYY-MM-DD). |
endDate | string | ✕ | Lọc theo ngày khởi tạo nhỏ hơn hoặc bằng giá trị nhập vào (định dạng YYYY-MM-DD). |
startEffectiveDate | string | ✕ | Lọc theo ngày hiệu lực lớn hơn hoặc bằng giá trị nhập vào (định dạng YYYY-MM-DD). |
endEffectiveDate | string | ✕ | Lọc theo ngày hiệu lực nhỏ hơn hoặc bằng giá trị nhập vào (định dạng YYYY-MM-DD). |
senderAccountNumber | string | ✕ | Số tài khoản thanh toán. |
page | object | ✕ | Thông tin phân trang. |
Chi tiết page
| Trường | Kiểu | Mô tả |
|---|---|---|
pageNum | number | Số trang hiện tại (bắt đầu từ 1). |
pageSize | number | Số lượng bản ghi trên một trang. |
getTotal | boolean | Truyền true nếu muốn hệ thống trả về tổng số bản ghi (total). |
Payload Request mẫu
Mỗi loại truy vấn sẽ yêu cầu các tham số đầu vào và trả về cấu trúc dữ liệu khác nhau. Bạn có thể click chọn từng Tab dưới đây, toàn bộ Ví dụ mã nguồn và Response mẫu bên dưới sẽ tự động đồng bộ theo loại truy vấn mà bạn chọn!
- BATCH_UPLOAD_INQUIRY
- PENDING_APPROVAL_LIST
- MAKER_PENDING_LIST
- TRANSFER_DETAIL
- FO_REPORT_LIST
Lưu ý: Dùng để kiểm tra trạng thái các bản ghi con sau khi Maker tải file lô thành công. Yêu cầu bắt buộc phải truyền
batchId. Có thể dùng thêm trườngstatus(VALID/INVALID) để lọc các bản ghi hợp lệ/không hợp lệ.
{
"bankBin": "970418",
"actionType": "INTERNAL_TRANSFER",
"inquiryType": "BATCH_UPLOAD_INQUIRY",
"role": "Maker",
"batchId": "2667c208-a5ab-4c9c-af4d-cbd4de24b817",
"status": "VALID",
"page": {
"pageNum": 1,
"pageSize": 50,
"getTotal": true
}
}
Lưu ý: Dành cho Checker để lấy danh sách các giao dịch đang chờ phê duyệt. Chỉ cần các bộ lọc cơ bản và
page, không cần truyềnidhaybatchId.
{
"bankBin": "970418",
"actionType": "INTERNAL_TRANSFER",
"inquiryType": "PENDING_APPROVAL_LIST",
"role": "Checker",
"page": {
"pageNum": 1,
"pageSize": 3,
"getTotal": true
}
}
Lưu ý: Dành cho Maker để lấy danh sách các giao dịch nháp (vừa tạo) và đang chờ được đẩy sang phê duyệt. Các bản ghi sẽ có trạng thái là
INIT.
{
"bankBin": "970418",
"actionType": "INTERNAL_TRANSFER",
"inquiryType": "MAKER_PENDING_LIST",
"role": "Maker",
"page": {
"pageNum": 1,
"pageSize": 3,
"getTotal": true
}
}
Lưu ý: Xem chi tiết một giao dịch cụ thể. Bắt buộc truyền
idcủa giao dịch. Không truyền các tham số phân trang (page) hay bộ lọc ngày tháng. Dữ liệu trả về nằm trực tiếp trongdata(không phải mảngitems).
{
"bankBin": "970418",
"actionType": "INTERNAL_TRANSFER",
"inquiryType": "TRANSFER_DETAIL",
"role": "Maker",
"id": "PM0226060400073501"
}
Lưu ý: Báo cáo tổng hợp danh sách các giao dịch (hỗ trợ cho cả Maker và Checker). Thường kết hợp truyền
startDate,endDatehoặcstartEffectiveDate,endEffectiveDateđể lọc theo thời gian.
{
"bankBin": "970418",
"actionType": "INTERNAL_TRANSFER",
"inquiryType": "FO_REPORT_LIST",
"role": "Maker",
"startEffectiveDate": "2026-06-10",
"endEffectiveDate": "2026-06-10",
"page": {
"pageNum": 1,
"pageSize": 3,
"getTotal": true
}
}
Ví dụ mã nguồn
- cURL
- NestJS
- C#
- Java
- PHP
- BATCH_UPLOAD_INQUIRY
- PENDING_APPROVAL_LIST
- MAKER_PENDING_LIST
- TRANSFER_DETAIL
- FO_REPORT_LIST
curl --location --request POST 'https://open-api.tingee.vn/v1/direct-link/transaction-inquiry' \
--header 'accept: application/json' \
--header 'x-signature: YOUR_SIGNATURE' \
--header 'x-request-timestamp: 20251110175110111' \
--header 'x-client-id: YOUR_CLIENT_ID' \
--header 'Content-Type: application/json' \
--data '{
"bankBin": "970418",
"actionType": "INTERNAL_TRANSFER",
"inquiryType": "BATCH_UPLOAD_INQUIRY",
"role": "Maker",
"batchId": "2667c208-a5ab-4c9c-af4d-cbd4de24b817",
"status": "VALID",
"page": {
"pageNum": 1,
"pageSize": 50,
"getTotal": true
}
}'
curl --location --request POST 'https://open-api.tingee.vn/v1/direct-link/transaction-inquiry' \
--header 'accept: application/json' \
--header 'x-signature: YOUR_SIGNATURE' \
--header 'x-request-timestamp: 20251110175110111' \
--header 'x-client-id: YOUR_CLIENT_ID' \
--header 'Content-Type: application/json' \
--data '{
"bankBin": "970418",
"actionType": "INTERNAL_TRANSFER",
"inquiryType": "PENDING_APPROVAL_LIST",
"role": "Checker",
"page": {
"pageNum": 1,
"pageSize": 3,
"getTotal": true
}
}'
curl --location --request POST 'https://open-api.tingee.vn/v1/direct-link/transaction-inquiry' \
--header 'accept: application/json' \
--header 'x-signature: YOUR_SIGNATURE' \
--header 'x-request-timestamp: 20251110175110111' \
--header 'x-client-id: YOUR_CLIENT_ID' \
--header 'Content-Type: application/json' \
--data '{
"bankBin": "970418",
"actionType": "INTERNAL_TRANSFER",
"inquiryType": "MAKER_PENDING_LIST",
"role": "Maker",
"page": {
"pageNum": 1,
"pageSize": 3,
"getTotal": true
}
}'
curl --location --request POST 'https://open-api.tingee.vn/v1/direct-link/transaction-inquiry' \
--header 'accept: application/json' \
--header 'x-signature: YOUR_SIGNATURE' \
--header 'x-request-timestamp: 20251110175110111' \
--header 'x-client-id: YOUR_CLIENT_ID' \
--header 'Content-Type: application/json' \
--data '{
"bankBin": "970418",
"actionType": "INTERNAL_TRANSFER",
"inquiryType": "TRANSFER_DETAIL",
"role": "Maker",
"id": "PM0226060400073501"
}'
curl --location --request POST 'https://open-api.tingee.vn/v1/direct-link/transaction-inquiry' \
--header 'accept: application/json' \
--header 'x-signature: YOUR_SIGNATURE' \
--header 'x-request-timestamp: 20251110175110111' \
--header 'x-client-id: YOUR_CLIENT_ID' \
--header 'Content-Type: application/json' \
--data '{
"bankBin": "970418",
"actionType": "INTERNAL_TRANSFER",
"inquiryType": "FO_REPORT_LIST",
"role": "Maker",
"startEffectiveDate": "2026-06-10",
"endEffectiveDate": "2026-06-10",
"page": {
"pageNum": 1,
"pageSize": 3,
"getTotal": true
}
}'
- BATCH_UPLOAD_INQUIRY
- PENDING_APPROVAL_LIST
- MAKER_PENDING_LIST
- TRANSFER_DETAIL
- FO_REPORT_LIST
import axios from "axios";
import { createHmac } from "crypto";
import { format } from 'date-fns';
async function makeRequest() {
const timestamp = format(new Date(), "yyyyMMddHHmmssSSS");
const secretKey = "YOUR_SECRET_KEY";
const body = {
"bankBin": "970418",
"actionType": "INTERNAL_TRANSFER",
"inquiryType": "BATCH_UPLOAD_INQUIRY",
"role": "Maker",
"batchId": "2667c208-a5ab-4c9c-af4d-cbd4de24b817",
"status": "VALID",
"page": {
"pageNum": 1,
"pageSize": 50,
"getTotal": true
}
};
const message = `${timestamp}:${JSON.stringify(body)}`;
const signature = createHmac('sha512', secretKey).update(message).digest('hex');
const res = await axios({
method: 'POST',
url: 'https://open-api.tingee.vn/v1/direct-link/transaction-inquiry',
data: body,
headers: {
"x-client-id": "YOUR_CLIENT_ID",
"x-request-timestamp": timestamp,
"x-signature": signature,
"Content-Type": "application/json",
}
});
console.log(res.data);
}
import axios from "axios";
import { createHmac } from "crypto";
import { format } from 'date-fns';
async function makeRequest() {
const timestamp = format(new Date(), "yyyyMMddHHmmssSSS");
const secretKey = "YOUR_SECRET_KEY";
const body = {
"bankBin": "970418",
"actionType": "INTERNAL_TRANSFER",
"inquiryType": "PENDING_APPROVAL_LIST",
"role": "Checker",
"page": {
"pageNum": 1,
"pageSize": 3,
"getTotal": true
}
};
const message = `${timestamp}:${JSON.stringify(body)}`;
const signature = createHmac('sha512', secretKey).update(message).digest('hex');
const res = await axios({
method: 'POST',
url: 'https://open-api.tingee.vn/v1/direct-link/transaction-inquiry',
data: body,
headers: {
"x-client-id": "YOUR_CLIENT_ID",
"x-request-timestamp": timestamp,
"x-signature": signature,
"Content-Type": "application/json",
}
});
console.log(res.data);
}
import axios from "axios";
import { createHmac } from "crypto";
import { format } from 'date-fns';
async function makeRequest() {
const timestamp = format(new Date(), "yyyyMMddHHmmssSSS");
const secretKey = "YOUR_SECRET_KEY";
const body = {
"bankBin": "970418",
"actionType": "INTERNAL_TRANSFER",
"inquiryType": "MAKER_PENDING_LIST",
"role": "Maker",
"page": {
"pageNum": 1,
"pageSize": 3,
"getTotal": true
}
};
const message = `${timestamp}:${JSON.stringify(body)}`;
const signature = createHmac('sha512', secretKey).update(message).digest('hex');
const res = await axios({
method: 'POST',
url: 'https://open-api.tingee.vn/v1/direct-link/transaction-inquiry',
data: body,
headers: {
"x-client-id": "YOUR_CLIENT_ID",
"x-request-timestamp": timestamp,
"x-signature": signature,
"Content-Type": "application/json",
}
});
console.log(res.data);
}
import axios from "axios";
import { createHmac } from "crypto";
import { format } from 'date-fns';
async function makeRequest() {
const timestamp = format(new Date(), "yyyyMMddHHmmssSSS");
const secretKey = "YOUR_SECRET_KEY";
const body = {
"bankBin": "970418",
"actionType": "INTERNAL_TRANSFER",
"inquiryType": "TRANSFER_DETAIL",
"role": "Maker",
"id": "PM0226060400073501"
};
const message = `${timestamp}:${JSON.stringify(body)}`;
const signature = createHmac('sha512', secretKey).update(message).digest('hex');
const res = await axios({
method: 'POST',
url: 'https://open-api.tingee.vn/v1/direct-link/transaction-inquiry',
data: body,
headers: {
"x-client-id": "YOUR_CLIENT_ID",
"x-request-timestamp": timestamp,
"x-signature": signature,
"Content-Type": "application/json",
}
});
console.log(res.data);
}
import axios from "axios";
import { createHmac } from "crypto";
import { format } from 'date-fns';
async function makeRequest() {
const timestamp = format(new Date(), "yyyyMMddHHmmssSSS");
const secretKey = "YOUR_SECRET_KEY";
const body = {
"bankBin": "970418",
"actionType": "INTERNAL_TRANSFER",
"inquiryType": "FO_REPORT_LIST",
"role": "Maker",
"startEffectiveDate": "2026-06-10",
"endEffectiveDate": "2026-06-10",
"page": {
"pageNum": 1,
"pageSize": 3,
"getTotal": true
}
};
const message = `${timestamp}:${JSON.stringify(body)}`;
const signature = createHmac('sha512', secretKey).update(message).digest('hex');
const res = await axios({
method: 'POST',
url: 'https://open-api.tingee.vn/v1/direct-link/transaction-inquiry',
data: body,
headers: {
"x-client-id": "YOUR_CLIENT_ID",
"x-request-timestamp": timestamp,
"x-signature": signature,
"Content-Type": "application/json",
}
});
console.log(res.data);
}
- BATCH_UPLOAD_INQUIRY
- PENDING_APPROVAL_LIST
- MAKER_PENDING_LIST
- TRANSFER_DETAIL
- FO_REPORT_LIST
using System;
using System.Net.Http;
using System.Text;
using System.Security.Cryptography;
using System.Threading.Tasks;
public class TingeeApiExample
{
private static readonly HttpClient client = new HttpClient();
public static async Task Main()
{
var timestamp = DateTime.Now.ToString("yyyyMMddHHmmssfff");
var secretKey = "YOUR_SECRET_KEY";
var bodyJson = "{\"bankBin\":\"970418\",\"actionType\":\"INTERNAL_TRANSFER\",\"inquiryType\":\"BATCH_UPLOAD_INQUIRY\",\"role\":\"Maker\",\"batchId\":\"2667c208-a5ab-4c9c-af4d-cbd4de24b817\",\"status\":\"VALID\",\"page\":{\"pageNum\":1,\"pageSize\":50,\"getTotal\":true}}";
var message = $"{timestamp}:{bodyJson}";
var signature = CreateHmacSha512(secretKey, message);
var request = new HttpRequestMessage(HttpMethod.Post, "https://open-api.tingee.vn/v1/direct-link/transaction-inquiry");
request.Headers.Add("x-signature", signature);
request.Headers.Add("x-request-timestamp", timestamp);
request.Headers.Add("x-client-id", "YOUR_CLIENT_ID");
request.Content = new StringContent(bodyJson, Encoding.UTF8, "application/json");
var response = await client.SendAsync(request);
string result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
}
private static string CreateHmacSha512(string key, string message)
{
using var hmac = new HMACSHA512(Encoding.UTF8.GetBytes(key));
var hash = hmac.ComputeHash(Encoding.UTF8.GetBytes(message));
return BitConverter.ToString(hash).Replace("-", "").ToLower();
}
}
using System;
using System.Net.Http;
using System.Text;
using System.Security.Cryptography;
using System.Threading.Tasks;
public class TingeeApiExample
{
private static readonly HttpClient client = new HttpClient();
public static async Task Main()
{
var timestamp = DateTime.Now.ToString("yyyyMMddHHmmssfff");
var secretKey = "YOUR_SECRET_KEY";
var bodyJson = "{\"bankBin\":\"970418\",\"actionType\":\"INTERNAL_TRANSFER\",\"inquiryType\":\"PENDING_APPROVAL_LIST\",\"role\":\"Checker\",\"page\":{\"pageNum\":1,\"pageSize\":3,\"getTotal\":true}}";
var message = $"{timestamp}:{bodyJson}";
var signature = CreateHmacSha512(secretKey, message);
var request = new HttpRequestMessage(HttpMethod.Post, "https://open-api.tingee.vn/v1/direct-link/transaction-inquiry");
request.Headers.Add("x-signature", signature);
request.Headers.Add("x-request-timestamp", timestamp);
request.Headers.Add("x-client-id", "YOUR_CLIENT_ID");
request.Content = new StringContent(bodyJson, Encoding.UTF8, "application/json");
var response = await client.SendAsync(request);
string result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
}
private static string CreateHmacSha512(string key, string message)
{
using var hmac = new HMACSHA512(Encoding.UTF8.GetBytes(key));
var hash = hmac.ComputeHash(Encoding.UTF8.GetBytes(message));
return BitConverter.ToString(hash).Replace("-", "").ToLower();
}
}
using System;
using System.Net.Http;
using System.Text;
using System.Security.Cryptography;
using System.Threading.Tasks;
public class TingeeApiExample
{
private static readonly HttpClient client = new HttpClient();
public static async Task Main()
{
var timestamp = DateTime.Now.ToString("yyyyMMddHHmmssfff");
var secretKey = "YOUR_SECRET_KEY";
var bodyJson = "{\"bankBin\":\"970418\",\"actionType\":\"INTERNAL_TRANSFER\",\"inquiryType\":\"MAKER_PENDING_LIST\",\"role\":\"Maker\",\"page\":{\"pageNum\":1,\"pageSize\":3,\"getTotal\":true}}";
var message = $"{timestamp}:{bodyJson}";
var signature = CreateHmacSha512(secretKey, message);
var request = new HttpRequestMessage(HttpMethod.Post, "https://open-api.tingee.vn/v1/direct-link/transaction-inquiry");
request.Headers.Add("x-signature", signature);
request.Headers.Add("x-request-timestamp", timestamp);
request.Headers.Add("x-client-id", "YOUR_CLIENT_ID");
request.Content = new StringContent(bodyJson, Encoding.UTF8, "application/json");
var response = await client.SendAsync(request);
string result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
}
private static string CreateHmacSha512(string key, string message)
{
using var hmac = new HMACSHA512(Encoding.UTF8.GetBytes(key));
var hash = hmac.ComputeHash(Encoding.UTF8.GetBytes(message));
return BitConverter.ToString(hash).Replace("-", "").ToLower();
}
}
using System;
using System.Net.Http;
using System.Text;
using System.Security.Cryptography;
using System.Threading.Tasks;
public class TingeeApiExample
{
private static readonly HttpClient client = new HttpClient();
public static async Task Main()
{
var timestamp = DateTime.Now.ToString("yyyyMMddHHmmssfff");
var secretKey = "YOUR_SECRET_KEY";
var bodyJson = "{\"bankBin\":\"970418\",\"actionType\":\"INTERNAL_TRANSFER\",\"inquiryType\":\"TRANSFER_DETAIL\",\"role\":\"Maker\",\"id\":\"PM0226060400073501\"}";
var message = $"{timestamp}:{bodyJson}";
var signature = CreateHmacSha512(secretKey, message);
var request = new HttpRequestMessage(HttpMethod.Post, "https://open-api.tingee.vn/v1/direct-link/transaction-inquiry");
request.Headers.Add("x-signature", signature);
request.Headers.Add("x-request-timestamp", timestamp);
request.Headers.Add("x-client-id", "YOUR_CLIENT_ID");
request.Content = new StringContent(bodyJson, Encoding.UTF8, "application/json");
var response = await client.SendAsync(request);
string result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
}
private static string CreateHmacSha512(string key, string message)
{
using var hmac = new HMACSHA512(Encoding.UTF8.GetBytes(key));
var hash = hmac.ComputeHash(Encoding.UTF8.GetBytes(message));
return BitConverter.ToString(hash).Replace("-", "").ToLower();
}
}
using System;
using System.Net.Http;
using System.Text;
using System.Security.Cryptography;
using System.Threading.Tasks;
public class TingeeApiExample
{
private static readonly HttpClient client = new HttpClient();
public static async Task Main()
{
var timestamp = DateTime.Now.ToString("yyyyMMddHHmmssfff");
var secretKey = "YOUR_SECRET_KEY";
var bodyJson = "{\"bankBin\":\"970418\",\"actionType\":\"INTERNAL_TRANSFER\",\"inquiryType\":\"FO_REPORT_LIST\",\"role\":\"Maker\",\"startEffectiveDate\":\"2026-06-10\",\"endEffectiveDate\":\"2026-06-10\",\"page\":{\"pageNum\":1,\"pageSize\":3,\"getTotal\":true}}";
var message = $"{timestamp}:{bodyJson}";
var signature = CreateHmacSha512(secretKey, message);
var request = new HttpRequestMessage(HttpMethod.Post, "https://open-api.tingee.vn/v1/direct-link/transaction-inquiry");
request.Headers.Add("x-signature", signature);
request.Headers.Add("x-request-timestamp", timestamp);
request.Headers.Add("x-client-id", "YOUR_CLIENT_ID");
request.Content = new StringContent(bodyJson, Encoding.UTF8, "application/json");
var response = await client.SendAsync(request);
string result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
}
private static string CreateHmacSha512(string key, string message)
{
using var hmac = new HMACSHA512(Encoding.UTF8.GetBytes(key));
var hash = hmac.ComputeHash(Encoding.UTF8.GetBytes(message));
return BitConverter.ToString(hash).Replace("-", "").ToLower();
}
}
- BATCH_UPLOAD_INQUIRY
- PENDING_APPROVAL_LIST
- MAKER_PENDING_LIST
- TRANSFER_DETAIL
- FO_REPORT_LIST
import java.net.http.*;
import java.net.URI;
import java.nio.charset.StandardCharsets;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class TingeeApiExample {
public static void main(String[] args) throws Exception {
String secretKey = "YOUR_SECRET_KEY";
String timestamp = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
String bodyJson = "{\"bankBin\":\"970418\",\"actionType\":\"INTERNAL_TRANSFER\",\"inquiryType\":\"BATCH_UPLOAD_INQUIRY\",\"role\":\"Maker\",\"batchId\":\"2667c208-a5ab-4c9c-af4d-cbd4de24b817\",\"status\":\"VALID\",\"page\":{\"pageNum\":1,\"pageSize\":50,\"getTotal\":true}}";
String message = timestamp + ":" + bodyJson;
String signature = hmacSha512(secretKey, message);
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://open-api.tingee.vn/v1/direct-link/transaction-inquiry"))
.header("accept", "application/json")
.header("x-signature", signature)
.header("x-request-timestamp", timestamp)
.header("x-client-id", "YOUR_CLIENT_ID")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(bodyJson))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
private static String hmacSha512(String key, String data) throws Exception {
Mac mac = Mac.getInstance("HmacSHA512");
SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "HmacSHA512");
mac.init(secretKeySpec);
byte[] hash = mac.doFinal(data.getBytes(StandardCharsets.UTF_8));
return toHex(hash);
}
private static String toHex(byte[] bytes) {
StringBuilder hex = new StringBuilder(bytes.length * 2);
for (byte b : bytes) {
hex.append(String.format("%02x", b));
}
return hex.toString();
}
}
import java.net.http.*;
import java.net.URI;
import java.nio.charset.StandardCharsets;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class TingeeApiExample {
public static void main(String[] args) throws Exception {
String secretKey = "YOUR_SECRET_KEY";
String timestamp = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
String bodyJson = "{\"bankBin\":\"970418\",\"actionType\":\"INTERNAL_TRANSFER\",\"inquiryType\":\"PENDING_APPROVAL_LIST\",\"role\":\"Checker\",\"page\":{\"pageNum\":1,\"pageSize\":3,\"getTotal\":true}}";
String message = timestamp + ":" + bodyJson;
String signature = hmacSha512(secretKey, message);
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://open-api.tingee.vn/v1/direct-link/transaction-inquiry"))
.header("accept", "application/json")
.header("x-signature", signature)
.header("x-request-timestamp", timestamp)
.header("x-client-id", "YOUR_CLIENT_ID")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(bodyJson))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
private static String hmacSha512(String key, String data) throws Exception {
Mac mac = Mac.getInstance("HmacSHA512");
SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "HmacSHA512");
mac.init(secretKeySpec);
byte[] hash = mac.doFinal(data.getBytes(StandardCharsets.UTF_8));
return toHex(hash);
}
private static String toHex(byte[] bytes) {
StringBuilder hex = new StringBuilder(bytes.length * 2);
for (byte b : bytes) {
hex.append(String.format("%02x", b));
}
return hex.toString();
}
}
import java.net.http.*;
import java.net.URI;
import java.nio.charset.StandardCharsets;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class TingeeApiExample {
public static void main(String[] args) throws Exception {
String secretKey = "YOUR_SECRET_KEY";
String timestamp = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
String bodyJson = "{\"bankBin\":\"970418\",\"actionType\":\"INTERNAL_TRANSFER\",\"inquiryType\":\"MAKER_PENDING_LIST\",\"role\":\"Maker\",\"page\":{\"pageNum\":1,\"pageSize\":3,\"getTotal\":true}}";
String message = timestamp + ":" + bodyJson;
String signature = hmacSha512(secretKey, message);
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://open-api.tingee.vn/v1/direct-link/transaction-inquiry"))
.header("accept", "application/json")
.header("x-signature", signature)
.header("x-request-timestamp", timestamp)
.header("x-client-id", "YOUR_CLIENT_ID")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(bodyJson))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
private static String hmacSha512(String key, String data) throws Exception {
Mac mac = Mac.getInstance("HmacSHA512");
SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "HmacSHA512");
mac.init(secretKeySpec);
byte[] hash = mac.doFinal(data.getBytes(StandardCharsets.UTF_8));
return toHex(hash);
}
private static String toHex(byte[] bytes) {
StringBuilder hex = new StringBuilder(bytes.length * 2);
for (byte b : bytes) {
hex.append(String.format("%02x", b));
}
return hex.toString();
}
}
import java.net.http.*;
import java.net.URI;
import java.nio.charset.StandardCharsets;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class TingeeApiExample {
public static void main(String[] args) throws Exception {
String secretKey = "YOUR_SECRET_KEY";
String timestamp = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
String bodyJson = "{\"bankBin\":\"970418\",\"actionType\":\"INTERNAL_TRANSFER\",\"inquiryType\":\"TRANSFER_DETAIL\",\"role\":\"Maker\",\"id\":\"PM0226060400073501\"}";
String message = timestamp + ":" + bodyJson;
String signature = hmacSha512(secretKey, message);
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://open-api.tingee.vn/v1/direct-link/transaction-inquiry"))
.header("accept", "application/json")
.header("x-signature", signature)
.header("x-request-timestamp", timestamp)
.header("x-client-id", "YOUR_CLIENT_ID")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(bodyJson))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
private static String hmacSha512(String key, String data) throws Exception {
Mac mac = Mac.getInstance("HmacSHA512");
SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "HmacSHA512");
mac.init(secretKeySpec);
byte[] hash = mac.doFinal(data.getBytes(StandardCharsets.UTF_8));
return toHex(hash);
}
private static String toHex(byte[] bytes) {
StringBuilder hex = new StringBuilder(bytes.length * 2);
for (byte b : bytes) {
hex.append(String.format("%02x", b));
}
return hex.toString();
}
}
import java.net.http.*;
import java.net.URI;
import java.nio.charset.StandardCharsets;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class TingeeApiExample {
public static void main(String[] args) throws Exception {
String secretKey = "YOUR_SECRET_KEY";
String timestamp = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
String bodyJson = "{\"bankBin\":\"970418\",\"actionType\":\"INTERNAL_TRANSFER\",\"inquiryType\":\"FO_REPORT_LIST\",\"role\":\"Maker\",\"startEffectiveDate\":\"2026-06-10\",\"endEffectiveDate\":\"2026-06-10\",\"page\":{\"pageNum\":1,\"pageSize\":3,\"getTotal\":true}}";
String message = timestamp + ":" + bodyJson;
String signature = hmacSha512(secretKey, message);
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://open-api.tingee.vn/v1/direct-link/transaction-inquiry"))
.header("accept", "application/json")
.header("x-signature", signature)
.header("x-request-timestamp", timestamp)
.header("x-client-id", "YOUR_CLIENT_ID")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(bodyJson))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
private static String hmacSha512(String key, String data) throws Exception {
Mac mac = Mac.getInstance("HmacSHA512");
SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "HmacSHA512");
mac.init(secretKeySpec);
byte[] hash = mac.doFinal(data.getBytes(StandardCharsets.UTF_8));
return toHex(hash);
}
private static String toHex(byte[] bytes) {
StringBuilder hex = new StringBuilder(bytes.length * 2);
for (byte b : bytes) {
hex.append(String.format("%02x", b));
}
return hex.toString();
}
}
- BATCH_UPLOAD_INQUIRY
- PENDING_APPROVAL_LIST
- MAKER_PENDING_LIST
- TRANSFER_DETAIL
- FO_REPORT_LIST
function makeApiRequest() {
\$timestamp = date("YmdHis") . substr((string)microtime(true), -3);
\$secretKey = "YOUR_SECRET_KEY";
\$jsonBody = '{"bankBin":"970418","actionType":"INTERNAL_TRANSFER","inquiryType":"BATCH_UPLOAD_INQUIRY","role":"Maker","batchId":"2667c208-a5ab-4c9c-af4d-cbd4de24b817","status":"VALID","page":{"pageNum":1,"pageSize":50,"getTotal":true}}';
\$message = \$timestamp . ":" . \$jsonBody;
\$signature = hash_hmac("sha512", \$message, \$secretKey);
\$ch = curl_init();
curl_setopt_array(\$ch, [
CURLOPT_URL => "https://open-api.tingee.vn/v1/direct-link/transaction-inquiry",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => \$jsonBody,
CURLOPT_HTTPHEADER => [
"Accept: application/json",
"Content-Type: application/json",
"x-client-id: YOUR_CLIENT_ID",
"x-request-timestamp: " . \$timestamp,
"x-signature: " . \$signature
]
]);
\$response = curl_exec(\$ch);
curl_close(\$ch);
echo \$response;
}
makeApiRequest();
function makeApiRequest() {
\$timestamp = date("YmdHis") . substr((string)microtime(true), -3);
\$secretKey = "YOUR_SECRET_KEY";
\$jsonBody = '{"bankBin":"970418","actionType":"INTERNAL_TRANSFER","inquiryType":"PENDING_APPROVAL_LIST","role":"Checker","page":{"pageNum":1,"pageSize":3,"getTotal":true}}';
\$message = \$timestamp . ":" . \$jsonBody;
\$signature = hash_hmac("sha512", \$message, \$secretKey);
\$ch = curl_init();
curl_setopt_array(\$ch, [
CURLOPT_URL => "https://open-api.tingee.vn/v1/direct-link/transaction-inquiry",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => \$jsonBody,
CURLOPT_HTTPHEADER => [
"Accept: application/json",
"Content-Type: application/json",
"x-client-id: YOUR_CLIENT_ID",
"x-request-timestamp: " . \$timestamp,
"x-signature: " . \$signature
]
]);
\$response = curl_exec(\$ch);
curl_close(\$ch);
echo \$response;
}
makeApiRequest();
function makeApiRequest() {
\$timestamp = date("YmdHis") . substr((string)microtime(true), -3);
\$secretKey = "YOUR_SECRET_KEY";
\$jsonBody = '{"bankBin":"970418","actionType":"INTERNAL_TRANSFER","inquiryType":"MAKER_PENDING_LIST","role":"Maker","page":{"pageNum":1,"pageSize":3,"getTotal":true}}';
\$message = \$timestamp . ":" . \$jsonBody;
\$signature = hash_hmac("sha512", \$message, \$secretKey);
\$ch = curl_init();
curl_setopt_array(\$ch, [
CURLOPT_URL => "https://open-api.tingee.vn/v1/direct-link/transaction-inquiry",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => \$jsonBody,
CURLOPT_HTTPHEADER => [
"Accept: application/json",
"Content-Type: application/json",
"x-client-id: YOUR_CLIENT_ID",
"x-request-timestamp: " . \$timestamp,
"x-signature: " . \$signature
]
]);
\$response = curl_exec(\$ch);
curl_close(\$ch);
echo \$response;
}
makeApiRequest();
function makeApiRequest() {
\$timestamp = date("YmdHis") . substr((string)microtime(true), -3);
\$secretKey = "YOUR_SECRET_KEY";
\$jsonBody = '{"bankBin":"970418","actionType":"INTERNAL_TRANSFER","inquiryType":"TRANSFER_DETAIL","role":"Maker","id":"PM0226060400073501"}';
\$message = \$timestamp . ":" . \$jsonBody;
\$signature = hash_hmac("sha512", \$message, \$secretKey);
\$ch = curl_init();
curl_setopt_array(\$ch, [
CURLOPT_URL => "https://open-api.tingee.vn/v1/direct-link/transaction-inquiry",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => \$jsonBody,
CURLOPT_HTTPHEADER => [
"Accept: application/json",
"Content-Type: application/json",
"x-client-id: YOUR_CLIENT_ID",
"x-request-timestamp: " . \$timestamp,
"x-signature: " . \$signature
]
]);
\$response = curl_exec(\$ch);
curl_close(\$ch);
echo \$response;
}
makeApiRequest();
function makeApiRequest() {
\$timestamp = date("YmdHis") . substr((string)microtime(true), -3);
\$secretKey = "YOUR_SECRET_KEY";
\$jsonBody = '{"bankBin":"970418","actionType":"INTERNAL_TRANSFER","inquiryType":"FO_REPORT_LIST","role":"Maker","startEffectiveDate":"2026-06-10","endEffectiveDate":"2026-06-10","page":{"pageNum":1,"pageSize":3,"getTotal":true}}';
\$message = \$timestamp . ":" . \$jsonBody;
\$signature = hash_hmac("sha512", \$message, \$secretKey);
\$ch = curl_init();
curl_setopt_array(\$ch, [
CURLOPT_URL => "https://open-api.tingee.vn/v1/direct-link/transaction-inquiry",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => \$jsonBody,
CURLOPT_HTTPHEADER => [
"Accept: application/json",
"Content-Type: application/json",
"x-client-id: YOUR_CLIENT_ID",
"x-request-timestamp: " . \$timestamp,
"x-signature: " . \$signature
]
]);
\$response = curl_exec(\$ch);
curl_close(\$ch);
echo \$response;
}
makeApiRequest();
Response mẫu
- BATCH_UPLOAD_INQUIRY
- PENDING_APPROVAL_LIST
- MAKER_PENDING_LIST
- TRANSFER_DETAIL
- FO_REPORT_LIST
{
"code": "00",
"message": "Success",
"data": {
"enableUpdateName": false,
"items": [
{
"id": "6dbf35f0-99b2-4d63-8ab3-3027e8cc263d",
"transactionType": "in-bank",
"errorDescription": null,
"senderAccountNumber": "8600007007",
"amount": "32987",
"currency": "VND",
"remark": "Check1",
"feeMethod": "O",
"feeAccountNumber": "8600007007",
"paymentMethod": "to-acc",
"originId": "TRANS_1106_A04",
"notAuthorized": false,
"batchId": "2667c208-a5ab-4c9c-af4d-cbd4de24b817",
"effectiveDate": "11/06/2026",
"status": "VALID",
"receiverAccountNumber": "2220366666",
"receiverAccountName": "TITLE 1 2220366666",
"receiverBankName": "Ngan hang TMCP Dau tu va Phat trien Viet Nam",
"receiverBranchCode": "222000"
}
],
"validRows": 1,
"invalidRows": 0,
"total": 1
}
}
{
"code": "00",
"message": "Success",
"data": {
"items": [
{
"id": "PM0226060200073011",
"status": "PENDING_APPROVAL",
"statusDesc": "Chờ duyệt",
"amount": 44220,
"currency": "VND",
"createdDate": "2026-06-02T17:42:02.024833",
"createdBy": "25607354makerotv",
"remark": "Check1",
"effectiveDate": "2026-06-02",
"paymentMethod": "to-acc",
"transactionType": "in-bank",
"channel": "ERP",
"originId": "TRANS_0206_B07",
"feeTotal": 11000,
"transactionDesc": "Chuyển tiền trong BIDV khác CTK",
"feeMethod": "O",
"feeAccountNumber": "8600007007",
"priority": true,
"receiverAccountNumber": "2220366666",
"receiverAccountName": "Title 1 2220366666",
"receiverBankCode": "01202001",
"receiverBankShortName": "BIDV",
"receiverBranchCode": "222000",
"senderAccountNumber": "8600007007",
"senderAccountName": "Title 1 8600007007"
}
],
"total": 43
}
}
{
"code": "00",
"message": "Success",
"data": {
"items": [
{
"id": "PM0226061000074420",
"status": "INIT",
"statusDesc": "Tạo mới",
"amount": 32987,
"currency": "VND",
"createdDate": "2026-06-10T15:52:49.708424",
"createdBy": "25607354makerotv",
"remark": "Check1",
"effectiveDate": "2026-06-10",
"paymentMethod": "to-acc",
"transactionType": "in-bank",
"channel": "ERP",
"originId": "TRANS_1006_A04",
"feeTotal": 11000,
"transactionDesc": "Chuyển tiền trong BIDV khác CTK",
"feeMethod": "O",
"feeAccountNumber": "8600007007",
"priority": true,
"receiverAccountNumber": "2220366666",
"receiverAccountName": "Title 1 2220366666",
"receiverBankCode": "01202001",
"receiverBankShortName": "BIDV",
"receiverBranchCode": "222000",
"senderAccountNumber": "8600007007",
"senderAccountName": "Title 1 8600007007"
}
],
"total": 119
}
}
{
"code": "00",
"message": "Success",
"data": {
"id": "PM0226060400073501",
"transactionType": "in-bank",
"transactionId": "PM0226061300074843",
"transactionCode": "PM02",
"channel": "ERP",
"effectiveDate": "2026-06-04",
"status": "SUCCESS",
"statusDesc": "Thành công",
"transactionDesc": "Chuyển tiền trong BIDV khác CTK",
"createdBy": "25607354makerotv",
"priority": false,
"amount": 32987,
"batchNo": "17EF138E3BFB50D7FE909DE84200D778",
"currency": "VND",
"feeCurrency": "VND",
"remark": "Check1",
"coreRef": "11324gyA-89bif3i2P",
"amountText": "Ba mươi hai nghìn chín trăm tám mươi bảy đồng",
"paymentMethod": "to-acc",
"bankTransferType": 0,
"stateDescription": "Thành công",
"feeAccountNumber": "8600007007",
"feeMethod": "O",
"feeOpt": "INST",
"feeTotal": 11000,
"originId": "TRANS_0406_A04",
"receiverAccountNumber": "2220366666",
"receiverAccountName": "TITLE 1 2220366666",
"receiverBankCode": "01202001",
"receiverBankName": "Ngan hang TMCP Dau tu va Phat trien Viet Nam",
"receiverBankShortName": "BIDV",
"receiverBranchCode": "222000",
"receiverCurrency": "VND",
"senderAccountNumber": "8600007007",
"senderAccountName": "Title 1 8600007007"
}
}
{
"code": "00",
"message": "Success",
"data": {
"items": [
{
"id": "PM1326061100074601",
"status": "INIT",
"state": "INIT",
"statusDesc": "Tạo mới",
"amount": 13456,
"currency": "VND",
"createdDate": "2026-06-11T15:20:27.669607",
"createdBy": "25607354makerotv",
"remark": "Check3",
"effectiveDate": "2026-06-11",
"paymentMethod": "to-acc",
"transactionType": "regular-out",
"channel": "ERP",
"originId": "TRANS_1106_A30",
"batchNo": "C7DF645985F84077BDAFEDA83944D1FB",
"feeOpt": "INST",
"feeTotal": 11000,
"transactionDesc": "Chuyển tiền ngoài BIDV thông qua STK",
"transactionId": "PM1326061300074844",
"transactionCode": "PM13",
"feeMethod": "O",
"feeAccountNumber": "8600007007",
"receiverAccountNumber": "6666688811",
"receiverAccountName": "NGUYEN LOC PHAT",
"receiverBankCode": "79304001",
"receiverBankShortName": "DongA Bank",
"senderAccountNumber": "8600007007",
"senderAccountName": "Title 1 8600007007"
}
],
"total": 2
}
}
Cấu trúc Response data
Lưu ý: Cấu trúc của
datasẽ phụ thuộc vàoinquiryType.
- Với các loại truy vấn danh sách (
BATCH_UPLOAD_INQUIRY,PENDING_APPROVAL_LIST,MAKER_PENDING_LIST,FO_REPORT_LIST),datasẽ chứa mảngitemsvà các thông tin phân trang.- Với loại truy vấn chi tiết (
TRANSFER_DETAIL),datasẽ chứa trực tiếp thông tin của giao dịch đó (giống với chi tiết phần tử trong mảngitems).
| Trường | Kiểu | Mô tả |
|---|---|---|
total | number | Tổng số lượng bản ghi thoả mãn điều kiện lọc. |
validRows | number | Số lượng bản ghi hợp lệ (chỉ trả về với BATCH_UPLOAD_INQUIRY). |
invalidRows | number | Số lượng bản ghi không hợp lệ (chỉ trả về với BATCH_UPLOAD_INQUIRY). |
items | array | Danh sách thông tin chi tiết các giao dịch. |
Chi tiết thông tin giao dịch (trong mảng data.items hoặc trực tiếp trong data đối với TRANSFER_DETAIL)
| Trường | Kiểu | Mô tả |
|---|---|---|
id | string | Mã ID giao dịch trên hệ thống TINGEE. |
status | string | Trạng thái giao dịch. |
statusDesc | string | Mô tả trạng thái giao dịch bằng tiếng Việt. |
amount | number | Số tiền giao dịch. |
currency | string | Loại tiền tệ (VND). |
createdDate | string | Thời gian khởi tạo giao dịch (ISO 8601). |
createdBy | string | Username của người khởi tạo (Maker). |
remark | string | Nội dung diễn giải giao dịch. |
effectiveDate | string | Ngày hiệu lực của giao dịch (YYYY-MM-DD). |
paymentMethod | string | Phương thức thanh toán (VD: to-acc - Qua số tài khoản). |
transactionType | string | Phân loại giao dịch (VD: in-bank, regular-out, fast-out). |
originId | string | Mã tham chiếu giao dịch gốc sinh ra bởi Ngân hàng. |
feeTotal | number | Tổng phí giao dịch. |
transactionDesc | string | Loại giao dịch (VD: Chuyển tiền trong BIDV khác CTK). |
feeMethod | string | Người chịu phí (O: Người gửi, R: Người nhận). |
feeAccountNumber | string | Số tài khoản thu phí. |
priority | boolean | Cờ ưu tiên xử lý. |
receiverAccountNumber | string | Số tài khoản người nhận. |
receiverAccountName | string | Tên tài khoản người nhận. |
receiverBankCode | string | Mã ngân hàng nhận (Mã CITAD). |
receiverBankShortName | string | Tên viết tắt ngân hàng nhận. |
receiverBranchCode | string | Mã chi nhánh ngân hàng nhận. |
senderAccountNumber | string | Số tài khoản người gửi. |
senderAccountName | string | Tên tài khoản người gửi. |
batchId | string | Mã ID lô giao dịch (nếu là giao dịch trong lô). |
batchNo | string | Mã lô do hệ thống ngân hàng cấp. |
transactionId | string | Mã loại giao dịch phía ngân hàng. |
transactionCode | string | Mã loại giao dịch phía ngân hàng. |
state | string | Trạng thái phụ của giao dịch. |
amountText | string | Số tiền đọc bằng chữ. |
bankTransferType | number | Loại chuyển khoản phía ngân hàng. |
receiverCurrency | string | Loại tiền tệ của người nhận. |
Mã lỗi thường gặp
| Code | Mô tả | Hướng xử lý |
|---|---|---|
90 | Sai format timestamp | Kiểm tra format yyyyMMddHHmmssSSS. |
91 | Request quá hạn | Kiểm tra thời gian gửi request. |
97 | Sai chữ ký | Kiểm tra lại Secret Key và logic tạo Signature. |
Others | Lỗi khác | Xem Danh sách mã lỗi. |