Giao thức CLV1 đã công khaiĐọc đặc tả
Mục lục thư viện

Thư viện tài liệuBản quyền

Cổng khách hàng

Cổng khách hàng là trang tự phục vụ mang tên và màu thương hiệu của ứng dụng bạn, nơi người mua tự xem hạn dùng, gói, máy đang dùng và tự gỡ máy cũ để chuyển sang máy mới mà không phải nhắn tin cho bạn.

7 phút đọc

Cổng dùng để làm gì

Phần lớn yêu cầu hỗ trợ sau khi bán xoay quanh hai câu: "key của tôi còn hạn tới bao giờ" và "tôi đổi máy rồi, gỡ máy cũ giúp tôi". Cổng trả lời cả hai thay bạn, trong giới hạn luật chuyển máy bạn đặt, và mọi lần gỡ máy vẫn được ghi vào nhật ký, bắn webhook cho bạn.

Mỗi ứng dụng có một cổng riêng. Cổng không có giao diện dashboard, không cần tài khoản ClavisAUH và không được công cụ tìm kiếm lập chỉ mục.

Bật cổng cho một ứng dụng

  1. Mở ứng dụng, vào Phát hành & bản quyền › Đăng nhập & gói license.
  2. Ở cuối trang, tìm thẻ Cổng khách hàng và bật công tắc ở góc thẻ.
  3. Đường dẫn cổng hiện ra ngay bên dưới, kèm nút sao chép và nút Mở cổng để xem thử trong tab mới.
  4. Chọn Màu thương hiệu. Màu được lưu khi bạn rời ô chọn màu, theo dạng hex #rrggbb. Chưa chọn thì cổng dùng màu mặc định #0f9e8f.

Màu thương hiệu tô cho tab đăng nhập, nút bấm, biểu tượng hình thoi cạnh tên ứng dụng và các chấm trạng thái. Tên ứng dụng đứng ở đầu trang, ClavisAUH chỉ xuất hiện ở dòng chân trang "Bảo vệ bởi ClavisAUH".

Đường dẫn cổng

Đường dẫn có dạng https://<host>/portal/app_…, trong đó app_… là ID ứng dụng. Hãy sao chép đúng đường dẫn trong thẻ và đặt nó ở nơi người mua dễ thấy: email giao key, trang tải về, menu trợ giúp trong phần mềm. Ví dụ một nút "Quản lý license" trong ứng dụng Electron:

const { shell } = require("electron");

// Dán đúng đường dẫn sao chép từ thẻ Cổng khách hàng
const PORTAL_URL = "https://<host>/portal/app_…";

manageLicenseButton.addEventListener("click", () => shell.openExternal(PORTAL_URL));

Khi cổng đang bật, email báo license sắp hết hạn gửi cho người mua cũng có nút mở cổng. Người mua đổi được ngôn ngữ Việt hoặc Anh bằng nút ở góc trên trang.

Gắn email người mua vào license

Đăng nhập bằng email chỉ hoạt động với license đã có email người mua. Bạn gắn email theo một trong ba cách:

  • Trên dashboard: vào Phát hành & bản quyền › License, mở một license, ở dòng Người mua bấm Thêm email để mở cổng khách hàng, nhập địa chỉ rồi bấm Lưu. Xoá trắng ô và lưu để gỡ email.
  • Qua Seller API: truyền trường email khi tạo license.
  • Qua đại lý: đại lý điền Email người mua khi phát key trong Kinh doanh › Cổng đại lý.
curl -X POST https://<host>/seller/v1/apps/app_…/licenses \
  -H "Authorization: Bearer clv_live_…" \
  -H "Idempotency-Key: order-1001" \
  -H "Content-Type: application/json" \
  -d '{ "policyId": "pol_…", "count": 1, "email": "buyer@example.com" }'

Email luôn được lưu dạng chữ thường, nên người mua gõ hoa hay thường đều khớp.

Người mua đăng nhập thế nào

