79 lines
3.9 KiB
Markdown
79 lines
3.9 KiB
Markdown
# 虎牙精英宝典联调指南
|
||
|
||
更新时间:2026-09-01
|
||
|
||
## 本次联调结论
|
||
|
||
当前联调阶段只验收 App 登录后的网页 Cookie 完整性,精英宝典任务统一使用 WSS:
|
||
|
||
| 阶段 | 结果 | 证据 |
|
||
| --- | --- | --- |
|
||
| WUP 登录 | 通过 | `cred=114B`,返回真实 UID |
|
||
| hydevice 指纹 | 通过 | 返回 `sdid`、`hdid` |
|
||
| QR 绑定 | 通过 | `getQrId`、`bindQrLoginUser`、`tryQrLogin(stage=2)` |
|
||
| 网页 Cookie | 待重新登录验证 | 必须包含 9.1 网页设备态字段 |
|
||
| 精英宝典任务 | 待验证 | 仅允许 WSS,会话失败即任务失败 |
|
||
|
||
旧登录结果中的 Cookie 缺少网页设备态,已不再作为成功登录或任务链路使用。
|
||
|
||
纯 App/HTTP 登录不会由 `web/cookie/verify` 下发网页设备 Cookie。浏览器只用于
|
||
人工调试和抓取来源,未集成到脚本;登录链已接入匿名设备态协议
|
||
(`core/huya/anon_device.py`)补 `udb_deviceid`/`udb_guiddata`/`udb_anobiztoken`/
|
||
`udb_anouid`,剩余脚本字段(`guid`/`game_did`/`_qimei_uuid42`/`__yamid_new`)
|
||
缺失时警告并保存,不伪造、不启动浏览器。
|
||
|
||
## 推荐联调顺序
|
||
|
||
1. 在 `http://localhost:5174/` 登录一个测试账号,确认日志出现 `App协议登录成功`。
|
||
2. 配置精英宝典 `SID`。9.1 抓包对应活动 SID 为 `2203`;以页面“精英宝典设置”中的当前值为准。
|
||
3. 按下面顺序在精英宝典工作台执行任务:
|
||
- `query_game_name`:验证角色绑定状态。
|
||
- `query_points`:验证积分响应和数据库写回。
|
||
- `query_exchange_records`:验证记录解码和页面展示。
|
||
- `refresh_goods`:拉取商品快照。
|
||
- 选一个明确可兑换、价格低于余额的商品,再执行 `exchange_goods`。
|
||
4. 兑换成功后再次执行 `query_points` 和 `query_exchange_records`,核对余额扣减与新增记录。
|
||
5. 充值/开通链路单独联调:先 `refresh_recharge_goods`,再只生成支付码 `create_recharge_order`。支付确认不要和查询任务混在同一批次。
|
||
|
||
## 如何判定传输通道
|
||
|
||
执行器只检查字段是否存在,不记录字段值:
|
||
|
||
```text
|
||
必要字段:udb_cred、udb_biztoken、udb_uid、yyuid、sdid、udb_deviceid、udb_guiddata、udb_anobiztoken
|
||
```
|
||
|
||
- 字段齐全:尝试活动或商城 WSS。
|
||
- 缺少字段:任务日志列出缺失字段并停止,不创建 HTTP 客户端,例如:
|
||
|
||
```text
|
||
Cookie 缺少网页设备态(udb_deviceid, udb_guiddata, udb_anobiztoken),已停止活动 HTTP 回退
|
||
```
|
||
|
||
`guid`/`game_did`/`_qimei_uuid42`/`__yamid_new` 四个脚本字段无服务端签发接口,
|
||
登录时缺失只警告不阻断保存,WSS 判定也不再要求(风控风险自担)。
|
||
|
||
- WSS 握手、`wsLaunch`、`getConfig` 或业务 RPC 任一步失败:任务直接失败并记录具体阶段,便于修复 Cookie 或协议参数。
|
||
|
||
## WSS 专项验收
|
||
|
||
只有从同一网页会话取得真实 `guid` 后,才做 WSS 专项联调。验收顺序为:
|
||
|
||
1. 活动 WSS 初始化:`wsLaunch -> AUTH -> mobileui.getConfig -> CONFIRM`。
|
||
2. 活动 RPC:`checkUserBindGameAccount -> getUserScore -> getUserPrizeRecords`。
|
||
3. 商城 WSS 初始化:`wsLaunch -> getConfig -> register -> CONFIRM`。
|
||
4. 商城只读 RPC:`getGoodsInfoV5 -> listPayChannelV5 -> checkHyProtocolV5`。
|
||
5. 最后才验证 `createOrder -> payOrderSubmit -> orderDetail`。
|
||
|
||
网页设备字段必须来自同一网页/设备会话;`_merge_web_cookie` 不会根据长度、正则或 UID 生成 `guid`、QIMEI、`udb_anobiztoken` 等字段。
|
||
|
||
## 本次测试命令
|
||
|
||
```bash
|
||
.venv/bin/python -m pytest -q tests/test_huya_app_login.py tests/test_huya_runner_transport.py
|
||
.venv/bin/python -m ruff check core/huya web/backend/services/huya_runner_core.py tests/test_huya_runner_transport.py
|
||
git diff --check
|
||
```
|
||
|
||
预期:测试通过、Ruff 无错误、差异检查无输出。真实联调以 `logs/app-YYYY-MM-DD.log` 中每个 RPC 的状态码和任务最终状态为准。
|