# 腾讯 IM 账号存在性检查 ## 官方契约 已核对[腾讯云查询账号文档](https://cloud.tencent.com/document/product/269/38417)及[国际站中文文档](https://intl.cloud.tencent.com/zh/document/product/1047/34956): - `account_check` 为只读查询,单次最多 100 个账号。 - 请求为 `CheckItem` 数组,每项包含 `UserID`。 - 响应 `ResultItem` 每项包含 `UserID`、`ResultCode`、`ResultInfo`、`AccountStatus`;不是 `CheckResult` 字段。 - 只有 `ResultCode = 0` 且状态为 `Imported` / `NotImported`,才能判断已导入 / 未导入。非零结果码表示检查失败,不能当作未导入。 ## 实现 `server/app/common/service/TencentImService.php` 新增: ```php public function checkAccounts(array $accounts): array // ['existing' => string[], 'missing' => string[]] ``` 复用 `project.trtc` 配置和管理员签名,仅请求 `im_open_login_svc/account_check`,timeout 为 15 秒。单次方法调用最多发出一次 HTTP;上层负责分批和调度,方法内没有重试或账号导入。 输入必须为非空字符串,去重后不超过 100 个;超出限制在请求前抛错。空输入直接返回两个空数组。返回列表按原始输入顺序排列,不依赖云端结果顺序。 整批完整成功后才返回分类。顶层错误、单项错误、无效状态、结果遗漏、重复账号或未请求账号均抛出 `RuntimeException`。云端 `ErrorInfo/ErrorCode` 或 `ResultInfo/ResultCode` 保留为异常消息和 `getCode()`;网络异常同样不会转成缺失账号或空成功结果。 ## 验证 - `php server/tests/TencentImAccountCheckTest.php` → `TENCENT_IM_ACCOUNT_CHECK_TEST_OK` - `php server/tests/ImRoamMessagePagerTest.php` → `IM_ROAM_MESSAGE_PAGER_TEST_OK` - 服务及新增测试的 `php -l`:通过。 - 服务 `git diff --check`:通过。 新增测试覆盖官方请求字段、管理员配置、只读端点、15 秒 timeout、空输入、100/101 边界、去重和结果排序、批次/单项错误、网络错误及错误码保留、非法和不完整响应。HTTP 全程由替身截获,任何导入调用都会令测试失败。 未请求真实腾讯云、未导入任何账号、未访问或修改业务数据库;未修改 DiagnosisLogic、同步 Session 或前端。本子任务未提交。