# Cài server license lên hosting/domain của bạn (PHP)

Cách này **giấu kín danh sách key** và **thu hồi có hiệu lực ngay**. Người dùng
chỉ cần nhập key và mở tool — máy đầu tiên dùng key sẽ **tự động bị khóa** vào
key đó (không cần gửi Machine ID qua lại thủ công).

Yêu cầu: một hosting chạy được **PHP** (đa số hosting cPanel giá rẻ đều có).

---

## Bước 1 — Tải bộ file server lên hosting

Upload cả thư mục `server_php` lên hosting, ví dụ vào `public_html/license/`.
Sau khi upload, cấu trúc trên host như sau:

```
public_html/license/
├── license.php      ← tool gọi tới file này
├── admin.php        ← trang quản lý key (bạn dùng)
├── config.php       ← chỉnh cấu hình ở đây
├── lib.php
└── data/
    ├── .htaccess    ← chặn xem trực tiếp file key
    └── store.json   ← danh sách key (server tự ghi)
```

## Bước 2 — Sửa `config.php`

Mở `config.php`, đổi tối thiểu **mật khẩu admin**:

```php
define('ADMIN_PASSWORD', 'dat_mat_khau_that_kho_doan');
```

Giữ nguyên các dòng còn lại là được. `AUTO_BIND = true` nghĩa là máy đầu tiên
dùng key sẽ tự bị khóa vào key đó.

## Bước 3 — Đảm bảo thư mục `data` được bảo vệ

- **Hosting Apache/cPanel (phổ biến nhất):** file `data/.htaccess` đã tự chặn,
  không cần làm gì thêm. Kiểm tra: mở trình duyệt vào
  `https://tenmien.com/license/data/store.json` — nếu báo **403 Forbidden** là
  đã an toàn.
- **Nếu vẫn xem được store.json** (một số host dùng Nginx không đọc .htaccess):
  chuyển thư mục `data` ra **ngoài** `public_html` rồi sửa `STORE_PATH` trong
  `config.php` trỏ tới vị trí mới, ví dụ:
  `define('STORE_PATH', dirname(__DIR__, 2) . '/license_data/store.json');`
  (đặt `license_data` ngang hàng với `public_html`). Cách này chắc chắn nhất.

## Bước 4 — Tạo key ở trang admin

Vào `https://tenmien.com/license/admin.php`, nhập mật khẩu vừa đặt. Tại đây bạn:

- **Tạo key** (chọn số lượng, hạn dùng, ghi chú) — key hiện ra để bạn gửi khách.
- **Thu hồi / Bật lại** từng key (hiệu lực ngay lập tức).
- **Gỡ máy** khi muốn cho một key chuyển sang máy khác.
- **Xóa** key.

## Bước 5 — Gắn server vào tool

Mở `license_manager.py` trong tool, sửa dòng:

```python
LICENSE_API_URL = "https://tenmien.com/license/license.php"
```

(Để trống `LICENSE_LIST_URL`.) Vậy là xong — từ giờ tool sẽ hỏi key khi mở, và
kiểm tra qua server của bạn.

---

## Kiểm tra nhanh

Mở trình duyệt gõ (thay KEY bằng key thật vừa tạo):
`https://tenmien.com/license/license.php?key=KEY&machine=TEST123`
Nếu thấy `{"ok":true,...}` là server chạy đúng. (Lần này sẽ khóa key vào máy
"TEST123" — sau đó bạn vào admin bấm **Gỡ máy** cho key đó để trả về trạng thái
chưa gán, trước khi giao cho khách.)

## Vài lưu ý

- Tool cần mạng khi mở. Mất mạng thì vẫn chạy tạm `OFFLINE_GRACE_DAYS` ngày (mặc
  định 3) tính từ lần kiểm tra online gần nhất; chỉnh trong `license_manager.py`.
- Muốn chặt hơn: đặt `APP_TOKEN` (một chuỗi bí mật) trong `config.php` và điền
  đúng chuỗi đó vào `LICENSE_APP_TOKEN` trong `license_manager.py` — khi đó chỉ
  tool của bạn mới gọi được endpoint.
- **KHÔNG** để lộ mật khẩu admin và không đưa `admin.php` cho người dùng.
- File `admin_keys.py` và cách GitHub Gist là cho phương án khác (file tĩnh) —
  nếu đã dùng server PHP này thì không cần tới chúng.