Trang đăng nhập có hai tab: Bằng email và Bằng key.

Bằng email

  1. Người mua nhập Email lúc mua và bấm Gửi link đăng nhập.
  2. Nếu địa chỉ đó gắn với ít nhất một license của ứng dụng, hệ thống gửi một link dùng một lần, hết hạn sau 15 phút.
  3. Mở link là vào thẳng cổng. Token bị xoá khỏi thanh địa chỉ ngay lập tức và link không dùng lại được.

Dù địa chỉ có mua hay không, màn hình luôn báo cùng một câu "Nếu ... đã mua, link đăng nhập đang trên đường tới hộp thư", nên người lạ không dò được ai là khách của bạn. Link hết hạn hoặc đã dùng sẽ hiện "Link đã hết hạn hoặc đã được dùng" kèm nút Gửi link mới để quay lại trang đăng nhập.

Vào bằng email, người mua thấy mọi license của ứng dụng gắn với địa chỉ đó (tối đa 20 license mới nhất).

Bằng key

Người mua dán License key và bấm Tiếp tục:

  • License đã có email: key thôi chưa đủ. Hệ thống gửi link tới email của license và chỉ hiện địa chỉ đã che, dạng a•••@d•••.com. Người cầm key bị lộ không vào được cổng.
  • License chưa có email: người mua vào cổng ngay, chỉ thấy đúng license đó.

Key sai báo "Key này không hợp lệ". Sau 10 lần nhập sai từ cùng một IP trong khoảng 15 phút, form báo "Thử quá nhiều lần, chờ ít phút rồi thử lại". Ngoài ra các form đăng nhập nhận tối đa 5 yêu cầu mỗi phút từ một IP.

Người mua thấy gì

Mỗi license là một thẻ gồm:

Thông tinCách hiển thị
KeyDạng rút gọn, không bao giờ hiện đủ key
GóiTên gói, hoặc "Gói riêng" nếu license không theo gói nào
Trạng tháiĐang dùng, Sắp hết hạn, Đang ân hạn, Chưa kích hoạt, Đã hết hạn, Tạm khoá, Đã thu hồi
Hạn dùng"đến <ngày>" hoặc "vĩnh viễn"
Quyền tính năngDanh sách entitlement mà gói cấp
Máy đang dùngTên máy (hoặc "Máy chưa đặt tên"), nền tảng, quốc gia, lần cuối hoạt động

"Sắp hết hạn" xuất hiện khi license đã vào khoảng Báo trước khi hết (ngày) của gói, mặc định 7 ngày. "Đang ân hạn" là license đã qua ngày hết hạn nhưng còn trong số ngày ân hạn. Máy im lặng quá lâu hiện chữ "đang ngủ": máy đó đã tự trả suất theo thiết lập Máy im lặng thì trả suất (giờ) của gói.

Dưới các thẻ là mục Gần đây với 15 sự kiện mới nhất của các license đó, như Kích hoạt, Đăng nhập, Dùng thử, Gỡ máy từ cổng, SDK báo can thiệp, kèm quốc gia và thời điểm. Chấm màu thương hiệu là thành công, chấm đỏ là không thành công.

Tự gỡ máy theo luật chuyển máy

Cạnh mỗi máy có nút Gỡ máy. Người mua xác nhận "Gỡ ... khỏi license? Máy này sẽ phải kích hoạt lại", sau đó máy bị gỡ, mọi phiên của nó kết thúc và suất máy trống cho máy mới. Muốn dùng lại trên máy đó, người mua phải kích hoạt lại.

Luật chuyển máy lấy theo thứ tự:

  1. Mục Chuyển máy trong gói license (Lần mỗi 30 ngày, Chờ giữa hai lần (giờ) và các ô Người bán, Khách, Đại lý).
  2. Nếu gói để trống số lần hoặc thời gian chờ: 2 lần mỗi 30 ngày, cách nhau 24 giờ.

