CRMKhách hàng

Đăng nhập

Xác thực khách hàng bằng số điện thoại và mật khẩu.

Endpoint

POST /site/customers/authenticate

Headers

KeyValueBắt buộcMô tả
SiteTenantId{tenant_id}CóID của công ty/tenant.

Workflow & Logic

API này xử lý việc đăng nhập của khách hàng. Hệ thống hỗ trợ cả xác thực nội bộ và xác thực thông qua Remote API (SSO).

Quy trình xử lý

  1. Khởi tạo Site: Kiểm tra Tenant và thông tin Site hợp lệ.

  2. Xác thực thông tin:

    • Kiểm tra số điện thoại (phone) có đúng định dạng không.
    • Tìm kiếm khách hàng theo phone (khớp chính xác) trong shop hiện tại (SiteTenantId). Khách hàng của shop khác không đăng nhập được vào shop này.
  3. Xác thực mật khẩu:

    • Nếu sử dụng internal auth: So khớp mật khẩu đã hash.
    • Nếu sử dụng remote_api auth (shop cấu hình đăng nhập qua hệ thống tài khoản riêng của shop): Gọi API bên thứ ba để xác thực. Nếu thành công và khách hàng chưa tồn tại local, hệ thống sẽ tự động tạo bản ghi khách hàng local (Just-in-time provisioning).
  4. Xử lý dữ liệu bổ sung:

    • Nếu khách hàng chưa có chính sách giá (price_policy_id = 0), hệ thống sẽ lấy chính sách giá mặc định của loại khách hàng đó (customer_type).
  5. Tạo phiên đăng nhập: Nếu xác thực thành công, hệ thống tạo phiên đăng nhập (JWT gắn với khách hàng và shop), có hiệu lực 7 ngày.

  6. Trả về token: Trường jwt trong response là mã định danh phiên (chuỗi 32 ký tự), không phải chuỗi JWT đầy đủ. Frontend gửi nguyên giá trị này trong header SiteAuthorization ở các request tiếp theo, kèm đúng SiteTenantId của shop đã đăng nhập.

Token gắn với shop

Token chỉ dùng được với đúng shop (SiteTenantId) đã đăng nhập. Gửi token của shop A khi gọi shop B: các API yêu cầu đăng nhập trả HTTP 401 error_customer_company_mismatch; các API công khai coi như khách chưa đăng nhập.

Request Body

{
  "phone": "0987654321",
  "password": "mật_khẩu_của_bạn"
}
TrườngKiểuBắt buộcMô tả
phonestringCóSố điện thoại đăng nhập (chỉ gồm chữ số).
passwordstringCóMật khẩu.

Response Schema

HTTP 200 - Thành công

Trả về mã JWT và thông tin cơ bản của khách hàng.

{
  "jwt": "5f2b8c9d0e1a4b3c6d7e8f9012345678",
  "user": {
    "id": 123,
    "full_name": "Nguyễn Văn A",
    "phone": "0987654321",
    "price_policy_id": 1,
    // ... các trường khác trong Customer Object
  },
  "auth_mode": "internal"
}

HTTP 422 - Lỗi dữ liệu

Mã lỗiMô tả
error_phone_requiredSố điện thoại không được để trống.
error_phone_invalidSố điện thoại sai định dạng.
error_account_not_foundTài khoản không tồn tại.
error_password_emptyMật khẩu không được để trống.
error_account_invalidSố điện thoại hoặc mật khẩu không chính xác.
error_remote_auth_failed(Chế độ remote_api) Hệ thống tài khoản của shop từ chối đăng nhập.

HTTP 500 - Lỗi hệ thống

Mã lỗiMô tả
error_session_can_not_be_savedKhông tạo được phiên đăng nhập.
error_add_user(Chế độ remote_api) Không tạo được bản ghi khách hàng local.

Trường auth_mode

Giá trịMô tả
internalXác thực bằng tài khoản khách hàng lưu trong Hubport.
remote_apiXác thực qua hệ thống tài khoản riêng của shop.

On this page