Files
affiliate_dash/docs/rock发货平台(0666.pro)逆向与接口分析.md
yml2213 ef7f67dd0c feat(fulfillment): 接入Rock发货平台(0666.pro)代理履约、通用库存池与UID强一致风控
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配置与连通测试、库存监控、一键补货及错单解冻重置。
2026-10-05 14:56:11 +08:00

18 KiB
Raw Permalink Blame History

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 <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 点

实际组合计算示例:

  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 全生命周期状态机

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
  • 请求头:
    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&timestamp=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
  • 返回体(绑定成功):
    {
      "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)
  • 请求体:
    {
      "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):
    • 方式一(无密码短信验证码):
      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 <yd_token> 全局透传,有效期长且支持通过 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 接入既有路由与发货工作台。