Cổng hiển thị luật đó như sau:

Tình huốngDòng trạng tháiNút Gỡ máy
Còn lượt, hết thời gian chờ"Còn x/y lần chuyển trong 30 ngày"Bấm được
Hết lượt hoặc đang trong thời gian chờ"Chuyển tiếp được <thời điểm>"Bị mờ
Gói không cho Khách chuyển máy"Liên hệ người bán để chuyển máy"Không hiện

Lượt chuyển của khách và đại lý dùng chung một hạn mức. Lệnh transfer() của SDK JavaScript, khi phần mềm tự trả suất trước lúc chuyển máy, cũng tính là một lượt của khách. Bạn gỡ máy từ dashboard thì không bị giới hạn và không trừ lượt của khách. Muốn chỉ mình bạn được chuyển máy, hãy bỏ chọn ô Khách trong gói. Nếu bỏ chọn cả ba ô, gói quay về mặc định Người bán và Khách. Gỡ một máy đang ngủ vẫn tính một lượt, dù máy đó đã tự trả suất.

Mỗi lần khách gỡ máy, bạn nhận được:

  • Sự kiện portal.device_release trong Bảo mật ứng dụng › Nhật ký hoạt động.
  • Webhook device.transferred với payload chứa licenseId, deviceId và "by": "customer".
  • Số lần khách đã chuyển ở mục Chuyển máy trong chi tiết license.

Phiên đăng nhập

  • Link email sống 15 phút và chỉ dùng một lần.
  • Phiên cổng kéo dài 30 phút kể từ lúc đăng nhập, không tự gia hạn khi người mua thao tác. Hết 30 phút, cổng quay lại màn hình đăng nhập.
  • Phiên được giữ trong cookie HttpOnly riêng cho từng ứng dụng. Nút Đăng xuất xoá phiên ngay.

Hạn mức gói dịch vụ

Cổng khách hàng được điều khiển bởi hạn mức customerPortal của workspace, hiển thị ở dòng Cổng khách hàng trong Tài khoản & tổ chức › Gói & sử dụng. Theo cấu hình mặc định, cả Basic và Premium đều có cổng khách hàng. Nếu gói của workspace không có:

  • Bật công tắc sẽ bị từ chối với mã lỗi plan_limit.
  • Cổng đang bật sẽ ngừng mở, người mua thấy "Cổng này chưa mở hoặc không tồn tại", giống như khi bạn tắt cổng.

Xem chi tiết các hạn mức ở Gói Basic, Premium và hạn mức và trang Bảng giá.

Liên quan

Bạn cần giúp gì?

Câu hỏi thường gặp

ClavisAUH là gì?

Dịch vụ bản quyền và xác thực cho phần mềm desktop: license key, khoá thiết bị, đăng nhập người dùng và phản hồi có chữ ký. Tất cả quản lý trên một dashboard

Vì sao kẻ crack không làm giả được server?

SDK chỉ tin câu trả lời ký bằng khoá bí mật của ứng dụng. Khoá đó không bao giờ rời server của chúng tôi, nên server giả không ký được và bị từ chối

Trong file chạy của tôi có gì?

Mã ứng dụng và khoá công khai. Không có bí mật nào, vì mỗi thiết bị tự tạo cặp khoá riêng ở lần chạy đầu

Có chạy được khi offline không?

Có. Mọi gói đều có token offline có chữ ký dùng được 7 ngày, ứng dụng tự kiểm tra tại máy. Premium cho bạn chọn bao lâu. License đã thu hồi vẫn có thể chạy offline trong khoảng đó, trừ khi Chế độ chỉ online đang bật

Hỗ trợ những ngôn ngữ nào?

Hiện có JavaScript và TypeScript. Tiếp theo là C++, C# và Python, cùng một giao thức công khai

Gói Basic có miễn phí thật không?

Có. Không giới hạn thời gian, không cần thẻ. Cần nhiều hơn thì lên Premium

Liên hệ