first commit

This commit is contained in:
2026-05-21 16:44:31 +08:00
commit 7dbc5542de
99 changed files with 47743 additions and 0 deletions
+88
View File
@@ -0,0 +1,88 @@
# 授权云端 API 约定(独立服务实现)
用户端仓库仅包含 `license_lib.py`;签发 Web 与数据库部署在**独立项目**。
## 环境变量(用户端 `.env`)
| 变量 | 说明 |
|------|------|
| `LICENSE_API_URL` | 云端根地址,如 `https://license.example.com` |
| `LICENSE_CLIENT_KEY` | 客户端密钥,请求头 `X-Client-Key` |
| `LICENSE_CHECK_INTERVAL_DAYS` | 校验间隔,默认 `3` |
| `LICENSE_OFFLINE_GRACE_DAYS` | 断网宽限,默认 `7` |
| `LICENSE_DISABLED` | `true` 时关闭许可(仅开发) |
| `LICENSE_WECHAT_ID` | 默认 `dekun03` |
| `LICENSE_WECHAT_REMARK` | 可选;未设则提示用户用设备 ID 作备注 |
本地缓存:仓库根目录 `.license/license.cache`(勿提交 Git)。
## POST /v1/redeem
请求:
```json
{
"device_id": "32位十六进制",
"code": "一次性激活码"
}
```
成功响应:
```json
{
"ok": true,
"subscription_id": "sub_xxx",
"plan": "monthly",
"expires_at": "2026-06-21T23:59:59+08:00"
}
```
续费叠加(服务端实现):
```text
base = max(now, current_expires_at)
expires_at = base + days(plan) # monthly 30 / quarterly 90 / yearly 365
```
失败:`ok: false``message` 说明原因。
## POST /v1/validate
请求:
```json
{
"device_id": "...",
"subscription_id": "sub_xxx"
}
```
成功且有效:
```json
{
"ok": true,
"valid": true,
"expires_at": "2026-06-21T23:59:59+08:00",
"plan": "monthly"
}
```
无效(换机、过期等):
```json
{
"ok": true,
"valid": false,
"reason": "device_revoked"
}
```
## 套餐定价(商务参考)
| plan | 售价 | 天数 |
|------|------|------|
| monthly | 199 | 30 |
| quarterly | 399 | 90 |
| yearly | 699 | 365 |