Commit Graph
84 Commits
Author SHA1 Message Date
yml2213 3a6649a054 feat: 重做协作台账状态机并支持充值核账 2026-10-19 16:06:02 +08:00
yml2213 905a7ef22c fix(huya): 查询积分改走积分中心新接口(含成长等级)
旧活动接口 webActUI.getUserScore 对任何 sid 都返回 603「活动已结束」
(接口已下线,与工作台 SID/活动配置无关),刷新积分只会报错。

- 协议层新增两个 RPC(WSS + HTTP 双侧同签名):
  shopMiddleUI.getRedeemNeedGoods(tag2=当前积分、tag3=兑换门槛,
  兑换商品号 POINTS_REDEEM_GOODS_NUM=8315982,传错直接 500)
  与 GameBizUI.getGrowLevelUserInfo(成长值/成长等级/昵称/头像)
- 新增结构体 GetRedeemNeedGoodsReq / GetGrowLevelUserInfoReq,
  与 HuyaEliteWssSession 透传
- 服务层 _execute_query_points 主源改为积分中心接口,结果带
  points/redeem_threshold/grow_level/grow_value,并同步 account.points;
  接口无响应时才回退旧活动接口并如实报告其 603 返回
- 开通支付成功后的积分刷新同样改走积分中心接口
- 前端任务页积分结果优先读 points(兼容旧记录的 available_score),
  并在有成长等级时一并展示
- 新增 tests/test_huya_points_query.py:真机响应字节回归 + 请求参数
  字面量断言 + 服务层积分来源/回退语义(已做反向验证)

真机验证:HTTP 通道取到积分 280 / 门槛 20 / 成长等级 3
2026-10-15 15:32:46 +08:00
yml2213 b5d8d5b5d8 feat(huya): 缺网页设备态的 CK 回退 HTTP cdnws 通道
问题:外部 CK(只带登录态)导入工作台后,任何任务都被「Cookie 缺少网页设备态
(sdid/udb_deviceid/udb_guiddata/udb_anobiztoken)」直接拦下,查询角色/开通都用不了。

实测结论(2026-10-15,同一张外部 CK):
- 这些字段是 WSS 通道的门禁,不是业务必需 —— 同一条 CK 走 HTTP cdnws 可以正常查询
  角色、商品,并走完整条开通链路(商品/小店/渠道/协议/返利/试算/同意/购买权限)
- A/B 对照(同一账号只抽掉 sdid):含 sdid 服务端回包,去掉即完全不回包,说明 sdid
  是 WSS 的硬门槛,而 HTTP 通道不需要
- 因此改为按能力选通道:设备态齐全走 WSS(行为不变),缺设备态回退 HTTP 并记日志

- http_client:补齐积分中心链路(get_supplier_info / accept_hy_protocol /
  calc_order_promotion / play_mall_get_my_promotion / play_mall_query_allocation /
  get_user_profile / get_follow_wechat_status);下单与支付参数对齐 2026-10-13 抓包
  (appInfo.scene=7、订单 src/orderScene=4、orderType=6、jifencenter 标记、空点击序列、
  m-shop.huya.com/points.html 回调),并去掉 orderType 1→10 的重试循环(有重复下单风险)
- huya_runner_core:_activity_client/_shop_client 不再抛 COOKIE_INCOMPLETE,改为
  返回 HTTP cdnws 客户端(方法签名与 WSS 会话保持一致,任务侧无感)

验证:tests/test_huya_http_shop_flow.py(下单/支付参数与回调域名)、
tests/test_huya_runner_transport.py(通道选择:缺设备态走 HTTP、齐全仍走 WSS);
真机 HTTP 开通链路 8 步全通(末步服务端返回业务提示「已超过该商品的购买上限」,
说明通道可用而非被丢弃)。反向验证:关掉回退即复现原报错。全量 pytest 717 passed。
2026-10-15 15:21:51 +08:00
yml2213 a9d711a7e9 fix(huya): 结构体尾部字段容错解析(服务端新增 ZERO 字段不再打挂整个 RPC)
真机现象(2026-10-15,外部 CK 导入后查询角色):checkUserBindGameAccount 响应结构
尾部多了 tag6(ZERO 类型 0x6c),共享的 read_struct 读到非 STRUCT_END 直接抛
「期望 STRUCT_END, 实际 0x0c」,整个 RPC 返回 None —— 工作台「查询角色」永远失败。

