1. 数据库新增 012_rock_fulfillment 迁移,创建 rock_configs 配置表与 rock_tokens 通用库存表,补齐黑色ROCK长袖T恤与蓝色运动服上衣商品目录; 2. 封装 RockClient 与 RockService,实现 0666.pro 平台 Bearer Token 极简连通校验、批量采购50个入库、水位监控巡检与自动补货; 3. 新增 RockProvider 实现标准履约路由,引入 Anti-Ghost 旧绑定基线比对与 UID 强一致门禁,扫错号硬阻断并记录为 mismatch 状态; 4. 针对黑色ROCK与蓝色运动服实现动态发货(绑定后发货前动态选择 skin),并提取腾讯官方发货流水号 fulfillId 对账; 5. 新增全局自动发货总开关(Kill Switch),支持一键软熔断降级转人工接单处理; 6. 前端新增 PlatformRock 管理大屏,提供总开关切换、Token配置与连通测试、库存监控、一键补货及错单解冻重置。
18 KiB
18 KiB
Rock发货平台 (0666.pro) 自动发货逆向与接口分析报告
编制日期:2026-10-05
抓包来源:
/Users/yml/Desktop/抓包/rock相关/打包两个并查看-发货黑色.har/Users/yml/Desktop/抓包/rock相关/打包两个黑色并查看.har/Users/yml/Desktop/抓包/rock相关/兑换记录等杂项.har/Users/yml/Desktop/抓包/rock相关/蓝色一个发货.har- 前端完整源码:
https://0666.pro/app.js(316KB 原生未混淆代码已还原提取)
核心标的:和平精英皮肤发货(黑色ROCK长袖T恤、蓝色运动服上衣、货币附赠等)
一、 证据分类与确信度评估矩阵
依照逆向工程与高强度分析标准,本次所有结论均严格基于抓包实体通信数据与前端源代码交叉验证:
| 证据项编号 | 证据分类 | 来源与定位 | 关键事实 / 发现 | 确信度 |
|---|---|---|---|---|
| EV-01 | 通信抓包 (HAR) | 发货黑色.har [Entry 34] |
提取 Token 请求:POST /api/user/tokens/claim,Body: {"color":"black","count":"2"},扣除积分提取可用 Token。 |
100% |
| EV-02 | 通信抓包 (HAR) | 发货黑色.har [Entry 36, 40] |
获取绑定及兑换配置:GET /api/redeem/{redeem_code},返回腾讯官方绑定链接 bindUrl 及皮肤/货币配置。 |
100% |
| EV-03 | 通信抓包 (HAR) | 发货黑色.har [Entry 37, 39] |
刷新绑定状态:POST /api/user/tokens/{id}/refresh,返回 binding.bound: true,角色名、角色ID、大区及历史发放记录。 |
100% |
| EV-04 | 通信抓包 (HAR) | 发货黑色.har [Entry 42] |
提交兑换发货:POST /api/redeem/{id},Body: {"skin":"黑色ROCK长袖T恤","currency":"幸运币","account":"感性的洁少"},官方发货成功。 |
100% |
| EV-05 | 前端源码 | app.js (L3617~L3720) |
皮肤与货币官方数据字典 officialSkus,黑蓝皮肤权限控制与 180 点价值换算公式。 |
100% |
| EV-06 | 前端源码 | app.js (L217513~L217600) |
兑换发货执行函数 redeemToken(),揭示其具备登录态与免登录公开态两种调用形态。 |
100% |
| EV-07 | 前端源码 | app.js (L305062~L305120) |
绑定链接解析与生成逻辑,底层依托和平精英官方活动链接 gp.qq.com/cp/a20241128mobile/...。 |
100% |
| EV-08 | 用户截图 | 微信/扫码绑定弹窗截图 | 弹窗展示 Token、状态(已绑定)、大区、角色、当前货币组合与兑换皮肤下拉选择框。 | 100% |
| EV-09 | 通信抓包 (HAR) | 兑换记录等杂项.har [Entry 4, 7] |
兑换历史对账接口:GET /api/user/exchange-records?page=1&pageSize=20,支持按账号/UID、Token、区服、时间范围精准分页对账。 |
100% |
| EV-10 | 通信抓包 (HAR) | 兑换记录等杂项.har [Entry 5] |
腾讯官方履约凭证:刷新/兑换成功记录中返回 fulfillId: 4519960(官方发放流水号)及 membership: 202610(月份期号)。 |
100% |
| EV-11 | 通信抓包 (HAR) | 兑换记录等杂项.har [Entry 3] |
下属发货员列表:GET /api/user/delivery-agents,返回该商户绑定的发货员(如丁德鑫、曹强等)。 |
100% |
| EV-12 | 用户截图 | 批量获取 Token 弹窗截图 | 提取类型默认下拉选项为 1 = 黑色,提取数量 2~500,印证了统一下单通用黑色 Token 的业务形态。 |
100% |
| EV-13 | 通信抓包 (HAR) | 蓝色一个发货.har [Entry 13] |
蓝色发货兑换请求:POST /api/redeem/151154,Body: {"skin":"蓝色运动服上衣","currency":"幸运币","account":"打破虚妄的浪漫"},发放成功。 |
100% |
| EV-14 | 通信抓包 (HAR) | 蓝色一个发货.har [Entry 1~10] |
旧绑定数据实锤证据:初次 refresh 返回旧角色“总荒凉”(3751279035);买家真正微信扫码后更新为“打破虚妄的浪漫”(3688825401),bind_change_type: "rebind",旧角色归入 previous_bound_account。 |
100% |
| EV-15 | 通信抓包 (HAR) | 蓝色一个发货.har [Entry 0] |
再次证实用于发货蓝色的 Token 151154 其本身规格仍然是 color: "black"(黑色通用 Token)。 |
100% |
| EV-16 | 前端源码 | app.js (L3700~L3760) |
商户登录与鉴权机制:平台无固定密码登录,采用“用户名+手机验证码”(POST /api/auth/send-code + POST /api/auth/phone-login),登录后下发 Bearer Token 并存于 localStorage.yd_token。请求鉴权全量走 Authorization: Bearer <yd_token>。 |
100% |
二、 核心业务模型与算法解构
2.1 颜色规格与权限差异(黑色 vs 蓝色)
平台采用 Token 作为履约载体,Token 本质为标准 HS256 JWT,分为两种颜色规格:
+---------------------------+
| Token Pool |
+---------------------------+
|
+-----------------+-----------------+
| |
v v
+--------------------+ +--------------------+
| Color: black | | Color: blue |
| (黑色高级 Token) | | (蓝色标准 Token) |
+--------------------+ +--------------------+
| |
v v
+--------------------+ +--------------------+
| 可兑换: | | 可兑换: |
| 1. 黑色ROCK长袖T恤 | | 1. 蓝色运动服上衣 |
| 2. 蓝色运动服上衣 | | 2. 其他普通皮肤 |
| 3. 其他普通皮肤 | | (系统排除了黑色ROCK)|
+--------------------+ +--------------------+
- 黑色 Token (
color: "black"):- 允许兑换:黑色ROCK长袖T恤、蓝色运动服上衣、以及其他所有皮肤。
- 提取成本:约 21.0 积分/个(抓包配置项
blackTokenCost: "21.0")。
- 蓝色 Token (
color: "blue"):- 核心限制:前端与后端均强制校验:
skinCatalog.filter(skin => skin !== BLACK_ROCK_SKIN),严禁兑换黑色 ROCK。 - 提取成本:约 21.0 积分/个(抓包配置项
blueTokenCost: "21.0")。
- 核心限制:前端与后端均强制校验:
2.2 价值平衡与货币数量计算算法
根据 app.js 的纯算模型,每个 Token 的官方标称总额度为 180 点。每次兑换发放:1 件皮肤 + N 个附赠游戏货币。
\text{附赠货币数量} = \max\left(0, \operatorname{round}\left(\frac{180 - \text{皮肤官方单价}}{\text{货币官方单价}}\right)\right)
道具官方价格字典:
- 皮肤单价 (
type: 1):黑色ROCK长袖T恤: 80 点唐装(红): 120 点火焰口罩: 160 点蓝色运动服上衣/战地情缘/卧虎藏龙/水墨画口罩: 40 点
- 货币单价 (
type: 0):幸运币: 10 点荣耀勋章: 10 点物资币: 10 点服饰币: 1 点
实际组合计算示例:
- 兑换黑色ROCK + 幸运币:
\frac{180 - 80}{10} = \mathbf{10} \text{ 个幸运币}(抓包记录完全吻合:currencyQuantity: 10) - 兑换蓝色运动服 + 幸运币:
\frac{180 - 40}{10} = \mathbf{14} \text{ 个幸运币}(用户截图完全吻合:按钮显示“领取蓝色运动服上衣 + 幸运币x14”) - 若选择服饰币(单价 1):
- 黑色ROCK + 服饰币:
(180 - 80) / 1 = 100个服饰币 - 蓝色运动服 + 服饰币:
(180 - 40) / 1 = 140个服饰币
- 黑色ROCK + 服饰币:
三、 Token 全生命周期状态机
stateDiagram-v2
[*] --> available: 平台入库/上游导入
available --> using: 用户调用 claim 提取 / 分配入包
using --> bound: 买家扫码并在官方活动页绑定角色成功
using --> abnormal: 扫码超时/异常上报
bound --> using: 买家重新扫码切换账号 (换绑)
bound --> redeemed: 提交兑换接口 (选择皮肤+货币+角色)
redeemed --> settled: 管理员/提交员结算
settled --> [*]
abnormal --> [*]
| 状态标识 | 状态中文 | 释义与系统行为 |
|---|---|---|
available |
可用 | 处于平台库存池中,尚未分配。 |
using |
使用中 / 待使用 | 已被分销商提取(claim),生成了唯一的 redeem_code,等待买家扫码。 |
bound |
已绑定 | 买家已扫码并在腾讯活动页完成角色绑定,系统已捕获到角色名称和大区。 |
redeemed |
已兑换 | 已向游戏服务器成功提交发货请求,皮肤和货币已到账。 |
settled |
已结算 | 最终财务结算状态。 |
abnormal |
异常 | 异常报错,由用户或发货员上报。 |
四、 自动化发货接口技术规格 (API Reference)
系统提供两种调用链路:
- 主控管理端(带 Bearer 鉴权):用于后台批量提取 Token、监控状态。
- 免登录公开端(仅凭
redeem_code):用于生成买家专用发货链接,完全无状态。
4.1 提取 Token (Claim)
- 请求方式:
POST https://0666.pro/api/user/tokens/claim - 请求头:
Authorization: Bearer <user_token> Content-Type: application/json - 请求体:
{ "color": "black", // "black" 或 "blue" "count": "1" // 提取数量 } - 返回体:
{ "tokens": [ { "id": 151153, "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "color": "black", "region": "Q/V可用", "phone": "13755033455", "status": "using", "redeem_code": "a4b7d1c94034e6fc52368b61dff20afe", "expires_at": "2026-11-03 11:54:30" } ] }
4.2 获取绑定二维码与链接
- 请求方式:
GET https://0666.pro/api/redeem/{redeem_code} - 说明:此接口为免登录公开接口,任何持有
redeem_code的客户端均可调用。 - 返回体:
{ "token": { "id": 151153, "color": "black", "status": "using", "redeem_code": "a4b7d1c94034e6fc52368b61dff20afe" }, "bindUrl": "https://gp.qq.com/cp/a20241128mobile/index.html?userId=13755033455×tamp=1791176387&nonce=be809689&sign=cb1ce3c99601ba6fe1902064176241d2d0a0683a", "bindError": "", "config": { "skinOptions": "[\"蓝色运动服上衣\",\"黑色ROCK长袖T恤\",...]", "defaultCurrency": "幸运币" } }
4.3 刷新与查询绑定状态 (Refresh)
- 请求方式:
- 方式 A(管理端):
POST https://0666.pro/api/user/tokens/{id}/refresh - 方式 B(公开端):
POST https://0666.pro/api/redeem/{redeem_code}/refresh
- 方式 A(管理端):
- 返回体(绑定成功):
{ "token": { "id": 151153, "status": "bound", "bound_account": "感性的洁少", "bound_account_id": "3911959065", "region": "安卓-微信" }, "binding": { "bound": true, "role": "感性的洁少", "roleId": "3911959065", "region": "安卓-微信" }, "deliveryList": [ // 该角色的历史发放记录,防止重复防刷 ], "message": "已刷新绑定信息" }
4.4 提交兑换发货 (Redeem)
- 请求方式:
- 方式 A(管理端):
POST https://0666.pro/api/redeem/{id}(请求头带 Bearer) - 方式 B(公开端):
POST https://0666.pro/api/redeem/{redeem_code}(无需 Bearer)
- 方式 A(管理端):
- 请求体:
{ "skin": "黑色ROCK长袖T恤", // 必须在可选列表内 "currency": "幸运币", // "幸运币" / "荣耀勋章" / "物资币" / "服饰币" "account": "感性的洁少" // 必须与 binding.role 一致 } - 返回体:
{ "status": "success", "message": "领取成功", "token": { "id": 151153, "status": "redeemed", "redeem_skin": "黑色ROCK长袖T恤", "redeem_currency": "幸运币", "redeemed_at": "2026-10-05 13:05:07" } }
4.5 批量打包分享 (Package,可选能力)
- 请求方式:
POST https://0666.pro/api/user/packages - 请求体:
{ "ids": [151126, 151130], "note": "订单批次001" } - 返回体:生成公开访问链接
https://0666.pro/#/package/{share_code},可直接将整包交付给大客户或批量发货打手。
4.6 兑换历史对账接口 (Exchange Records)
- 请求方式:
GET https://0666.pro/api/user/exchange-records?page=1&pageSize=20 - 请求头:
Authorization: Bearer <user_token> - Query 过滤参数:
page: 页码(从 1 开始)pageSize: 每页数量account: 游戏角色名 / 角色 UID(精准核账)token: 按指定 Token 过滤region: 按区服过滤dateFrom/dateTo: 兑换时间范围
- 返回体:
{ "tokens": [ { "id": 151153, "token": "eyJhbGciOi...", "color": "black", "region": "安卓-微信", "status": "redeemed", "bound_account": "感性的洁少", "bound_account_id": "3911959065", "redeem_skin": "黑色ROCK长袖T恤", "redeem_currency": "幸运币", "redeemed_at": "2026-10-05 13:05:07", "claimed_at": "2026-10-05 12:59:45", "redeem_code": "a4b7d1c94034e6fc52368b61dff20afe" } ], "pagination": { "page": 1, "pageSize": 20, "total": 649, "totalPages": 33 } }
4.7 腾讯官方发货履约凭证 (FulfillId)
在 POST /api/user/tokens/{id}/refresh 返回的 deliveryList 列表中,包含每一笔发货的腾讯底层官方唯一凭据:
{
"skinId": 27,
"skin": "黑色ROCK长袖T恤",
"currencyId": 13,
"currency": "幸运币",
"currencyQuantity": 10,
"time": "2026-10-05T13:05:07.337",
"role": "安卓-微信-感性的洁少",
"message": "成功发放",
"fulfillId": 4519960, // 腾讯官方发货流水号,可直接作为 ProviderOrderNo
"membership": 202610 // 发放会籍期数
}
4.8 异常上报接口 (Report Abnormal)
- 请求方式:
POST https://0666.pro/api/user/tokens/{id}/report - 请求头:
Authorization: Bearer <user_token> - 请求体:
{ "reason": "买家扫码绑定异常/账号封禁" } - 作用:将无法使用的 Token 置为
abnormal异常状态,冻结并报备管理员或提交员。
4.9 账户体系与登录接口 (Authentication & Profile)
- 商户信息与积分快照:
- 请求方式:
GET https://0666.pro/api/me - 请求头:
Authorization: Bearer <user_token> - 返回体:
{ "user": { "id": 10028, "username": "王大锤", "role": "merchant", "points": 8271.2, "status": "active" } }
- 请求方式:
- 上游登录机制解构 (EV-16):
- 方式一(无密码短信验证码):
- 发送验证码:
POST /api/auth/send-code,Body:{"username": "商户名"} - 验证码校验登录:
POST /api/auth/phone-login,Body:{"username": "商户名", "code": "123456"} - 成功后返回
{"token": "05c55d8b8c...", "user": {...}},前端存入localStorage.yd_token。
- 发送验证码:
- 方式二(Token 直接配置):
直接携带有效的
yd_token发起全部 API 调用。因上游商户账号无固定密码,实施阶段确认采用后台直接录入 Token 的模式进行对接,后续再按需考虑是否引入验证码登录交互。
- 方式一(无密码短信验证码):
五、 已知、未知与对接目标清单
5.1 已知事项 (Knowns)
- 网络通信协议无加密防护:请求为明文 JSON,无需逆向复杂的 Webpack 虚拟机加解密或 WAF 签名算法,通信门槛低。
- 商户账号鉴权特征明确:上游无独立密码登录,仅支持 Token 登录与“用户名+手机短信验证码”登录。登录态通过
Authorization: Bearer <yd_token>全局透传,有效期长且支持通过GET /api/me实时探测状态与积分余额。 - 角色绑定走和平精英官方 H5 授权:由腾讯官方活动页面(
gp.qq.com)承接鉴权,安全合规,无风控封号风险。 - 提取统一下单通用 Token,绑定后发货前动态选择皮肤:
- 提取采购阶段统一下单为“黑色通用 Token”(
1 = 黑色),生成通用绑定链接; - 买家扫码并通过 UID 强一致门禁后,在最终发货调用
POST /api/redeem/{id}时,根据订单商品动态传入skin(黑色ROCK或蓝色运动服)。
- 提取采购阶段统一下单为“黑色通用 Token”(
- 具备官方发货凭证与对账接口:
- 上游返回
fulfillId(腾讯官方发货单号),可直接作为我们系统的ProviderOrderNo; - 提供
GET /api/user/exchange-records,支持异步核验与网络超时防重对账。
- 上游返回
- 公开免登录能力完整:买家端可直接使用
redeem_code独立完成绑定与兑换,避免在买家端暴露平台主账号的 Bearer Token。
5.2 核心业务决策与防错机制 (Decisions & Guards)
- 后台全反代无感方案:系统统一反代,买家和打手使用本系统原生提货页
/delivery/:orderNo,绝不暴露上游平台。 - UID 强一致防御门禁:前置强制输入 UID,捕获角色不符时硬阻断发货;记录初始快照防止上游旧绑定信息混淆。
- 系统用户采购凭据先落 Token 模式:后台提供极简 Bearer Token 录入与一键连通性测试(调
/api/me),自动读取用户名和积分;暂不接入验证码流程,避免多余交互。 - 本地通用库存池与自动补货:本地维护统一的通用 Token 池,支持采购 50 个、低水位告警与自动补货。
- 绑定错误统计与全局总开关:mismatch 独立看板,全局发货总开关(Kill Switch)一键止血熔断转人工。
5.3 下一步对接目标 (Next Steps / Goals)
- 建立本地
rock_tokens通用库存表与系统配置存储(存储rock_bearer_token等)。 - 开发上游 0666 纯 HTTP 交互模块(Claim 采购、Refresh 刷新、Redeem 兑换、ExchangeRecords 对账、Me 心跳与积分探测)。
- 接入后台批量采购 50 个、库存列表、mismatch 统计看板、水位预警(飞书/钉钉)与自动补货任务。
- 提货前端接入 UID 前置输入与扫码一致性校验硬阻断。
- 完成标准
RockProvider接入既有路由与发货工作台。