Chi tiết đơn hàng POS
API này dùng để tra cứu thông tin và trạng thái thanh toán của một đơn hàng POS đã tạo. Dữ liệu được lấy trực tiếp từ hệ thống Payoo.
GET
URLhttps://open-api.tingee.vn/v1/get-detail-pos-bill
Tra cứu chi tiết đơn hàng POS theo billId.
Header Request
| Header | Bắt buộc | Mô tả |
|---|---|---|
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. Với request GET, chuỗi ký là {x-request-timestamp}:{}. 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) |
Query Parameters
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
bankBin | string | ✓ | Truyền cố định PAYOO. |
vaAccountNumber | string | ✓ | Mã thiết bị POS Payoo. |
billId | string | ✓ | Mã đơn hàng nhận được từ API Tạo đơn hàng POS. |
Ví dụ mã nguồn
- cURL
- NestJS
- C#
- Java
- PHP
curl --location --request GET 'https://open-api.tingee.vn/v1/get-detail-pos-bill?bankBin=PAYOO&vaAccountNumber=POS00012345&billId=9f1c2b7e4a5d4c3b8e2f1a0b9c8d7e6f' \
--header 'accept: application/json' \
--header 'x-client-id: YOUR_CLIENT_ID' \
--header 'x-request-timestamp: 20240509154004003' \
--header 'x-signature: YOUR_SIGNATURE'
import axios from "axios";
import { createHmac } from "crypto";
const CLIENT_ID = "YOUR_CLIENT_ID";
const SECRET_KEY = "YOUR_SECRET_KEY";
// Timestamp theo múi giờ UTC+7, định dạng yyyyMMddHHmmssSSS
function getTimestamp() {
return new Date(Date.now() + 7 * 60 * 60 * 1000)
.toISOString()
.replace(/[-:TZ.]/g, "")
.slice(0, 17);
}
async function getDetailPosBill() {
const body = {}; // Request không có body: ký trên chuỗi "{}"
const params = {
bankBin: "PAYOO",
vaAccountNumber: "POS00012345",
billId: "9f1c2b7e4a5d4c3b8e2f1a0b9c8d7e6f",
};
const bodyJson = JSON.stringify(body);
const timestamp = getTimestamp();
const signature = createHmac("sha512", SECRET_KEY)
.update(`${timestamp}:${bodyJson}`)
.digest("hex");
const res = await axios.request({
method: "GET",
url: "https://open-api.tingee.vn/v1/get-detail-pos-bill",
params,
headers: {
accept: "application/json",
"Content-Type": "application/json",
"x-client-id": CLIENT_ID,
"x-request-timestamp": timestamp,
"x-signature": signature,
},
});
console.log(res.data);
}
getDetailPosBill();
using System;
using System.Net.Http;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
public class Program
{
private const string ClientId = "YOUR_CLIENT_ID";
private const string SecretKey = "YOUR_SECRET_KEY";
private static readonly HttpClient Client = new HttpClient();
public static async Task Main()
{
var bodyJson = "{}"; // Request không có body: ký trên chuỗi "{}"
// Timestamp theo múi giờ UTC+7, định dạng yyyyMMddHHmmssSSS
var timestamp = DateTime.UtcNow.AddHours(7).ToString("yyyyMMddHHmmssfff");
var signature = HmacSha512(SecretKey, $"{timestamp}:{bodyJson}");
var request = new HttpRequestMessage(HttpMethod.Get, "https://open-api.tingee.vn/v1/get-detail-pos-bill?bankBin=PAYOO&vaAccountNumber=POS00012345&billId=9f1c2b7e4a5d4c3b8e2f1a0b9c8d7e6f");
request.Headers.Add("accept", "application/json");
request.Headers.Add("x-client-id", ClientId);
request.Headers.Add("x-request-timestamp", timestamp);
request.Headers.Add("x-signature", signature);
var response = await Client.SendAsync(request);
Console.WriteLine(await response.Content.ReadAsStringAsync());
}
private static string HmacSha512(string key, string message)
{
using var hmac = new HMACSHA512(Encoding.UTF8.GetBytes(key));
var hash = hmac.ComputeHash(Encoding.UTF8.GetBytes(message));
return Convert.ToHexString(hash).ToLower();
}
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
public class Main {
private static final String CLIENT_ID = "YOUR_CLIENT_ID";
private static final String SECRET_KEY = "YOUR_SECRET_KEY";
public static void main(String[] args) throws Exception {
// JSON minified, giống kết quả JSON.stringify(). Request không có body: ký trên chuỗi "{}"
String bodyJson = "{}";
// Timestamp theo múi giờ UTC+7, định dạng yyyyMMddHHmmssSSS
String timestamp = ZonedDateTime.now(ZoneId.of("Asia/Ho_Chi_Minh"))
.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
String signature = hmacSha512(SECRET_KEY, timestamp + ":" + bodyJson);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://open-api.tingee.vn/v1/get-detail-pos-bill?bankBin=PAYOO&vaAccountNumber=POS00012345&billId=9f1c2b7e4a5d4c3b8e2f1a0b9c8d7e6f"))
.header("accept", "application/json")
.header("Content-Type", "application/json")
.header("x-client-id", CLIENT_ID)
.header("x-request-timestamp", timestamp)
.header("x-signature", signature)
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.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");
mac.init(new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), "HmacSHA512"));
byte[] hash = mac.doFinal(data.getBytes(StandardCharsets.UTF_8));
StringBuilder hex = new StringBuilder();
for (byte b : hash) hex.append(String.format("%02x", b));
return hex.toString();
}
}
<?php
$clientId = "YOUR_CLIENT_ID";
$secretKey = "YOUR_SECRET_KEY";
$bodyJson = "{}"; // Request không có body: ký trên chuỗi "{}"
// Timestamp theo múi giờ UTC+7, định dạng yyyyMMddHHmmssSSS
$now = new DateTime("now", new DateTimeZone("Asia/Ho_Chi_Minh"));
$timestamp = $now->format("YmdHisv");
$signature = hash_hmac("sha512", $timestamp . ":" . $bodyJson, $secretKey);
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => "https://open-api.tingee.vn/v1/get-detail-pos-bill?bankBin=PAYOO&vaAccountNumber=POS00012345&billId=9f1c2b7e4a5d4c3b8e2f1a0b9c8d7e6f",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Accept: application/json",
"Content-Type: application/json",
"x-client-id: " . $clientId,
"x-request-timestamp: " . $timestamp,
"x-signature: " . $signature,
],
]);
$response = curl_exec($ch);
if ($response === false) {
echo "cURL Error: " . curl_error($ch);
} else {
echo $response;
}
curl_close($ch);
Response mẫu
{
"code": "00",
"message": "Success",
"data": {
"orderId": "9f1c2b7e4a5d4c3b8e2f1a0b9c8d7e6f",
"amount": 150000,
"expirationTime": "20261014153000",
"createTime": "20261014150000",
"status": 1,
"transactionCode": "PY123456789"
}
}
| 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.orderId | string | Mã đơn hàng (chính là billId). |
data.amount | number | Số tiền của đơn hàng. |
data.expirationTime | string | Thời điểm hết hạn của đơn hàng. |
data.createTime | string | Thời điểm tạo đơn hàng. |
data.status | number | Trạng thái đơn hàng theo quy ước của Payoo. |
data.transactionCode | string | Mã giao dịch thanh toán phía Payoo (khi đơn hàng đã được thanh toán). |
Mã lỗi thường gặp
| Code | Mô tả | Hướng xử lý |
|---|---|---|
1010 | Không tìm thấy số tài khoản của Merchant | Kiểm tra vaAccountNumber và bankBin của máy POS đã liên kết. |
1063 | Không hỗ trợ đối với ngân hàng này | API chỉ áp dụng cho bankBin = "PAYOO". |
400 | Lỗi từ Payoo hoặc dữ liệu không hợp lệ | message chứa mô tả lỗi chi tiết (ví dụ billId không tồn tại phía Payoo). |
90, 91, 92, 97 | Lỗi xác thực request (timestamp, client-id, chữ ký) | Xem Mã lỗi hệ thống. |
Others | Lỗi khác | Xem Danh sách mã lỗi. |