Files
notiMessage/docs/TNG_MoneyPacket领取台.md
mars 1e2021d8fd docs(tng): 补充 Money Packet 领取台说明,并同步自动拉详情 Hook
说明 activityId、手动缓存模板后再自动拉历史详情的流程,以及 /mmp 双通道与去重行为。
2026-08-04 15:39:44 +08:00

4.8 KiB
Raw Blame History

TNG Money Packet 领取台说明

更新2026-08-04
相关代码:TngMoneyPacketHook.javadebug-server/server.pyAppConfig.DEBUG_SERVER_URLS

目标

抓取 TNG eWallet Money Packet红包 的领取排行:谁领了、领了多少,并在 PC 调试台按单个红包展示。

页面与地址

入口 地址
本机USB + adb reverse http://127.0.0.1:8765/mmp
局域网 / USB 共享网 http://<电脑IP>:8765/mmp (当前常见:http://10.151.104.25:8765/mmp
通用消息台 http://127.0.0.1:8765/

手机推送会同时尝试:

  • http://127.0.0.1:8765(需 adb reverse tcp:8765 tcp:8765
  • http://10.151.104.25:8765USB 共享网段;若电脑 IP 变了,改 AppConfig.DEBUG_SERVER_URLS

启动调试台:

powershell -ExecutionPolicy Bypass -File scripts/start-debug-server.ps1

红包唯一标识

正式字段是 activityIdUUID例如

  • b8c37a58-bb2c-4aa2-83ef-f15466b9211e
  • e5dcf293-4062-4df4-a692-e3bf194d9a37

领取台左侧按 activityId 分条;详情页会显示完整 ID。
转发正文格式示例:

[MMP统计] packet=<activityId> | sender=... | total=1.00 | via=rpc | src=moneyPacketDetail
昵称A -> 0.71
昵称B -> 0.29

金额在 App 内多为 Money 对象 {"amount":"0.71","cent":"71",...}Hook / 调试台会规范成数字再展示。

数据从哪来

来源 Quake op / 方法 内容
历史列表 moneyPacketHistoryList / ap.tngdwallet.moneyPacket.list.retrieve 仅摘要:activityId、总额、时间等,无领取排行
红包详情 moneyPacketDetail / ap.tngdwallet.moneyPacket.retrieve activityPoolInfos(领取人 + 金额)

外部 mitm 因证书 pinning 解不开 TNG API 正文;必须用进程内 XposedTngMoneyPacketHook)。

消费端详情领取列表字段主要是 activityPoolInfosreceiverName + amount),不是商户版的 receiverList

推荐操作流程(自动拉详情)

历史页本身没有排行数据。自动拉取需要一次「带登录态的详情请求」作模板:

  1. 打开 TNG → Money Packet
  2. 先手动点开任意一条历史红包详情(看到排行榜即可)
    • 日志:cached detail request template(缓存 session / 请求模板)
  3. 返回历史列表,停留几秒
    • 日志:history hit → schedule auto detail
    • 随后:auto-detail using template / auto-detail ok activityId=... claims=N
  4. 刷新领取台:http://127.0.0.1:8765/mmp

若跳过第 2 步,自动请求常返回 totalCount:0(缺 sessionId 等),台上会没有领取人。

也可继续「只点详情」:每进一个详情就会捕获该 activityId 的排行。

去重与刷新行为

规则 说明
标识 activityId 区分红包
短时去重 同一 activityId + 相同领取名单,约 20 秒内不重复推送(防双 Hook / 连点)
可刷新 超过 20 秒再进详情,或领取名单变化,会再次推送
自动拉冷却 同一 activityId 自动拉详情成功后约 60 秒内不重复自动拉
调试台 同一 activityId 只保留最新完整快照做排行;双通道推送有短时内容去重

日志里若出现 skip dup activityId=...,表示短时去重生效,不是没抓到。

排障

adb logcat | findstr TngMmp

常见日志:

日志 含义
TngMmp installed Hook 已加载
cached RPC task MoneyPacketRpcTask 已缓存 RPC 代理
cached detail request template 已缓存手动详情请求(自动拉可用)
history hit → schedule auto detail 历史列表触发自动拉
auto-detail empty claims ... totalCount:0 请求缺登录态或模板未缓存
auto-detail ok activityId=... claims=N 自动拉成功
captured activityId=... claims=N 已转发到 notiMessage / 调试台

其它检查:

  1. LSPosed 作用域包含 my.com.tngdigital.ewallet,模块为最新 APK
  2. 强停后再开 TNG使新 Hook 生效
  3. 调试台进程在跑USB 时执行过 adb reverse
  4. notiMessage 监听列表勾选了 TNGHook 转发依赖主 App 接收广播)
  5. 电脑 USB 共享 IP 变化后更新 AppConfig.DEBUG_SERVER_URLS 并重装主 App

相关文件

文件 作用
xposed-module/.../hook/TngMoneyPacketHook.java Quake RPC Hook、自动拉详情、金额/activityId 解析
debug-server/server.py /mmp 领取台、/api/mmp
app/.../AppConfig.java DEBUG_SERVER_URLS 双地址
app/.../network/DebugForwarder.java 向多个调试地址推送
scripts/start-debug-server.ps1 启动调试台 + adb reverse