# Rock发货平台 (0666.pro) 自动发货逆向与接口分析报告 > **编制日期**:2026-10-05 > **抓包来源**: > 1. `/Users/yml/Desktop/抓包/rock相关/打包两个并查看-发货黑色.har` > 2. `/Users/yml/Desktop/抓包/rock相关/打包两个黑色并查看.har` > 3. `/Users/yml/Desktop/抓包/rock相关/兑换记录等杂项.har` > 4. `/Users/yml/Desktop/抓包/rock相关/蓝色一个发货.har` > 5. 前端完整源码:`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 `。 | **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 点 #### 实际组合计算示例: 1. **兑换黑色ROCK + 幸运币**: $$\frac{180 - 80}{10} = \mathbf{10} \text{ 个幸运币}$$ (抓包记录完全吻合:`currencyQuantity: 10`) 2. **兑换蓝色运动服 + 幸运币**: $$\frac{180 - 40}{10} = \mathbf{14} \text{ 个幸运币}$$ (用户截图完全吻合:按钮显示“领取蓝色运动服上衣 + 幸运币x14”) 3. **若选择服饰币(单价 1)**: - 黑色ROCK + 服饰币:$(180 - 80) / 1 = 100$ 个服饰币 - 蓝色运动服 + 服饰币:$(180 - 40) / 1 = 140$ 个服饰币 --- ## 三、 Token 全生命周期状态机 ```mermaid 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) 系统提供两种调用链路: 1. **主控管理端(带 Bearer 鉴权)**:用于后台批量提取 Token、监控状态。 2. **免登录公开端(仅凭 `redeem_code`)**:用于生成买家专用发货链接,完全无状态。 ### 4.1 提取 Token (Claim) - **请求方式**:`POST https://0666.pro/api/user/tokens/claim` - **请求头**: ```http Authorization: Bearer Content-Type: application/json ``` - **请求体**: ```json { "color": "black", // "black" 或 "blue" "count": "1" // 提取数量 } ``` - **返回体**: ```json { "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` 的客户端均可调用。 - **返回体**: ```json { "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` - **返回体**(绑定成功): ```json { "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) - **请求体**: ```json { "skin": "黑色ROCK长袖T恤", // 必须在可选列表内 "currency": "幸运币", // "幸运币" / "荣耀勋章" / "物资币" / "服饰币" "account": "感性的洁少" // 必须与 binding.role 一致 } ``` - **返回体**: ```json { "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` - **请求体**: ```json { "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 ` - **Query 过滤参数**: - `page`: 页码(从 1 开始) - `pageSize`: 每页数量 - `account`: 游戏角色名 / 角色 UID(精准核账) - `token`: 按指定 Token 过滤 - `region`: 按区服过滤 - `dateFrom` / `dateTo`: 兑换时间范围 - **返回体**: ```json { "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` 列表中,包含每一笔发货的腾讯底层官方唯一凭据: ```json { "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 ` - **请求体**: ```json { "reason": "买家扫码绑定异常/账号封禁" } ``` - **作用**:将无法使用的 Token 置为 `abnormal` 异常状态,冻结并报备管理员或提交员。 ### 4.9 账户体系与登录接口 (Authentication & Profile) - **商户信息与积分快照**: - **请求方式**:`GET https://0666.pro/api/me` - **请求头**:`Authorization: Bearer ` - **返回体**: ```json { "user": { "id": 10028, "username": "王大锤", "role": "merchant", "points": 8271.2, "status": "active" } } ``` - **上游登录机制解构 (EV-16)**: - **方式一(无密码短信验证码)**: 1. 发送验证码:`POST /api/auth/send-code`,Body: `{"username": "商户名"}` 2. 验证码校验登录:`POST /api/auth/phone-login`,Body: `{"username": "商户名", "code": "123456"}` 3. 成功后返回 `{"token": "05c55d8b8c...", "user": {...}}`,前端存入 `localStorage.yd_token`。 - **方式二(Token 直接配置)**: 直接携带有效的 `yd_token` 发起全部 API 调用。因上游商户账号无固定密码,**实施阶段确认采用后台直接录入 Token 的模式进行对接**,后续再按需考虑是否引入验证码登录交互。 --- ## 五、 已知、未知与对接目标清单 ### 5.1 已知事项 (Knowns) 1. **网络通信协议无加密防护**:请求为明文 JSON,无需逆向复杂的 Webpack 虚拟机加解密或 WAF 签名算法,通信门槛低。 2. **商户账号鉴权特征明确**:上游**无独立密码登录**,仅支持 Token 登录与“用户名+手机短信验证码”登录。登录态通过 `Authorization: Bearer ` 全局透传,有效期长且支持通过 `GET /api/me` 实时探测状态与积分余额。 3. **角色绑定走和平精英官方 H5 授权**:由腾讯官方活动页面(`gp.qq.com`)承接鉴权,安全合规,无风控封号风险。 4. **提取统一下单通用 Token,绑定后发货前动态选择皮肤**: - 提取采购阶段统一下单为“黑色通用 Token”(`1 = 黑色`),生成通用绑定链接; - 买家扫码并通过 UID 强一致门禁后,在最终发货调用 `POST /api/redeem/{id}` 时,根据订单商品动态传入 `skin`(黑色ROCK或蓝色运动服)。 5. **具备官方发货凭证与对账接口**: - 上游返回 `fulfillId`(腾讯官方发货单号),可直接作为我们系统的 `ProviderOrderNo`; - 提供 `GET /api/user/exchange-records`,支持异步核验与网络超时防重对账。 6. **公开免登录能力完整**:买家端可直接使用 `redeem_code` 独立完成绑定与兑换,避免在买家端暴露平台主账号的 Bearer Token。 ### 5.2 核心业务决策与防错机制 (Decisions & Guards) 1. **后台全反代无感方案**:系统统一反代,买家和打手使用本系统原生提货页 `/delivery/:orderNo`,绝不暴露上游平台。 2. **UID 强一致防御门禁**:前置强制输入 UID,捕获角色不符时硬阻断发货;记录初始快照防止上游旧绑定信息混淆。 3. **系统用户采购凭据先落 Token 模式**:后台提供极简 Bearer Token 录入与一键连通性测试(调 `/api/me`),自动读取用户名和积分;暂不接入验证码流程,避免多余交互。 4. **本地通用库存池与自动补货**:本地维护统一的通用 Token 池,支持采购 50 个、低水位告警与自动补货。 5. **绑定错误统计与全局总开关**:mismatch 独立看板,全局发货总开关(Kill Switch)一键止血熔断转人工。 ### 5.3 下一步对接目标 (Next Steps / Goals) 1. 建立本地 `rock_tokens` 通用库存表与系统配置存储(存储 `rock_bearer_token` 等)。 2. 开发上游 0666 纯 HTTP 交互模块(Claim 采购、Refresh 刷新、Redeem 兑换、ExchangeRecords 对账、Me 心跳与积分探测)。 3. 接入后台批量采购 50 个、库存列表、mismatch 统计看板、水位预警(飞书/钉钉)与自动补货任务。 4. 提货前端接入 UID 前置输入与扫码一致性校验硬阻断。 5. 完成标准 `RockProvider` 接入既有路由与发货工作台。