fix(shangwutong): map kind 24 contact cid (#12)

Co-authored-by: Rogee <rogee@ipao.vip>
This commit is contained in:
Rogee
2026-08-13 19:27:26 +08:00
committed by GitHub
co-authored by rogee
parent a5ceb0af93
commit d00ea39f6c
9 changed files with 104 additions and 7 deletions
@@ -0,0 +1,22 @@
日期:2026-08-13
依赖:`reference/shang-wu-tong/reverse/swt-decompiled/`、H-47 脱敏真实 kind 统计。
## 结论
商务通实时入站的 `cid` 来自 `kind=24` 的 text,不需要等待 `kind=52` 历史批次,也不能用 `sid` 替代。
## 协议证据
- `HeartBeat.java:520` 将 `kind=24` 排除出普通事件分支,`:3458-3463` 直接把已解码 `text2` 写入 `ChatBean.cookies`。
- `HeartBeat.java:566-578` 将 `kind=52` 历史记录第二字段 URL 解码后写入同一 `ChatBean.cookies`。
- `ChatDetailFragmentMessage.java:780-860` 调用 `RenamedThread` 修改昵称。
- `RenamedThread.java:35-48` 把 `ChatBean.cookies` 作为 `oc/changecname.aspx` 的 `cid` 表单字段。
因此 Connector 只接受 APK 已证实的 `kind=24` 和 `kind=52` CID 来源。`kind=65`/渠道 JSON 可能有同名字段,但属于渠道扩展协议,不作为通用来源;其他 kind 即使正文出现 `cid`、`SWTCID` 或 `sid` 也不得猜测。
## 脱敏真实样本
授权轮询仅保留 kind 分布:`0/1/3/6/7/8/11/23/24/31/65/67/71/73/82`,`kind=52` 为零。未保留访客正文、完整 SID、CID 或凭据。
该分布覆盖到 `kind=24`,说明旧实现把它标记为 ignored 是昵称回写无 CID 的直接根因。