sileya-ai opened issue sileya-ai/vr-shopxo-plugin#21

sileya-ai
Thu, 23 Apr 2026 04:36:55 +0000

21#Phase 4 开发进度追踪（截至 2026-04-23）

Phase 4 当前状态

✅ 已完成

模块 | 文件 | 状态 | Commit
短码混淆算法 | service/BaseService.php | ✅ 完成（P0 bug已修复） | acceedf6b
QR签名/验签 | service/BaseService.php | ✅ 完成 | 06d0382dd
出票链路 | service/TicketService.php | ✅ 完成 | 06d0382dd
QR缓存逻辑 | service/TicketService.php | ✅ 完成 | 969a66792
核销验证 | service/TicketService.php | ✅ 完成 | 06d0382dd
审计日志 | service/AuditService.php | ✅ 完成 | 06d0382dd
单元测试 | tests/phase4_1_feistel_test.php | ✅ 30/31 passed | acceedf6b

🔧 进行中

模块 | 文件 | 状态
B端核销API | admin/controller/Ticket.php | ⏳ 开发中
B端核销页 | admin/view/ticket/verify.html | ⏳ 开发中

❌ 待建

模块 | 文件
C端票API | api/controller/Ticket.php
C端票夹页面 | index/Ticket.php
票夹HTML | view/goods/ticket_wallet.html
票卡片段 | view/goods/ticket_card.html
票夹服务 | service/WalletService.php

重大变更记录

变更 #1：Feistel-8 → HMAC-XOR 算法替换（2026-04-23）🔴→✅ 已修复

问题：原 Feistel-8 方案 encode/decode 往返测试全部失败。

根因：

1. feistelRound() 用字符串拼接而非二进制 pack，与 encode 不对称

2. Decode 逆向轮（7→0）使用错误变量（L 而非 R）作为 F 输入

3. XOR 在掩码后丢失高位信息

修复：改用 HMAC-XOR（XOR 本身对合，encode=decode）

Commit: acceedf6b — fix(phase4.1): 修复 Feistel-8 往返失败 P0 bug

变更 #2：短码设计改为「明文 goods_id + 可变长度 ticket_id」（2026-04-22）

变更前：goods_id + ticket_id 拼接后整体混淆，解码需 goods_id_hint
变更后：goods_id 明文前4位，ticket_id 单独混淆，解码 O(1)

Commit: 4c1192d49 — fix(phase4.1): 修正短码为变长 ticket_id 设计

Plan 文档更新

所有变更已记录至 docs/PHASE_4_PLAN.md（Section 十三：重大变更记录）