- taf_protocol:read_struct 收尾改为按 TAF 语义跳过未建模的尾部字段(上限 32 个,
  防止解析错位时无限吞字节);新增 skip_to_struct_end()
- frame_decoder / shop_structs:抽出 decode_struct_bytes 与 ShopRawRsp.from_payload,
  WSS 与 HTTP 两条通道共用一份通用解码逻辑(wss_client 同步改用)

验证:tests/test_huya_struct_parse_resilience.py 用真机响应字节回归(含 tag6=ZERO 的
响应能解析出角色「泪雨全是谎言」);按 AGENTS.md 反向验证 —— 注掉
skip_to_struct_end() 即复现线上报错「期望 STRUCT_END, 实际 0x0c」,还原后恢复。
全量 pytest 通过。
2026-10-15 15:21:34 +08:00
yml2213 f540dcfc29 feat(huya): 对齐积分中心开通链路(2026-10-13 抓包)
按 10.13「开通精英宝典/购买幸运币」抓包(m-shop.huya.com/points.html)对齐商城链路:

- WSS host 改为 launch.queryHttpDns 动态解析(失败回退抓包实测 host);握手 baseinfo
  只带 uid/guid/页面 UA/exp,Origin 与页面同源
- wsLaunch 改为带真实 lUid/sGuid;初始化补上 AUTH(0x0A) → getConfig →
  UpdateUserExps(0x17),并把 getConfig 下发的版本 map 原样回传(不回传则业务 RPC 无响应)
- 补齐新 RPC:getSupplierInfoV5 / acceptHyProtocolV5 / calcOrderPromotion /
  PlayMallUI.getMyPromotion|queryAllocation / wupui.* / huyauserui.getUserProfile
- 下单参数对齐:shopAppInfo.scene=7 与订单 src/orderScene=4 分离、orderType=6、
  bizType=5、gameCategoryId=507、extraParam.bizParams 标记 jifencenter、env 仅空点击
  序列、支付回调指向 m-shop.huya.com/points.html
- 开通链路抽到 services/huya_shop_flow.py,充值任务改为调用它

