# OpsXShell / 多产品授权模型 管理端 `opsx-licence` 与客户端(PC / Web / 移动)的最小合理授权结构。目标:在线可座位管理,离线可自包含验签,支付与发证解耦;**产品维度通用**,不绑死单一桌面端。 ## 核心实体 | 实体 | 含义 | |------|------| | **Product** | 可售卖产品(如 `opsxshell`;可扩展更多) | | **Plan** | 定价档位(SKU),不是用户手里的证 | | **Customer** | 客户(邮箱 / 公司) | | **License** | 许可证实例(在线 `LIC-…` 或离线 `LICOFF-…`) | | **Activation** | 设备座位(在线多座位;离线签发时绑 1 台) | | **Order** | 支付订单;Waffo 只收款,**发证统一走 License** | > 「客户权益 Entitlement」仍可能被订单履约写入,但管理菜单已移除独立权益页——运营以 **订单 + License** 为准。 ## 三档 Plan(OpsXShell 默认) | plan_type | 显示名 | 时长 | 设备数 | |-----------|--------|------|--------| | `trial` | 体验 | 180 天 | 1 | | `yearly` | 包年 | 365 天 | 2 | | `perpetual` | 永久 | 0=永久 | 5 | 管理端 **定价计划** 列表必须展示所属 **产品**;启动时 seed 会同步中文名。 ## 在线 vs 离线 ### 在线证(`LIC-…`) - 服务端签发与激活;座位在 `activations` - 客户端:`/api/v1/license/activate|verify|heartbeat|deactivate` - 支持 trial / yearly / perpetual;永久仅在线 ### 离线证(`LICOFF-1..`) - Ed25519 自包含;载荷含 `device_id`、`plan_type`、`iat`/`exp` - **最长 365 天**;仅 trial / yearly;**禁止永久离线证** - **必须绑定对方提供的 device_id**(换机无效) - **不可「续期」**:到期后重新签发新序列号(可同设备) - 管理端独立页:`/offline-licenses` - 环境变量:`OFFLINE_LICENSE_SEED`(派生密钥);公钥可供客户端嵌入 ## 支付边界 - 配置入口:**支付** 菜单(非系统设置) - Product ID 使用可扩展映射表(多 SKU) - 调试:`POST /api/payment/waffo/debug` - 详见 [waffo-integration.md](./waffo-integration.md) ## 客户端约定 - API Base:`https://l123.91ai.io/api`(或自建域名 + `/api`) - 激活识别:`LIC-…` → 在线;`LICOFF-…` → 本地验签 - 激活请求建议带 `device_info` JSON(`platform` / `country` 等),便于仪表盘「平台 / 地理」分布 ## 仪表盘指标 - License 总数、已过期、在线设备(约 5 分钟心跳) - 本月 / 累计收入、License 增长趋势 - 产品分布、地理/网络粗分、客户端形态(pc/web/mobile) ## 废弃 / 避免 - 计划英文渣名面向运营(`Trial 180d` 等) - 旧 `opsx1.` 令牌、客户端粘贴商户私钥当激活码 - 永久离线证、未绑设备的万能离线串 - 把支付私钥写进仓库或前端