Giới thiệu Store-front API
Các public API để xây dựng Website Ecommerce hoặc Mobile App.
Đường dẫn API
Các API đều kết nối tới 1 url gọi là BASE_URL:
- Shop dùng Hubport SaaS:
BASE_URLlàhttps://api.hubport.vn. - Shop dùng bản cài đặt riêng (dedicated server):
BASE_URLlà tên miền API riêng của shop (thường có dạnghttps://ws.mydomain.com). Liên hệ bộ phận hỗ trợ của Hubport để lấy BASE_URL của công ty bạn.
Mọi Store-front API đều có đường dẫn bắt đầu bằng /site/, ví dụ: GET https://api.hubport.vn/site/settings/setting.
Cách xác thực khi kết nối
Mọi request gửi tới Store-front API đều yêu cầu cung cấp các headers sau:
| Key | Mô tả |
|---|---|
SiteTenantId | ID của định danh công ty (Bắt buộc cho mọi request). |
SiteAuthorization | Token định danh khách hàng (Chỉ bắt buộc cho các API yêu cầu đăng nhập). |
SiteTenantId
- Shop (tenant) của request được xác định chỉ qua header
SiteTenantId, không dựa vào tên miền gọi API. Mọi dữ liệu trả về (sản phẩm, khách hàng, giỏ hàng, đơn hàng...) đều thuộc shop này. - Nếu
SiteTenantIdkhông hợp lệ, không tồn tại hoặc shop đang bị khóa, API trả HTTP 404 với mã lỗierror_company_not_found_from_site_tenant_id. - Nếu website của shop đang tạm ngưng (shop không dùng module Cửa hàng online), mọi API trả HTTP 403 với mã lỗi
error_module_disabledvàdetail.module = "storefront". Website nên hiện trang "Website tạm ngưng". - Nếu shop không dùng một module (ví dụ Khuyến mãi, Tiếp thị liên kết, Website & nội dung), các API của module đó trả HTTP 403
error_module_disabled(detail.modulelà mã module), riêng các API đọc dùng khi duyệt web và thanh toán trả 200 với danh sách rỗng và fieldmodule_disabled: danh sách khuyến mãi và flash sale, ghi nhận click cộng tác viên, menu, banner, khối trang. Bộ tính khuyến mãi (/site/promotionengines/*) trả "không có khuyến mãi" như bình thường, giỏ hàng và thanh toán vẫn chạy với giá gốc. - Storefront chạy trên tên miền riêng của shop có thể tra
SiteTenantIdtheo tên miền đã cấu hình trong cài đặt website (website_domain):
curl "https://api.hubport.vn/v1/settings/findtenantidfromwebsitedomain?website_domain=shop.mydomain.com"{
"tenant_id": 123,
"website_domain": "shop.mydomain.com",
"ts": 1740300000
}tenant_id = 0 nghĩa là không tìm thấy shop nào ứng với tên miền.
Giá trị website_domain là cấu hình của shop, không được xác minh quyền sở hữu tên miền. Website bán hàng do Hubport SaaS chạy
nhận shop theo tên miền con hoặc tên miền riêng đã xác minh ở Tên miền website,
không theo website_domain.
SiteAuthorization
- Token khách hàng lấy từ trường
jwttrong response của API Đăng nhập. Gửi nguyên giá trị này (không thêm tiền tốBearer) trong headerSiteAuthorization. - Token có hiệu lực 7 ngày kể từ khi đăng nhập, và mất hiệu lực ngay khi gọi API Đăng xuất.
- Token gắn với đúng shop đã đăng nhập. Gửi token của khách hàng shop A khi gọi API với
SiteTenantIdcủa shop B:- API yêu cầu đăng nhập trả HTTP 401 với mã lỗi
error_customer_company_mismatch. - API công khai (không yêu cầu đăng nhập) vẫn trả dữ liệu nhưng coi như khách chưa đăng nhập.
- API yêu cầu đăng nhập trả HTTP 401 với mã lỗi
Lỗi xác thực thường gặp (HTTP 401) ở API yêu cầu đăng nhập
| Mã lỗi | Mô tả |
|---|---|
error_customer_login_required | Không gửi header SiteAuthorization. |
error_jwt_hash_not_found | Token không tồn tại hoặc đã hết hạn. |
error_jwt_expired | Token đã hết hạn. |
error_jwt_blacklisted | Token đã đăng xuất. |
error_customer_company_mismatch | Token thuộc khách hàng của shop khác. |
Gọi từ trình duyệt (CORS)
Store-front API cho phép gọi trực tiếp từ trình duyệt trên tên miền bất kỳ (response có Access-Control-Allow-Origin: *). Xác thực chỉ qua header SiteTenantId / SiteAuthorization, API không dùng cookie: không đặt credentials: "include" (hoặc withCredentials: true) cho request, nếu không trình duyệt sẽ chặn response.
Định dạng response
- Response thành công trả trực tiếp đối tượng JSON (không bọc thêm), HTTP status
200(hoặc201khi tạo mới,204khi xóa). - Response lỗi có dạng sau, kèm HTTP status tương ứng (
401,404,422,500...):
{
"error": ["error_not_found"]
}- Lỗi phía máy chủ khi truy vấn dữ liệu trả HTTP
500với{"error": ["error_database"]}; nên thử lại sau.
Ví dụ
curl -X GET "https://api.hubport.vn/site/customers/getdetail" \
-H "SiteTenantId: <SITE_TENANT_ID>" \
-H "SiteAuthorization: <CUSTOMER_TOKEN>"