docs: refine software subscription task

This commit is contained in:
QiuSW
2026-07-21 11:14:53 +08:00
parent 9ef33ca79f
commit 341864dc70
3 changed files with 20 additions and 6 deletions
+14
View File
@@ -2090,3 +2090,17 @@
- 配置:增加 `CMSHOPEE_AUTHORIZATION_SHADOW_MODE=true`,当前仅作为影子部署口径与日志字段;正式执行阻断需单独任务、灰度和回滚验收。
- 验证:凭证正确、无设备、无凭证和过期的判定测试已覆盖;T-627 迁移专项 4 条回归、`manage.py check` 与 `makemigrations --check --dry-run` 通过。
- 下一步:领取 T-629,建立与点数充值订单隔离的软件套餐购买、续订订单和幂等权益入账。
## 2026-07-21 评审:T-624~T-628 静态代码复核
- 范围:`apps/licensing/` 全模块、`apps/api/views.py` 授权入口、`apps/api/telemetry.py`、`apps/api/urls.py`、`apps/licensing/admin.py`。因当前 WSL 环境未安装 Python/Django,未能实际运行测试与 `check`,本次为静态代码审查,卡片自述的测试通过情况未独立复验。
- 结论:五张卡与实现一致,判定达标。设备与公钥只存 HMAC/SHA256 摘要,会话与凭证只存 hash;重复登记复用设备并轮换旧会话;遥测字段为白名单,未泄露摘要、令牌、Key、prompt;401/403 映射与卡片一致;专属入口以 Mixin + 独立路由隔离,通用 `/api/v1/generate/*` 未受影响。
- 发现①(须在 T-629 前修):`renew_software_entitlement` 不刷新已签发 `DeviceCredential.expires_at`。凭证有效期在签发时钉死为当时的 `grace_expires_at`,续费后不随权益延长,用户会在旧宽限期后被判 `license_expired`。当前影子模式不阻断故未暴露,切强制即影响付费用户。已写入 T-626 遗留与 T-629 前置修复。
- 发现②:`revoke_software_entitlement` 不吊销凭证也不释放席位,裁决层由 `is_usable_at()` 兜底,属数据残留非安全问题。已随①一并登记到 T-629。
- 发现③:`CMSHOPEE_AUTHORIZATION_SHADOW_MODE` 仅写入日志,无任何分支依据它拒绝请求。符合阶段 2 预期,但已在 T-628 卡片留档,提醒切强制需要改代码而非改配置。
## 2026-07-21 开始:T-629 软件套餐购买、续订订单与权益入账
- 先收紧任务口径:软件订单、支付回调与权益发放必须和 `RechargeOrder` / `PointsLedger` 隔离;支付交易号在软件订单域内唯一,并可追溯至目标权益和授权事件。
- 第一版只支持用户主动月度续订,不实现自动代扣,也不实现支付退款后的自动权益回收;退款与撤销走带订单号和原因的运营人工流程。自动回收须在未来以按订单权益周期/发放账本为基础单列任务,不能直接回滚累计到期时间。
- 实现顺序:先修 T-626 的凭证续期同步和撤销清理,再实现独立软件订单、独立回调/查单、portal 与 HTTP/并发回归测试。