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

Closed
opened 2026-04-23 04:36:55 +00:00 by sileya-ai · 1 comment

Phase 4 当前状态

已完成(2026-04-24 更新)

模块 文件 状态 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
Task 1: C端票夹页面 view/goods/ticket_wallet.html 完成(+返回按钮) 4e5aaeacd
Task 1: 票卡 JS static/js/ticket_card.js 完成(apiBase 修复) f8bb136d9
Task 1: 票卡 CSS static/css/ticket_card.css 完成 4e5aaeacd
Task 1: 票夹 API api/Ticket.php 完成(list/detail/refreshQr) f8bb136d9
Task 1: 票夹服务 service/WalletService.php 完成 8b1528337
Task 1: 票卡弹窗组件 view/goods/ticket_card.html 完成 8b1528337

🔧 进行中

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

待建

模块 文件
后台 4 控制器联调 admin/controller/*
核销实时通知(Realtime) 前端订阅

Task 1 踩坑记录(2026-04-24)

票夹 API 404 双斜杠问题

根因:ticket_card.js 的 apiBase 动态构造错误 + public/ 静态文件未同步

  • document.currentScript.src.replace(...)/plugins/vr_ticket/static/js/ticket_card.js/plugins/vr_ticket/api.php(错误)
  • public/plugins/vr_ticket/static/js/ticket_card.js(Nginx serve)vs app/(PHP runtime)是两份不同文件

修复:apiBase 硬编码 + 同步 public/ 副本

Commit: f8bb136d9 — fix(Task1): 票夹API双斜杠404

经验文档: docs/DEBUG_STATIC_FILE_SYNC.md(ShopXO 插件静态文件双目录陷阱)

返回按钮

实现history.go(-1) + am-icon-angle-left(AmazeUI 内置图标,ShopXO 标准做法)

Commit: 4e5aaeacd — feat(Task1): 票夹页面左上角加返回按钮


重大变更记录

变更 #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 十三:重大变更记录)

## Phase 4 当前状态 ### ✅ 已完成(2026-04-24 更新) | 模块 | 文件 | 状态 | 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 | | **Task 1: C端票夹页面** | view/goods/ticket_wallet.html | ✅ 完成(+返回按钮) | 4e5aaeacd | | **Task 1: 票卡 JS** | static/js/ticket_card.js | ✅ 完成(apiBase 修复) | f8bb136d9 | | **Task 1: 票卡 CSS** | static/css/ticket_card.css | ✅ 完成 | 4e5aaeacd | | **Task 1: 票夹 API** | api/Ticket.php | ✅ 完成(list/detail/refreshQr) | f8bb136d9 | | **Task 1: 票夹服务** | service/WalletService.php | ✅ 完成 | 8b1528337 | | **Task 1: 票卡弹窗组件** | view/goods/ticket_card.html | ✅ 完成 | 8b1528337 | ### 🔧 进行中 | 模块 | 文件 | 状态 | |------|------|------| | B端核销API | admin/controller/Ticket.php | ⏳ 开发中 | | B端核销页 | admin/view/ticket/verify.html | ⏳ 开发中 | | C端核销状态页 | view/goods/verification_result.html | ⏳ 待开发 | ### ❌ 待建 | 模块 | 文件 | |------|------| | 后台 4 控制器联调 | admin/controller/* | | 核销实时通知(Realtime)| 前端订阅 | --- ## Task 1 踩坑记录(2026-04-24) ### 票夹 API 404 双斜杠问题 **根因**:ticket_card.js 的 apiBase 动态构造错误 + public/ 静态文件未同步 - `document.currentScript.src.replace(...)` 将 `/plugins/vr_ticket/static/js/ticket_card.js` → `/plugins/vr_ticket/api.php`(错误) - `public/plugins/vr_ticket/static/js/ticket_card.js`(Nginx serve)vs `app/`(PHP runtime)是两份不同文件 **修复**:apiBase 硬编码 + 同步 public/ 副本 **Commit**: f8bb136d9 — fix(Task1): 票夹API双斜杠404 **经验文档**: `docs/DEBUG_STATIC_FILE_SYNC.md`(ShopXO 插件静态文件双目录陷阱) ### 返回按钮 **实现**:`history.go(-1)` + `am-icon-angle-left`(AmazeUI 内置图标,ShopXO 标准做法) **Commit**: 4e5aaeacd — feat(Task1): 票夹页面左上角加返回按钮 --- ## 重大变更记录 ### 变更 #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 十三:重大变更记录)
Poster
Owner

⚠️ Issue #21 状态修正(2026-04-25)

Issue #21 创建于 2026-04-23,以下状态标注有误,予以更正:

模块 原状态 真实状态 说明
B端核销API 开发中 未开始 文件不存在
B端核销页 开发中 未开始 文件不存在
C端核销状态页 待开发 未开始 文件不存在
后台4控制器联调 未开始 未开始 正确
核销实时通知 未开始 未开始 正确

2026-04-24~25 新增完成

模块 Commit
JsBarcode本地化(cdn.jsdelivr → ShopXO自带v3.11.5) a673c0974
文档:经验条目18(public_host最佳实践) 5c433ea20
文档:开发规范第8条(插件静态文件引用规范) 5c433ea20

Issue 转为历史存档,新进度追踪见 Issue #22。

## ⚠️ Issue #21 状态修正(2026-04-25) Issue #21 创建于 2026-04-23,以下状态标注有误,予以更正: | 模块 | 原状态 | 真实状态 | 说明 | |------|--------|---------|------| | B端核销API | ⏳ 开发中 | ❌ 未开始 | 文件不存在 | | B端核销页 | ⏳ 开发中 | ❌ 未开始 | 文件不存在 | | C端核销状态页 | ⏳ 待开发 | ❌ 未开始 | 文件不存在 | | 后台4控制器联调 | ❌ 未开始 | ❌ 未开始 | ✅ 正确 | | 核销实时通知 | ❌ 未开始 | ❌ 未开始 | ✅ 正确 | --- ## ✅ 2026-04-24~25 新增完成 | 模块 | Commit | |------|--------| | JsBarcode本地化(cdn.jsdelivr → ShopXO自带v3.11.5) | a673c0974 | | 文档:经验条目18(public_host最佳实践) | 5c433ea20 | | 文档:开发规范第8条(插件静态文件引用规范) | 5c433ea20 | **Issue 转为历史存档,新进度追踪见 Issue #22。**
Sign in to join this conversation.
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: sileya-ai/vr-shopxo-plugin#21
There is no content yet.