📘 Tài liệu kết nối API

Trang này công khai để đối tác, website vệ tinh hoặc website cùng hệ sinh thái có thể đọc hướng dẫn tích hợp. API dùng API Key riêng của từng user để lấy sản phẩm, xem số dư, tạo đơn hàng và lấy dữ liệu giao hàng.

Mục lục nhanh

Xác thực Endpoint Sản phẩm Tạo đơn Giao hàng File ZIP Trạng thái code Website cùng hệ sinh thái Mã lỗi Bảo mật

1. Hướng dẫn nhanh

1

Lấy API Key

User đăng nhập vào tài khoản, mở trang API và copy API Key. Admin cũng có thể xem/đổi/bật/tắt API Key của user.

2

Gọi API sản phẩm

Website kết nối gọi /api/v1/products bằng header Authorization: Bearer API_KEY.

3

Tạo đơn

Khi user mua hàng trên website kết nối, gửi product_id, quantityrequest_id lên API tạo đơn.

4

Lấy giao hàng

Dùng mã đơn để lấy code, trạng thái code hoặc link tải file ZIP qua website đang kết nối.

2. Xác thực API

Base URLhttps://taphoatele.com
Header khuyến nghịAuthorization: Bearer YOUR_API_KEY
Header tương thíchX-Api-Key: YOUR_API_KEY
Định dạngJSON UTF-8. API tạo đơn chỉ nhận POST application/json.
Retry an toànDùng lại cùng request_id khi retry để tránh tạo trùng đơn.

Không truyền API Key trong URL. Không gọi API trực tiếp từ JavaScript frontend công khai, vì người dùng có thể xem được API Key.

3. Danh sách endpoint

MethodEndpointMục đíchGhi chú
GET/api/v1/categoriesLấy danh mụcTrả danh mục local và danh mục API đã được website trung gian xử lý hiển thị.
GET/api/v1/products?page=1&limit=100Lấy danh sách sản phẩmCó phân trang, cache, rate-limit.
GET/api/v1/product?id=PRODUCT_IDLấy chi tiết sản phẩmTrả mô tả 1/2, min/max, tồn kho, giá bán.
GET/api/v1/balanceXem số dưSố dư của user sở hữu API Key.
POST/api/v1/order/createTạo đơn hàngBắt buộc JSON, nên có request_id.
GET/api/v1/order/status?order_code=CODEXem trạng thái đơnChỉ xem được đơn thuộc API Key đó.
GET/api/v1/order/delivery?order_code=CODELấy giao hàngTrả code, trạng thái code hoặc download URL.
GET/api/v1/order-download?order_code=CODETải file ZIPWebsite trung gian proxy file, không lộ link nguồn.
GET/api/v1/ordersLịch sử đơnLấy các đơn gần nhất của API Key.

4. API sản phẩm

Endpoint danh sách sản phẩm:

GET https://taphoatele.com/api/v1/products?page=1&limit=100
Authorization: Bearer YOUR_API_KEY

Các tham số thường dùng:

Tham sốÝ nghĩa
pageTrang dữ liệu, mặc định 1.
limitSố sản phẩm mỗi trang. Admin có thể giới hạn tối đa trong Bảo mật API.
category_idLọc theo danh mục nếu website hỗ trợ.
qTìm theo từ khóa ngắn.

Ví dụ dữ liệu sản phẩm rút gọn:

{
  "ok": true,
  "data": [
    {
      "id": "PRODUCT_ID",
      "name": "Tên sản phẩm",
      "category_id": "CATEGORY_ID",
      "price": 10000,
      "stock": 25,
      "status": "in_stock",
      "min_qty": 1,
      "max_qty": 10,
      "description": "Mô tả sản phẩm 1 giữ nguyên bố cục",
      "description2": "Mô tả sản phẩm 2 giữ nguyên bố cục"
    }
  ]
}

Mô tả sản phẩm 1 và 2: hệ thống giữ nguyên xuống dòng/HTML an toàn từ website nguồn. Nếu website trung gian tùy chỉnh mô tả local trong admin, API public của website trung gian sẽ trả mô tả đã tùy chỉnh.

5. API tạo đơn hàng

Request:

POST https://taphoatele.com/api/v1/order/create
Authorization: Bearer YOUR_API_KEYContent-Type: application/json