验证:新增 tests/test_huya_points_shop_protocol.py 与抓包逐字节比对(心跳、版本回传、
wsLaunch/getConfig/下单/支付帧与新 RPC 参数,共 10 条);按 AGENTS.md 做了反向验证
(把 jifencenter 改成 0 后该用例变红,还原后恢复)。ruff format --check 与全量 pytest 通过。
2026-10-15 14:56:30 +08:00
yml2213 f101414f5e feat(accounts): 新增登录异常分型统计、多选/全量导出、筛选记忆及页面组件模块化拆分
- 新增登录失败异常分型统计:支持「必须绑定手机号」、「极验滑块」、「凭证错误」、「邮箱取码失败」、「邮箱配额已满」、「网络异常」分型识别、生命周期联动(待人工)与一键筛选;
- 新增账号名单与明细导出功能:支持勾选多选或按当前筛选条件全选,可导出纯用户名名单 (TXT) 或 UTF-8 BOM 结构化明细报表 (CSV),并支持一键复制到剪贴板;
- 优化筛选条件记忆机制:支持页面切换/返回后自动保留所有筛选与排序状态,新增顶部「重置全部筛选」快捷按钮;
- 模块化拆分 AccountsPage:将 2100+ 行的大文件拆解至 pages/accounts/ 子目录(包含状态卡片、筛选面板、工具栏、操作弹窗与表格构建器),提升可维护性;
- 验证方式:新增 5 个后端自动化单测 (test_account_failure_and_export.py),全量 694 个测试用例通过,前端 TypeScript 编译与 pre-commit 代码规范检查全部通过。
2026-10-07 17:23:39 +08:00
yml2213 4518b726ac feat(huya): 浏览器兑换三目标直达并收窄扩展注入范围
- 操作列改为「直播间 / 精英宝典 / 电竞宝典」三个直达按钮,点哪个就按哪个目标写入登录态并打开,去掉弹窗内选择
- 新增 services/huya_exchange_targets.py 统一三个目标地址,接口支持可选 body {"target": "..."}(不传=精英宝典)
- 扩展内容脚本从 <all_urls> 收窄到后台站点白名单,service worker 校验 sender.tab.url,拒绝其它来源的注入
- 注入改为 Cookie 写完后回执(ok/written/failed/error),前端按回执提示成功或失败,不再静默
- 扩展图标兜底改用 world:'MAIN' 读取;一个 Cookie 都没写成功时不打开目标页
- 兑换材料签发写审计 huya:exchange:kit(含账号与目标)
- 控制台脚本增加 huya.com 域校验与 Secure,与扩展路径保持一致
- 修复兑换记录轮询的跨账号串扰与卸载后 setState;兑换请求加 epoch 防止过期结果覆盖弹窗
- 新增 tests/test_huya_browser_exchange.py(13 项)并同步 docs/HUYA_BROWSER_EXCHANGE.md
2026-09-11 10:31:46 +08:00
yml2213 d3005478a9 feat(huya): 支持四段式账号导入接码及旋转/文本点选多级验证码闭环过验
- 账号导入:支持'账号----密码----手机号----接码链接'四段式解析与持久化存储
- 旋转验证码 (rotate_auth / xz):逆向分析官方协议,基于圆周边界采样互相关算法秒级计算旋转还原角度
- 文本点选验证码 (dx_auth):内置成语与古诗名句语料,支持题干菜名提取与古诗/成语挖空正则求解及小图动态合成
- 短信二次验证 (sms_auth2):结合 sms_url 自动轮询接码链接并 Hex 编码提交官方过验
- 前端交互:增加接码标签、在线查询短信验证码、一键自动短信登录与测试接码链接功能
- 回归测试:新增旋转验证、短信接码流与文本点选测试用例(173 passed)
2026-09-06 13:56:44 +08:00
yml2213 4f9a6864eb 优化验证码展示 2026-09-06 13:02:37 +08:00
yml2213 8309072120 统一推送前Python代码格式 2026-09-05 19:25:46 +08:00
yml2213 230d6c1918 虎牙人工兑换改用本机浏览器并新增扩展自动注入登录态
移除服务器浏览器方案(容器/Xvfb/noVNC/CDP 会话管理),后端仅下发
兑换材料;新增内置 Chrome/Edge 扩展一键写入 huya.com 登录态,
未安装扩展时回退控制台脚本手动注入,兑换始终由用户手动完成。
2026-09-05 17:55:31 +08:00
yml2213 95ad900ef0 统一推送前Python代码格式 2026-09-02 18:11:41 +08:00
yml2213 aaaa568916 修正活动WSS会话guid一致性 2026-09-02 18:07:31 +08:00
yml2213 92ba6cbc62 闭合QIMEI h38兼容键 2026-09-02 17:51:12 +08:00
yml2213 1f3773de28 修正QIMEI UUID42随机段生成 2026-09-02 17:15:06 +08:00
yml2213 17ee943753 复刻QIMEI UUID42并默认使用无头浏览器 2026-09-02 16:59:46 +08:00
yml2213 c62c025ced 整理虎牙文档并接入设备画像指纹 2026-09-02 13:42:32 +08:00
yml2213 2a1b1e642c 优化虎牙精英宝典工作台与Cookie生成 2026-09-02 12:48:41 +08:00
yml2213 8fef04d0af web_cookie_fields 用逆向算法替换随机:__yamid_new=UUIDv1时间戳复刻、game_did=35位63字符集、_yasids同源、_qimei_uuid42=1a前缀、guid回退加固定段 2026-09-01 23:48:00 +08:00
yml2213 61eb434138 双份cookie存储:raw_cookie 保存App原始凭据,与网页运行ck分离
网页运行ck(cookie列)含本地随机生成的网页设备字段,若被风控标记
无法还原纯净登录凭据;新增 raw_cookie 保存16字段App原始态,供
设备态重建/审计/复核登录有效性。

- HuyaAccount 加 raw_cookie 列(alembic 0034,MySQL TEXT nullable)
- HuyaLoginResult 加 raw_cookie 字段;App登录链补齐前快照原始凭据
- upsert_huya_cookie 支持双写;app-password-login 路由透传 raw_cookie
- 存量行 raw_cookie 为 NULL(老账号无快照),新登录自动填充
2026-09-01 23:15:20 +08:00
yml2213 45da352668 登录链补齐网页设备字段并修正udb_appid为5002
App模拟扫码登录只产出16个udb_*认证字段且udb_appid=5008(App渠道);
真实网页登录态是41字段+udb_appid=5002,缺字段注入浏览器会导致
UDB SDK判定设备态不完整。登录成功返回前用 fill_web_cookie_fields
补齐guid/qimei/yamid/game_did等字段并强制udb_appid=5002。

