83 lines
7.7 KiB
Markdown
83 lines
7.7 KiB
Markdown
# main 合并 local 后兼容性复查
|
||
|
||
日期:2026-09-10。范围为独立 server 仓库;只合并、测试和复查,没有推送或部署。
|
||
|
||
> 最新范围调整:用户明确本次仅上线七日签到、新手礼包、战令,每日任务不进行上线操作。本文保留全仓审计历史,当前发布清单与限定范围验收以同目录 `三模块上线范围与检查.md` 为准。
|
||
|
||
## 合并方式
|
||
|
||
- 合并前 main:`8e4a9789188b1b85bc0162e8dacda6de61c5d209`。
|
||
- local:`faf881a853e0c5e181e9a34c3f8baaae373fcb00`,保留该分支及其历史,不移动、不删除、不推送。
|
||
- 共同祖先:`1dd0e9f23dd81faeb16566bcae3c34d3ff3e56ca`。
|
||
- 将 local 独有的 15 个提交压缩为 main 上的一个新提交。main 原有“更新战令”提交保留,不用 local 文件快照覆盖 main。
|
||
- 两个冲突文件:`functions/wx/KeFuInfo.ts`、`functions/wx/iosgetPayInfo.ts`。客服下单同时保留战令订单字段和礼包统计快照;旧 iOS 查单同时保留战令专用发货状态及礼包埋点。环境配置沿用 local 的环境变量方式。
|
||
- 测试加载器补充 `@/passCheckUpgrade` 真实模块解析;新增 4 项战令与礼包共存测试,未用空实现跳过战令校验。
|
||
|
||
## 与上次检查对照
|
||
|
||
| 项目 | 合并后结果 | 处理意见 |
|
||
| --- | --- | --- |
|
||
| 战令接口/支付兼容缺失 | **已消除本次分支差异造成的问题**。保留 main 的 `passCheckUpgrade`、`passCheck` 合并视图、订单版本/周期、固定价格、旧客户端补单过滤及领取保护 | 生产按完整合并版本核对,不再仅使用 local 版支付函数;不代表已完成真实支付联调 |
|
||
| 旧客户端每日任务协议 | **仍不兼容**。`dayTaskInfo/getTaskReward` 仍使用 V2;当前 MatchMaster 客户端仍发送 `levelPass/share/useEnergy/useProp` | 发布前统一新旧任务协议;旧字段请求不等同于 V2 taskId 请求,不能凭现有测试中的“legacy taskType”名称认定旧客户端兼容 |
|
||
| V2 任务账号登录 | **本次补充确认的严重问题**。main 保留旧任务刷新循环,V2 `task.version=2` 被当成任务对象写 `value`,触发 TypeError | 需要单独修复登录与任务接口的数据格式兼容;该问题已在合并前 main 复现,不是冲突解决新增 |
|
||
| 七日签到收据衔接 | **仍未解决**。后端查询自动领取,当前客户端依赖 `canClaim`、自行生成 ID,未处理服务端 `todayClaim` 恢复 | 修复断线/退出后同日恢复及第 7 天完成态补发;处理旧本地防重记录兼容 |
|
||
| 登录/支付环境变量 | **配置前提仍存在**。`IDCOUNT_NAME`、小游戏 App ID/Secret、支付签名密钥等必须配置 | 不能只更新函数代码;检查 idcount 对应文档及原生 Mongo 访问能力 |
|
||
| IAA 分库路由 | 部分接口固定访问 users;属于此前已存在的范围调整 | 只有已停用 IAA 才能作为预期变更放行;仍有 IAA 客户端时继续构成不兼容 |
|
||
| `drawHead.ts:35` | 仍有多余 `]` 造成语法错误,前次两份仓库对照均已存在 | 不属于新增 merge 错误,但整仓发布前必须处理 |
|
||
|
||
### 1. 战令保护验证
|
||
|
||
新增测试位于 `tests/rookie-gift.test.mjs`:
|
||
|
||
1. Android/原生 iOS 下单拒绝错误战令周期;正确请求保存 `passVersion=2/passEnd`,高级战令价格由服务端固定为 3000 分、数量 1。
|
||
2. 旧 iOS 客服下单和 `iosOrder→order` 转单保留战令版本、周期和价格。
|
||
3. `wx/getOrderReward` 拒绝用通用领取流程消费升级战令订单,订单保持待专用发货状态。
|
||
4. 旧 iOS 战令查单成功后保持 state=1,等待战令专用发货;已经完成的升级订单继续返回兼容成功响应,且不产生礼包埋点。
|
||
|
||
上述 4 项全部通过。原有礼包测试继续验证礼包快照、跨周期支付、重试去重键及数数失败不阻断支付。`passCheck.ts`、`passCheckUpgrade.ts`、`wx/getOrderReward.ts` 相对合并前 main 无改动。
|
||
|
||
### 2. 任务数据导致登录失败的可复现路径
|
||
|
||
代码位置:`functions/login.ts` 的旧任务刷新循环(本次合并结果约第 206 行);V2 数据来源为 `functions/dayTaskInfo.ts` / `dailyTaskService.ts`。
|
||
|
||
1. 任务接口写入 `JSON.stringify({version:2,dayKey,...,dailyTasks,weeklyRewards})`,同时 `taskTime=Date.now()`。
|
||
2. 此账号再登录,若满足 `timestamp > taskTime`(旧登录逻辑的日刷新条件,跨日会触发),循环执行 `task[key].value=0`。
|
||
3. 遍历 `version` 时实际执行对数字 2 写属性,抛出 `TypeError: Cannot create property 'value' on number '2'`,登录无法返回成功。
|
||
|
||
验证使用真实 `refreshTaskData` 生成 V2 数据,沿用登录模拟框架,设置 `taskTime=0` 确定触发刷新,并以“登录应返回 code=1”为断言。合并结果失败;将登录实现替换为合并前 main `8e4a978` 的代码,在内存中复跑同样失败。未把生产用户数据改成测试状态,未将这个已知失败行为写成应通过的业务测试。
|
||
|
||
注意:相较上次对 local 的检查,**合并后的 login 不再自动把旧任务转换为 V2**,但其他任务接口仍会转换,所以不能宣称任务问题已经消除。恢复 local 的登录刷新也只能解决登录格式问题,不能单独解决当前旧客户端任务协议不兼容。
|
||
|
||
## 验证记录
|
||
|
||
Node.js `v24.11.1`。运行:
|
||
|
||
```powershell
|
||
$env:TEST_WX_PAY_NOTIFY_URL = 'https://sor779u2w8.sealoshzh.site/wx/payCallBack'
|
||
node --test --test-reporter=spec laf-cloud/tests/sign-in-activity.test.mjs laf-cloud/tests/starter-pack.test.mjs laf-cloud/tests/rookie-gift.test.mjs laf-cloud/tests/payment-routing.test.mjs laf-cloud/tests/monthly-card-renewal.test.mjs laf-cloud/tests/login-wucai-state.test.mjs laf-cloud/tests/wucai-migration.test.mjs laf-cloud/tests/jungle-treasure.test.mjs laf-cloud/tests/daily-task-v2.test.mjs laf-cloud/tests/task-reward-request.test.mjs
|
||
```
|
||
|
||
| 检查 | 结果 |
|
||
| --- | --- |
|
||
| 上述持久化测试集(含新增共存测试) | **125 项,118 通过,7 失败,退出码 1** |
|
||
| 新增战令/礼包共存测试 | 4/4 通过,包含在 125 项内 |
|
||
| V2 任务登录定向复现 | 合并结果 1 项失败;合并前 main 对照 1 项同样失败,不计入上述 125 项 |
|
||
| TypeScript 语法解析 | 扫描 75 个 TS 文件,只有既有 `drawHead.ts:35` 语法错误;不是完整类型检查或云端构建 |
|
||
| 冲突标记、diff 空白检查 | 提交前检查,不保留未解决冲突 |
|
||
|
||
7 项现有失败仍为 Jungle 奖励表、领取资格、回调状态、下单及 usersAd 路由等 6 项,以及五彩迁移未付费状态判定 1 项,与上一轮失败名称一致。它们不因新增共存测试通过而视为解决。微信、数数、数据库均为模拟,没有真实扣款或生产联调。
|
||
|
||
## 发布建议
|
||
|
||
合并是代码整合,不是上线放行。先解决任务协议/登录和签到收据问题,再配置环境并进行正式发布验收。
|
||
|
||
现有 `七日签到与新手礼包生产上线文档.md` 基于旧 local 候选版本,不能原样视为本次 main 的发布清单。特别需要更新:
|
||
|
||
- 保留战令相关依赖及所有支付保护;当前支付函数新增礼包共享依赖时也仍依赖 `passCheckUpgrade`。
|
||
- 合并后 login 沿用 main 的旧任务实现,不应按旧文档声称它调用 `dailyTaskService`。
|
||
- 补齐 `IDCOUNT_NAME` 和 `WX_MINIGAME_APP_SECRET` 的部署核对项。
|
||
- 生产仍不发布 `signInTestAdmin`,不能按整目录覆盖时误带测试管理接口。
|
||
- 新手礼包奖励数量仍由实际发布客户端决定,旧后端 README 数量与当前客户端不同的问题仍需核对。
|
||
|
||
本次保留用户要求的合并范围,没有擅自修复上述既有业务问题,也没有改动 MatchMaster 客户端工作区。
|