{
  "product_id": "PRODUCT_ID",
  "quantity": 1,
  "request_id": "your_site_order_123456"
}

request_id nên là mã duy nhất từ website của bạn. Khi mạng lỗi hoặc timeout, hãy retry bằng đúng request_id cũ để tránh tạo nhiều đơn trùng.

Response thành công thường có:

{
  "ok": true,
  "order_code": "DH2026062918575444E9MF",
  "status": "success",
  "total": 10000,
  "message": "Tạo đơn thành công"
}

6. API lấy giao hàng

GET https://taphoatele.com/api/v1/order/delivery?order_code=DH2026062918575444E9MF
Authorization: Bearer YOUR_API_KEY

Tùy loại sản phẩm, response có thể gồm:

7. Sản phẩm loại file ZIP

Với sản phẩm loại file, API trả download_url thuộc website đang kết nối API. Server website đó sẽ tự gọi nguồn bằng API Key nội bộ rồi stream file lại.

GET https://taphoatele.com/api/v1/order-download?order_code=DH2026062918575444E9MF
Authorization: Bearer YOUR_API_KEY

Người dùng cuối chỉ bấm nút tải file trên website kết nối, không cần mở URL website nguồn.

8. Sản phẩm loại code và trạng thái sử dụng

Để bảo mật kho hàng, API sản phẩm không xuất toàn bộ kho code. API chỉ trả trạng thái của code đã giao trong đúng đơn hàng.

{
  "delivery_codes": ["ABC-123"],
  "delivery_codes_detail": [
    {
      "code": "ABC-123",
      "used": true,
      "used_at": "29/06/2026 19:22:17",
      "status_label": "29/06/2026 19:22:17"
    }
  ]
}

Website trung gian sẽ tự làm mới trạng thái code từ website nguồn khi user/admin mở đơn hoặc khi API client hỏi lại trạng thái đơn.

9. Website cùng hệ sinh thái mã nguồn

Website con nên cấu hình trong admin:

Cron mỗi phút gọi:

https://taphoatele.com/api-sync-cron.php?token=CRON_TOKEN

Dữ liệu gốc từ API nguồn được lưu cache riêng. Tùy chỉnh local của admin được lưu ở file override riêng nên không mất khi cron chạy lại.

10. Chữ ký HMAC tùy chọn

Nếu admin bật bắt buộc HMAC cho API tạo đơn, request cần thêm:

X-Api-Timestamp: UNIX_TIMESTAMP
X-Api-Nonce: RANDOM_STRING
X-Api-Signature: sha256=HMAC_SHA256(METHOD + "\n" + PATH + "\n" + TIMESTAMP + "\n" + NONCE + "\n" + RAW_BODY, API_KEY)

Timestamp chỉ hợp lệ trong khoảng thời gian admin cấu hình, nonce giúp chống gửi lại request cũ.

11. Mã lỗi thường gặp

Mã lỗiÝ nghĩaCách xử lý
missing_api_keyThiếu API Key.Gửi header Authorization: Bearer API_KEY.
unauthorizedAPI Key sai hoặc đã đổi.Kiểm tra lại API Key trong tài khoản.
api_disabledAPI của user đang tắt.Bật API trong tài khoản hoặc liên hệ admin.
ip_not_allowedIP không nằm trong allowlist.Thêm IP server gọi API vào cấu hình user.
rate_limitedGọi API quá nhanh.Dừng một thời gian rồi retry, không spam liên tục.
api_guardAPI đang tạm giới hạn vì lưu lượng bất thường.Chờ guard hết hạn hoặc admin tắt trong Bảo mật API.
missing_request_idAdmin yêu cầu request_id khi tạo đơn.Gửi request_id duy nhất cho mỗi đơn.
invalid_signatureHMAC sai.Kiểm tra raw body, path, timestamp, nonce và API Key.
maintenanceWebsite đang bảo trì.Hiển thị thông báo bảo trì và thử lại sau.
order_failedTạo đơn thất bại.Hiển thị message sạch cho user, log chi tiết cho admin.

12. Khuyến nghị bảo mật khi đấu API

13. Ví dụ cURL nhanh

Lấy sản phẩm:

curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://taphoatele.com/api/v1/products?page=1&limit=20"

Tạo đơn:

curl -X POST "https://taphoatele.com/api/v1/order/create" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"product_id":"PRODUCT_ID","quantity":1,"request_id":"site_order_123"}'