实测:16字段App ck -> 41字段网页形态,checkLogin=isLogined:true、
cookie/verify returnCode:0,与8.31真实扫码登录抓包一致
2026-09-01 22:44:42 +08:00
yml2213 5dc736516f 补齐网页Cookie缺失字段并接入会话自动预取guid
- 新增 core/huya/web_cookie_fields.py:4 核心设备字段(guid 取自 wsLaunch 会话、
  _qimei_uuid42/__yamid_new/game_did 随机对齐格式)+ qimei 皮肤 + 22 个统计/会话字段
- elite_session 活动通道初始化时若缺网页字段,先 wsLaunch 预取服务端认可 guid,
  补齐 cookie 后重建会话;业务 RPC 统一走补齐后的 cookie
- 实测:账号 id=58(原始 16 字段登录态)checkUserBindGameAccount status=200
  (和平精英已绑定/收麦季)、getUserScore status=200(积分 4880)
- 附补齐方案与浏览器实测来源记录 docs/HUYA_CHAT_缺失字段补齐方案.md
2026-09-01 22:12:58 +08:00
yml2213 61ce0c9672 WSS连接不信任环境代理避免SOCKS劫持 2026-09-01 20:30:01 +08:00
yml2213 9f3e3a74ce 修正活动WSS AUTH帧对齐9.1抓包字节 2026-09-01 20:25:31 +08:00
yml2213 727c32a5f5 接入匿名设备态协议补齐Cookie字段并放宽保存 2026-09-01 19:29:56 +08:00
yml2213 8447ca82ed 真实浏览器抓包与匿名设备态协议生成器 2026-09-01 19:17:36 +08:00
yml2213 48c37bb8d7 虎牙网页Cookie来源驱动合并与WSS传输门禁 2026-09-01 19:17:32 +08:00
yml2213 8e3c0e69bc 修正虎牙活动wsLaunch包封装 2026-09-01 12:56:37 +08:00
yml2213 5a1456e3cb 修正虎牙活动WSS初始化序列 2026-09-01 12:52:26 +08:00
yml2213 26514b332d 完成虎牙宝典WSS绑定与快照隔离重构 2026-09-01 12:40:22 +08:00
yml2213 2fca1210bb 切换虎牙宝典活动任务到WSS会话 2026-09-01 12:23:43 +08:00
yml2213 17e72d40a5 支持虎牙活动WSS自定义连接来源 2026-09-01 12:21:09 +08:00
yml2213 aab84e0fb5 切换虎牙宝典开通任务到WSS会话 2026-09-01 12:20:58 +08:00
yml2213 3aca102741 补齐虎牙宝典活动与商城WSS协议 2026-09-01 11:46:40 +08:00
yml2213 eb065a7c77 接入虎牙精英宝典最新商城前置流程 2026-09-01 11:42:52 +08:00
yml2213 684e16a07a 重构虎牙精英宝典协议与支付状态链路 2026-09-01 11:31:15 +08:00
yml2213 d391e2ce3e 移除二维码信封历史数据依赖 2026-08-31 17:43:55 +08:00
yml2213 05b1325a04 清理虎牙登录旧数据依赖并统一动态环境 2026-08-31 17:27:18 +08:00
yml2213 76b14b69b7 修复虎牙手机号登录并统一部署项目名 2026-08-31 16:11:08 +08:00
yml2213 09ab80e062 完成 Ruff 全量清理 2026-08-31 10:55:44 +08:00
yml2213 840af3108e 清理未使用导入和局部变量 2026-08-31 10:31:32 +08:00
yml2213 b58c6b4357 执行 Ruff 安全自动修复 2026-08-31 10:28:14 +08:00
yml2213 2a1d27f953 补充设备画像兜底说明 2026-08-30 23:05:20 +08:00
yml2213 f4ed518b50 统一虎牙 App 登录设备画像 2026-08-30 23:04:28 +08:00
yml2213 47e19ed7b2 style: 统一 Ruff 代码格式 2026-08-30 21:04:52 +08:00
yml2213 c891ac982e type: 收敛测试 schemas 与协议层类型 2026-08-30 20:35:08 +08:00
yml2213 92dc461e52 type: 收窄虎牙 OCR 与登录类型 2026-08-30 20:24:25 +08:00
yml2213 3f97dbe525 type: 收窄虎牙验证与设备注册类型 2026-08-30 20:07:12 +08:00
yml2213 563477fde8 type: 修复虎牙信封解析偏移类型 2026-08-30 20:05:06 +08:00
yml2213 6439dc1942 type: 收窄虎牙 HTTP 与 WSS 客户端类型 2026-08-30 20:04:08 +08:00