vr-shopxo-source/app/plugins/vr_ticket
Council d48edfb965 feat(Task1): C端票夹页面 + API 完成(附路由调试经验文档)
## Task 1 交付物
- view/goods/ticket_wallet.html       # 票夹页面
- api/Ticket.php                     # C端 API(list/detail/refreshQr)
- service/WalletService.php           # 票夹服务层
- index/Index.php                     # C端入口(wallet action)
- Hook.php                           # 注入票夹入口链接

## Bug 修复(Task1 调试过程中发现)
- index/Index.php: UserService::LoginInfo() → LoginUserInfo()
- Hook.php: session('user_id') → UserService::LoginUserInfo()(key 不存在)
- api/Ticket.php: LoginInfo() + :Json 返回类型 + json() 包裹
- WalletService.php: JOIN order 表 → 直接 WHERE user_id
- API URL: ?s=api/plugins/index(错误) → /api.php?s=plugins/index(正确)

## 新增文档
- docs/DEBUGGING_ROUTING.md  # 🔑 ShopXO 路由调试经验(必读)
- docs/TASK1_C_WALLET.md     # Task 1 交付文档
- README.md                  # 增加 Agent 快速索引

## 核心经验
ShopXO 多入口:页面=public/index.php,API=public/api.php,勿混用。
详见 docs/DEBUGGING_ROUTING.md
2026-04-24 09:48:32 +08:00
..
admin feat(Task1): C端票夹页面 + API 完成(附路由调试经验文档) 2026-04-24 09:48:32 +08:00
api feat(Task1): C端票夹页面 + API 完成(附路由调试经验文档) 2026-04-24 09:48:32 +08:00
docs feat(Task1): C端票夹页面 + API 完成(附路由调试经验文档) 2026-04-24 09:48:32 +08:00
index feat(Task1): C端票夹页面 + API 完成(附路由调试经验文档) 2026-04-24 09:48:32 +08:00
service feat(Task1): C端票夹页面 + API 完成(附路由调试经验文档) 2026-04-24 09:48:32 +08:00
static feat(Task1): C端票夹页面 + API 完成(附路由调试经验文档) 2026-04-24 09:48:32 +08:00
view feat(Task1): C端票夹页面 + API 完成(附路由调试经验文档) 2026-04-24 09:48:32 +08:00
EventListener.php
Hook.php feat(Task1): C端票夹页面 + API 完成(附路由调试经验文档) 2026-04-24 09:48:32 +08:00
README.md
install.sql feat(Task1): C端票夹页面 + API 完成(附路由调试经验文档) 2026-04-24 09:48:32 +08:00
plugin.json
uninstall.sql feat(Task1): C端票夹页面 + API 完成(附路由调试经验文档) 2026-04-24 09:48:32 +08:00

README.md

VR票务插件 - vr_ticket

核心原则:怎么快怎么来,怎么方便怎么来

安装

  1. 将本目录上传到 ShopXO 插件目录:
    cp -r vr_ticket /path/to/shopxo/app/plugins/
    
  2. 后台 → 应用中心 → 插件管理 → 找到「VR票务」→ 点击安装
  3. 数据库表自动创建

目录结构

vr_ticket/
├── plugin.json              # 插件配置(名称、菜单、钩子)
├── EventListener.php         # 安装/卸载/升级生命周期
├── service/
│   ├── BaseService.php       # 基础工具AES加密、QR生成
│   └── TicketService.php     # 核心票务逻辑(发票、核销)
├── admin/
│   ├── controller/
│   │   ├── SeatTemplate.php   # 座位模板 CRUD
│   │   ├── Ticket.php         # 电子票管理
│   │   ├── Verifier.php       # 核销员管理
│   │   └── Verification.php   # 核销记录
│   └── view/                  # 后台视图模板
│       ├── seat_template/
│       ├── ticket/
│       ├── verifier/
│       └── verification/
└── view/
    └── goods/
        └── ticket_detail.html  # 前端票务详情页(独立模板)

关键钩子

钩子 作用
plugins_service_order_pay_success_handle_end 支付成功 → 自动发放 QR 电子票
plugins_service_order_delete_success 订单删除 → 清理票务数据

前端票务详情页

需要在 ShopXO 核心文件 app/index/controller/Goods.php 中加 1 行:

// 在 return MyView(); 之前(约第 440 行)
if (!empty($assign['goods']['item_type']) && $assign['goods']['item_type'] == 'ticket') {
    return MyView('/../../../plugins/vr_ticket/view/goods/ticket_detail');
}

详见 docs/GOODS_PHP_MODIFICATION.md

数据库表

表名 用途
vrt_vr_seat_templates 座位模板(绑定分类)
vrt_vr_tickets 电子票(含观演人)
vrt_vr_verifiers 核销员
vrt_vr_verifications 核销记录

API

URL 方法 作用
/plugins/vr_ticket/admin/seat_template/list GET 座位模板列表
/plugins/vr_ticket/admin/seat_template/save GET/POST 添加/编辑模板
/plugins/vr_ticket/admin/ticket/list GET 电子票列表
/plugins/vr_ticket/admin/verification/list GET 核销记录