完善半自动履约凭证与客户重新授权流程
统一虎牙和微博账号级 CK 保存与导出;CK 失效后回到客户重新登录,后台支持重发授权;客户授权页改为统一深色布局并收敛开发迁移配置。
This commit is contained in:
+10
-11
@@ -17,24 +17,23 @@ updated_at: 2026-11-08
|
||||
> [部署启动与数据库重建](部署启动与数据库重建.md)。
|
||||
> 只要包含迁移、表结构切换或派生数据重建,必须按本手册执行。
|
||||
|
||||
> 2026-11-13 增量待发布基线:`dev_11.13` 从生产迁移 `151` 增量到 `164`。
|
||||
> 2026-11-13 增量待发布基线:`dev_11.13` 从生产迁移 `151` 增量到 `161`。
|
||||
> 该次变更包含 `152_order_source_facts_immutable.sql`、
|
||||
> `158_consignment_worker_name_sync.sql`、`159_consignment_platform.sql`、
|
||||
> `160_consignment_auto_match_setting.sql`、`161_semi_auto_fulfillment.sql`、
|
||||
> `162_semi_auto_connector_mode.sql`、`163_semi_auto_connector_mode_embedded.sql`、
|
||||
> `164_semi_auto_credentials.sql`。在发布负责人确认目标提交并完成隔离恢复演练前,只作为开发基线,
|
||||
> `160_consignment_auto_match_setting.sql`、`161_semi_auto_fulfillment.sql`。
|
||||
> 在发布负责人确认目标提交并完成隔离恢复演练前,只作为开发基线,
|
||||
> 不得按旧的 `147–150` 一条路径直接上线。
|
||||
|
||||
### 1.1 迁移 `151 → 164` 增量门禁
|
||||
### 1.1 迁移 `151 → 161` 增量门禁
|
||||
|
||||
- 升级前必须确认生产最高迁移仍为 `151`;分支合并后重新核对迁移号,禁止回退或改写 `151` 及以前文件。
|
||||
- 合并后半自动迁移已顺延到 `161–164`,不得在已应用 main `158–160` 的库上新增 `153–156`。
|
||||
- `164` 新增账号级加密凭证表、`semi_auto_tasks.credential_id` 和
|
||||
`semi_auto.credential.export` 权限;不迁移或清理订单、退款、资金流水等 A 级事实。
|
||||
- 发布环境必须预先配置稳定的 `SEMI_AUTO_CREDENTIAL_ENCRYPTION_KEY`(至少 32 字符)。
|
||||
未配置或仍为示例值时,生产运行时校验会拒绝启动。
|
||||
- 半自动迁移已收敛为单个 `161_semi_auto_fulfillment.sql`,不得在已应用 main `158–160`
|
||||
的库上重新引入 `153–156` 或 `162–165`。
|
||||
- `161` 一次新增账号级 Cookie JSON 凭证表、`semi_auto_tasks.credential_id`、
|
||||
最终 Connector 来源约束和 `semi_auto.credential.export` 权限;
|
||||
不迁移或清理订单、退款、资金流水等 A 级事实。
|
||||
- 迁移完成后至少验证 `semi_auto_credentials` 表、任务外键、索引和导出权限存在;
|
||||
用测试库完成 `001 → 164` 空库迁移,并在隔离库验证 `151 → 164`。
|
||||
用测试库完成 `001 → 161` 空库迁移,并在隔离库验证 `151 → 161`。
|
||||
- 该增量仍包含迁移,普通停机发布不能使用 `deploy/ubuntu-deploy.sh` 在旧后端运行时直接换库;
|
||||
必须沿用本手册的停写、最终备份、隔离恢复验证、迁移、新后端健康检查和验收流程。
|
||||
|
||||
|
||||
+10
-10
@@ -12,7 +12,7 @@ updated_at: 2026-11-13
|
||||
> 状态:**唯一权威文档**。
|
||||
> 最后校准:2026-11-13。
|
||||
> 生产基线:迁移 `151`。
|
||||
> 开发基线:迁移 `164`(仅本地,尚未部署生产)。
|
||||
> 开发基线:迁移 `161`(仅本地,尚未部署生产)。
|
||||
>
|
||||
> 从本文件生效起,订单、内部 SKU、履约渠道、履约载体、标准商品、成本和财务相关实现,
|
||||
> 只能以本文件为业务口径。其他旧分析只作为历史资料,不再具备设计或验收效力。
|
||||
@@ -287,12 +287,13 @@ manual fulfillment
|
||||
- 半自动任务必须绑定 `order_item_id`、`fulfillments.id` 和人工履约配置,不得伪造接单平台工单。
|
||||
- 登录状态、绑定状态、执行状态必须正交保存于 `semi_auto_tasks`;不得写入 `material_json` 作为正式状态。
|
||||
- 平台 CK 是账号级凭证,唯一持久化真源为 `semi_auto_credentials`。Cookie 集合按平台 UID 唯一保存,
|
||||
使用 AES-256-GCM 加密后写入 `credential_ciphertext`,并记录来源、更新时间、健康状态和最近检查错误。
|
||||
以 Cookie JSON 写入 `credential_payload_json`,并记录来源、更新时间、健康状态和最近检查错误。
|
||||
`semi_auto_tasks.credential_id` 只引用账号凭证,任务表不保存 CK 明文。
|
||||
- Connector 会话仍是进程内短期缓存,但不再是唯一真源。进程重启、会话过期或实例切换后,
|
||||
执行器必须从账号级密文凭证恢复会话;恢复前校验平台 UID,恢复失败时更新凭证健康状态并要求重新登录。
|
||||
- 生产必须配置稳定且至少 32 字符的 `SEMI_AUTO_CREDENTIAL_ENCRYPTION_KEY`。该密钥不得与日志、
|
||||
任务事件、接口响应或导出内容一起保存;未完成历史凭证重加密前不得直接更换密钥。
|
||||
- 平台明确返回 CK 失效或账号不一致时,当前任务必须退出“已授权”状态,清空当前 Connector 会话并回到
|
||||
`waiting_customer / waiting_login / not_started`;账号级凭证和历史事件保留用于审计。客服可对该任务
|
||||
执行“重新发送授权”,重置当前任务并复制客户 `/c/<平台订单号>` 链接,客户重新登录后再绑定新凭证。
|
||||
- CK 不得进入普通任务 DTO、客户页面、任务事件、错误日志或审计明细。人工后台默认只展示平台 UID、
|
||||
凭证来源、健康状态和更新时间;仅持有 `semi_auto.credential.export` 权限的角色可受控导出单个任务的
|
||||
账号 Cookie,导出响应必须禁止缓存,审计只记录任务、凭证 ID 和平台,不记录 Cookie 内容。
|
||||
@@ -305,7 +306,7 @@ manual fulfillment
|
||||
`mock` 为 order_site 内置开发 Mock 且仅在非生产环境可用。开发 Mock 造单时默认选择 `embedded`,
|
||||
只有需要完全脱离虎牙接口联调页面时才显式选择 `mock`。
|
||||
- 虎牙二维码登录有效期 `5` 分钟;登录成功后的 Connector 内存会话有效期 `24` 小时,
|
||||
账号级 CK 由加密凭证保存并通过健康检查判定有效性;角色绑定二维码 `5` 分钟;
|
||||
账号级 CK 由内部凭证表保存并通过健康检查判定有效性;角色绑定二维码 `5` 分钟;
|
||||
浏览器一次性注入票据 `2` 分钟且消费后立即失效。重新登录前必须撤销旧 Connector 会话。
|
||||
- 虎牙账号已经绑定游戏角色时,客户必须确认当前角色是否为本次需要的角色:选择“使用当前角色”时
|
||||
不再调用虎牙换绑接口;选择“角色不对,重新扫码换绑”时重新生成绑定二维码,并在确认新角色时
|
||||
@@ -371,7 +372,7 @@ finance_journal_* -- 总账凭证,可重建
|
||||
| 执行尝试 | 履约尝试服务 | `fulfillment_attempts` | 用最大 ID 猜当前任务 |
|
||||
| 当前异常 | 履约异常服务 | `fulfillment_issues` | 自由 JSON 字符串代替问题模型 |
|
||||
| 半自动任务 | 半自动任务服务 | `semi_auto_tasks` / `semi_auto_task_events` | 把登录/绑定/执行状态写进 `material_json` |
|
||||
| 客户平台 CK | 半自动凭证服务 | `semi_auto_credentials` 加密凭证 | 明文落库、写日志、普通接口返回或未审计导出 CK |
|
||||
| 客户平台 CK | 半自动凭证服务 | `semi_auto_credentials.credential_payload_json` | 写日志、普通接口返回或未审计导出 CK |
|
||||
| 标准商品 | 商品主数据服务 | `product_catalog` | 用商品来源反推渠道 |
|
||||
| 平台商品到财务商品 | 商品归一服务 | `channel_product_mappings` | 人工在多个页面重复维护 |
|
||||
| 成本规则 | 成本中心 | `cost_versions` | 业务表直接改金额 |
|
||||
@@ -948,11 +949,10 @@ docs/archive/
|
||||
|
||||
## 十三、当前下一步
|
||||
|
||||
截至 2026-11-13,生产基线为 `151`,集成分支开发基线为 `164`。迁移 `152` 保护订单来源快照,
|
||||
截至 2026-11-13,生产基线为 `151`,集成分支开发基线为 `161`。迁移 `152` 保护订单来源快照,
|
||||
迁移 `158–160` 收口寄卖登记人同步、寄卖平台与自动匹配设置;
|
||||
迁移 `161` 增加人工渠道半自动任务,迁移 `162` 增加 Connector 来源,
|
||||
迁移 `163` 将内置真实 Connector 设为默认并扩充来源约束,迁移 `164` 增加账号级加密凭证、
|
||||
任务凭证引用和受控导出权限。
|
||||
迁移 `161` 一次建立人工渠道半自动任务、内置 Connector 默认值、账号级 Cookie JSON 凭证、
|
||||
任务凭证引用、受控导出权限和最终约束。
|
||||
|
||||
1. 生产升级只按 [生产升级操作手册](生产升级操作手册.md) 执行。
|
||||
2. 升级前备份必须完成隔离恢复验证;恢复验证未通过时禁止迁移。
|
||||
|
||||
@@ -152,7 +152,6 @@ CLAIM_BASE_URL
|
||||
POSTGRES_PASSWORD
|
||||
DATABASE_URL
|
||||
ADMIN_SESSION_SECRET
|
||||
SEMI_AUTO_CREDENTIAL_ENCRYPTION_KEY
|
||||
ADMIN_DEFAULT_USERS_JSON
|
||||
CORS_ALLOWED_ORIGINS
|
||||
STORAGE_MODE
|
||||
@@ -165,10 +164,6 @@ STORAGE_OSS_REGION
|
||||
|
||||
其中 `APP_DOMAIN`、`CORS_ALLOWED_ORIGINS` 与 `STORAGE_MODE=oss` / `STORAGE_OSS_*` 为生产必需:`docker-compose.yml:95` 的 `STORAGE_MODE` 生产默认即 `oss`,`apps/backend/src/config/runtime-validation.ts:107-114` 在生产环境强制校验 `STORAGE_OSS_*` 凭据并使用显式 CORS 域名白名单;`.env.server.example` 已给出这些变量的模板值,其中带 `change-me` 的占位会被 `deploy/ubuntu-deploy.sh` 的占位值检查拦住,需替换为真实值。
|
||||
|
||||
`SEMI_AUTO_CREDENTIAL_ENCRYPTION_KEY` 用于加密半自动履约的账号级平台 CK,生产必需且至少 32 个字符。
|
||||
该密钥必须长期稳定保存;直接更换会导致已有 `semi_auto_credentials` 无法解密。需要轮换时,先实现并验证
|
||||
旧密钥解密、新密钥重加密的数据迁移,不能只修改环境变量。
|
||||
|
||||
容器内连接 Compose PostgreSQL 时,主机名用 `postgres`:
|
||||
|
||||
```text
|
||||
|
||||
Reference in New Issue
Block a user