feat(subscription): add expiry recovery flow

This commit is contained in:
chengma
2026-07-23 16:03:08 +08:00
parent b05c370250
commit c02866e610
7 changed files with 276 additions and 17 deletions
+5 -5
View File
@@ -27,13 +27,13 @@
## 会员订阅接入
- 当前处于真实接口观察期:`SUBSCRIPTION_CHECK_ENABLED = True`、`SUBSCRIPTION_ENFORCEMENT_ENABLED = False`。客户端真实查询并展示订阅状态,但查询中、未配置 Key、Key 无效、账号禁用、未订阅、到期、撤销或暂时不可用均不禁用六个工作流、不自动切换「设置」、不阻止新提交。
- 当前开发版本启用真实查询和强制门禁:`SUBSCRIPTION_CHECK_ENABLED = True`、`SUBSCRIPTION_ENFORCEMENT_ENABLED = True`。查询期间以及未配置 Key、Key 无效、账号禁用、未订阅、到期、撤销或暂时不可用时,只保留「设置」Tab并阻止新的产品请求;有效、宽限或旧服务兼容状态恢复工作流。
- 强制升级检查完成、主窗口显示后,后台用 `data/config/cmhub.json` 的 API Key 请求 `GET /api/v1/cmshopee/subscription/status`;不会阻塞 Qt 主线程或把 Key 放入 URL、状态栏、日志和错误提示。
- Tabs 上方不保留应用内标题或会员状态行。Windows 原生标题默认只显示应用名称;订阅有效时追加“账号名 · 套餐名 · 有效至日期”,宽限期追加宽限截止日。检测中和其他状态立即恢复纯应用名称,中文观察结果及“当前不影响使用”只显示在底部状态栏。标题不得展示 API Key、接口地址、会员中心地址、通知标识或原始错误。
- 观察期不显示 `notice_id` 对应的“已启用会员订阅”模态通知框;保存 cmhub 设置后会立即重新检查,但陈旧线程结果不能覆盖新状态。
- Tabs 上方不保留应用内标题或会员状态行。Windows 原生标题默认只显示应用名称;订阅有效时追加“账号名 · 套餐名 · 有效至日期”,宽限期追加宽限截止日。检测中和其他状态立即恢复纯应用名称并在底部状态栏显示脱敏中文结果。标题不得展示 API Key、接口地址、会员中心地址、通知标识或原始错误。
- 本次程序运行中首次进入 `expired` 时,先应用门禁并切换「设置」,再弹出「会员套餐已过期」。安全 `manage_url` 可通过系统默认浏览器打开;地址缺失时跳转按钮禁用。重复过期检查不重弹,恢复有效后再次到期才重弹;「退出程序」沿用正常关闭和未保存设置确认。
- 设置页底部提供「重新检测会员状态」;检测期间按钮禁用并显示运行状态。它只通知主窗口复用现有异步检查,保存 cmhub 设置后的自动重查和陈旧线程结果隔离保持不变。
- 当前服务端未部署订阅接口时,`404` 视为旧服务兼容:底部状态栏显示“会员服务尚未启用”,六个工作流继续按旧行为运行,不弹阻断窗口。网络或格式错误显示“暂时无法确认会员状态”,不能误报为 Key 无效或会员到期。
- ② AI生成、⑥商品套图和「AI帮写」继续调用同一订阅预检入口,但观察模式始终放行;cmhub 产品接口仍必须服务端最终裁决。已提交的异步任务继续查询、下载和查看。自定义网关直连的观察结果同样不能作为不可绕过的授权保护。
- 后续正式门禁需另建任务,先根据观察结果确认存量 Key/套餐覆盖率、网络失败策略和回滚方案;启用后才恢复 T-686 的“非有效状态只保留设置 Tab”和一次性订阅通知逻辑。
- ② AI生成、⑥商品套图和「AI帮写」继续调用同一订阅预检入口;非允许状态不创建新 worker/job。cmhub 产品接口仍是最终授权方;已提交异步任务的查询、下载、历史、预览和导出不因会员状态变化中断。
## 全局 Tab 栏可用性