Files
zyt/artifacts/im-account-filter/account-check.md
T
2026-09-09 15:47:48 +08:00

2.3 KiB
Raw Blame History

腾讯 IM 账号存在性检查

官方契约

已核对腾讯云查询账号文档国际站中文文档

  • account_check 为只读查询,单次最多 100 个账号。
  • 请求为 CheckItem 数组,每项包含 UserID
  • 响应 ResultItem 每项包含 UserIDResultCodeResultInfoAccountStatus;不是 CheckResult 字段。
  • 只有 ResultCode = 0 且状态为 Imported / NotImported,才能判断已导入 / 未导入。非零结果码表示检查失败,不能当作未导入。

实现

server/app/common/service/TencentImService.php 新增:

public function checkAccounts(array $accounts): array
// ['existing' => string[], 'missing' => string[]]

复用 project.trtc 配置和管理员签名,仅请求 im_open_login_svc/account_checktimeout 为 15 秒。单次方法调用最多发出一次 HTTP;上层负责分批和调度,方法内没有重试或账号导入。

输入必须为非空字符串,去重后不超过 100 个;超出限制在请求前抛错。空输入直接返回两个空数组。返回列表按原始输入顺序排列,不依赖云端结果顺序。

整批完整成功后才返回分类。顶层错误、单项错误、无效状态、结果遗漏、重复账号或未请求账号均抛出 RuntimeException。云端 ErrorInfo/ErrorCodeResultInfo/ResultCode 保留为异常消息和 getCode();网络异常同样不会转成缺失账号或空成功结果。

验证

  • php server/tests/TencentImAccountCheckTest.phpTENCENT_IM_ACCOUNT_CHECK_TEST_OK
  • php server/tests/ImRoamMessagePagerTest.phpIM_ROAM_MESSAGE_PAGER_TEST_OK
  • 服务及新增测试的 php -l:通过。
  • 服务 git diff --check:通过。

新增测试覆盖官方请求字段、管理员配置、只读端点、15 秒 timeout、空输入、100/101 边界、去重和结果排序、批次/单项错误、网络错误及错误码保留、非法和不完整响应。HTTP 全程由替身截获,任何导入调用都会令测试失败。

未请求真实腾讯云、未导入任何账号、未访问或修改业务数据库;未修改 DiagnosisLogic、同步 Session 或前端。本子任务未提交。