[ACB] Cấu hình tài khoản DN
Lưu ý
API này chỉ áp dụng cho ngân hàng ACB.
API cho phép liên kết tài khoản ngân hàng doanh nghiệp ACB với Merchant. Sau khi cấu hình thành công, hệ thống trả về confirmId để sử dụng ở bước xác nhận.
POST
URLhttps://uat-open-api.tingee.vn/v1/merchant/config-account-business
Liên kết tài khoản ngân hàng doanh nghiệp và sinh mã xác nhận (confirmId) để hoàn tất quá trình cấu hình.
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. Xem thêm tại Cách sinh chữ ký. |
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ả |
|---|---|---|---|
merchantId | number | ✕ | ID của Merchant (Bắt buộc nếu kết nối bằng tài khoản Master Merchant). |
bankBin | string | ✕ | Mã BIN ngân hàng. Mặc định là 970416 |
vaPrefix | string | ✓ | Tiền tố cho Virtual Account. |
accountName | string | ✓ | Tên chủ tài khoản ngân hàng. |
accountNumber | string | ✓ | Số tài khoản ngân hàng doanh nghiệp. |
mobile | string | ✓ | Số điện thoại đăng ký tài khoản ngân hàng. |
acbUserId | string | ✓ | ID người dùng trên hệ thống ngân hàng (do ngân hàng cung cấp). |
Ví dụ mã nguồn
- cURL
- NestJS
- C#
- Java
- PHP
curl --location --request POST 'https://uat-open-api.tingee.vn/v1/merchant/config-account-business' \
--header 'x-signature: YOUR_SIGNATURE' \
--header 'x-request-timestamp: 20251209103911111' \
--header 'x-client-id: YOUR_CLIENT_ID' \
--header 'Content-Type: application/json' \
--data '{
"bankBin": "970416",
"vaPrefix": "TINGEE",
"accountName": "CONG TY TNHH ABC",
"accountNumber": "1234567890",
"mobile": "0901234567",
"acbUserId": "ACB_USER_001"
}'
import axios from "axios";
import { createHmac } from "crypto";
import { format } from 'date-fns';
async function configAccountBusiness() {
const body = {
bankBin: "970416",
vaPrefix: "TINGEE",
accountName: "CONG TY TNHH ABC",
accountNumber: "1234567890",
mobile: "0901234567",
acbUserId: "ACB_USER_001",
};
const timestamp = format(new Date(), "yyyyMMddHHmmssSSS");
const secretKey = "YOUR_SECRET_KEY";
const message = `${timestamp}:${JSON.stringify(body)}`;
const signature = createHmac('sha512', secretKey).update(message).digest('hex');
const res = await axios.post(
'https://uat-open-api.tingee.vn/v1/merchant/config-account-business',
body,
{
headers: {
'x-signature': signature,
'x-request-timestamp': timestamp,
'x-client-id': 'YOUR_CLIENT_ID',
'Content-Type': 'application/json',
},
}
);
console.log(res.data);
}
var body = new {
bankBin = "970416",
vaPrefix = "TINGEE",
accountName = "CONG TY TNHH ABC",
accountNumber = "1234567890",
mobile = "0901234567",
acbUserId = "ACB_USER_001"
};
var timestamp = DateTime.Now.ToString("yyyyMMddHHmmssfff");
var bodyJson = JsonSerializer.Serialize(body);
var message = $"{timestamp}:{bodyJson}";
using var hmac = new HMACSHA512(Encoding.UTF8.GetBytes("YOUR_SECRET_KEY"));
var signature = BitConverter.ToString(hmac.ComputeHash(Encoding.UTF8.GetBytes(message))).Replace("-","").ToLower();
var request = new HttpRequestMessage(HttpMethod.Post, "https://uat-open-api.tingee.vn/v1/merchant/config-account-business");
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 new HttpClient().SendAsync(request);
Console.WriteLine(await response.Content.ReadAsStringAsync());
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 ConfigAccountBusiness {
public static void main(String[] args) throws Exception {
String bodyJson = "{"bankBin":"970416","vaPrefix":"TINGEE","accountName":"CONG TY TNHH ABC","accountNumber":"1234567890","mobile":"0901234567","acbUserId":"ACB_USER_001"}";
String secretKey = "YOUR_SECRET_KEY";
String timestamp = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
Mac mac = Mac.getInstance("HmacSHA512");
mac.init(new SecretKeySpec(secretKey.getBytes(StandardCharsets.UTF_8), "HmacSHA512"));
byte[] hash = mac.doFinal((timestamp + ":" + bodyJson).getBytes(StandardCharsets.UTF_8));
StringBuilder signature = new StringBuilder();
for (byte b : hash) signature.append(String.format("%02x", b));
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://uat-open-api.tingee.vn/v1/merchant/config-account-business"))
.header("x-signature", signature.toString())
.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 = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
$body = [
"bankBin" => "970416",
"vaPrefix" => "TINGEE",
"accountName" => "CONG TY TNHH ABC",
"accountNumber" => "1234567890",
"mobile" => "0901234567",
"acbUserId" => "ACB_USER_001"
];
$jsonBody = json_encode($body);
$timestamp = date("YmdHis") . substr((string)microtime(true), -3);
$signature = hash_hmac("sha512", $timestamp . ":" . $jsonBody, "YOUR_SECRET_KEY");
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => "https://uat-open-api.tingee.vn/v1/merchant/config-account-business",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $jsonBody,
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-client-id: YOUR_CLIENT_ID",
"x-request-timestamp: $timestamp",
"x-signature: $signature"
]
]);
echo curl_exec($ch);
curl_close($ch);
Response mẫu
{
"code": "00",
"message": "Success",
"data": {
"confirmId": "CONFIRM_ABC123"
}
}
| Trường | Kiểu | Mô tả |
|---|---|---|
code | string | Mã kết quả (00 = Thành công). |
message | string | Thông điệp phản hồi. |
data.confirmId | string | Mã xác nhận để hoàn tất quá trình cấu hình tài khoản. Đối tác vui lòng truyền confirmId vào API Cấu hình tài khoản để hoàn tất xác 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. |