# Quickstart: 骑手与用户 IM 即时沟通账号接入 **Phase**: 1 | **Date**: 2026-06-23 端到端验证指南。本文件仅描述"如何验证功能可用",具体实现代码见 tasks.md 与实现阶段。 ## 前置条件 1. 数据库已执行 `updatesql/sql.md` 中 `info_user` 加两列的 ALTER(由开发者统一手动执行)。 2. `application.yml` 已配置 `im` 段(base-url / ext-token / create-path / timeout-ms),且 `im.ext-token` 与 IM 平台一致。 3. 后端服务已重启加载新配置与新代码。 4. 已有一个可登录的测试用户(任意类型),拿到其登录 `token`。 ## 验证场景 ### 场景 1:首次开通 IM 账号(核心) **步骤**: 1. 用测试用户 token 调用: ``` POST http://localhost:8082/infouser/user/im/open Header: token: <测试用户token> ``` 2. 检查响应 `code==200`,`data.apiKey` 与 `data.imUserId` 非空。 3. 查库确认: ```sql SELECT im_api_key, im_user_id FROM info_user WHERE user_id = <该用户id>; ``` 两列均已写入非空值,且 `im_user_id` 与响应 `data.imUserId` 一致。 **预期**:成功返回凭证;库中两列成对写入。 ### 场景 2:幂等返回 **步骤**:对**同一用户**再次调用 `POST /infouser/user/im/open`。 **预期**: - 响应 `apiKey`/`imUserId` 与场景 1 完全一致。 - IM 平台 extCreate **未被再次调用**(可通过日志/IM 侧确认账号创建次数仍为 1)。 - 库中凭证不变。 ### 场景 3:未登录拒绝 **步骤**:不带 token(或带失效 token)调用 `POST /infouser/user/im/open`。 **预期**:返回未登录错误,不产生 IM 账号,库无写入。 ### 场景 4:IM 平台失败降级 **步骤**:临时把 `im.ext-token` 改成错误值(或断网模拟 IM 不可达),重启后用新用户调用开通接口。 **预期**: - 接口返回失败(IM 开通失败,可重试)。 - 库中该用户 `im_api_key`/`im_user_id` 仍为 NULL(不写无效凭证)。 - 恢复正确 token 后重试 → 成功(回到场景 1)。 ### 场景 5:全用户类型覆盖 **步骤**:分别用普通用户(0)、商家(1)、骑手(2)、夜市(3) 的 token 调用开通接口。 **预期**:四类用户均能成功开通(验证 FR-007 不按类型限制)。 ## 通过标准 - 场景 1~5 全部符合预期。 - 新老用户(im_api_key 原为空)都能通过同一接口开通(场景 1 即覆盖老用户补建)。 - 注册流程未被改动(回归验证:注册接口行为与返回结构保持原样)。