# 02 — 完成平台账号本人扫码绑定闭环

**What to build:** 平台账号和超级管理员可以从本人会话发起官方企微 Web 登录扫码，安全完成本人绑定、查看结果、换绑或解绑；超级管理员可以查看平台绑定清单并强制解绑冲突成员，代理账号始终不能创建或管理企微绑定。

**Blocked by:**

- 01 — 交付企微连接状态与安全 Adapter 闭环
- `.scratch/tech-global-audit/issues/01-audit-event-write-loop.md` — 01 — 交付不可变 Audit Event 写入闭环

**Status:** ready-for-agent

**架构通道:** 复杂写，采用 Application + Domain + Repository/WeCom Adapter；绑定清单为辅助 Query。

**完整业务边界:** 本票收口系统账号与企微成员一对一绑定、一次性会话、本人解绑和超级管理员强制解绑。明确不改变账号认证、角色或店铺模型，不允许人工录入 `userid`，不为代理建立绑定。

- [ ] 只有当前已登录且启用的平台账号或超级管理员可以为自己创建绑定会话；随机 `state` 五分钟有效且原子读取删除，独立 `session_id` 十分钟内可查询结果。
- [ ] 回调只从服务端会话确定目标账号，调用 `auth/getuserinfo` 验证企业成员；前端不能传入或覆盖账号 ID、后台 Origin 或企微成员事实。
- [ ] 账号 ID 与企微 `userid` 均保持一对一唯一；非企业成员、过期或重复 state、成员已绑定其他账号均安全拒绝，换绑必须由本人重新扫码。
- [ ] 回调成功页只向服务端配置的固定 Origin 发送结果，原页面可以通过 `session_id` 轮询兜底；响应和页面不泄露 Token 或其他账号信息。
- [ ] 平台账号只能查询和解绑本人；超级管理员可分页查看绑定状态并强制解绑，代理访问所有绑定接口均被拒绝。
- [ ] 绑定、换绑、解绑和强制解绑写统一 Audit Event；测试覆盖并发唯一性、会话单次消费、权限、停用账号及历史审批身份快照不随绑定变化；新增 Handler 同步路由、RouteSpec 和两个 OpenAPI 文档生成器。
