# Quickstart: 商家 ezPay 发票开通管理 **Phase**: Phase 1 — 跑通验证步骤 **Date**: 2026-06-15 ## 1. 准备数据(手动执行 SQL) 到数据库执行 `updatesql/sql.md` 中 2026-06-15 段落: - `ALTER TABLE pos_store ADD COLUMN invoice_exempt TINYINT(1) DEFAULT 0 ...` - `CREATE TABLE pos_store_ezpay (...)` - `sys_menu` 插入 `chanting:storeEzpay:*` 权限项 ## 2. 拿 ezPay 测试凭证 在 ezPay 测试环境 `https://cinv.ezpay.com.tw/` 申请一个测试商店,记录 `MerchantID`、`HashKey`(32 字节)、`HashIV`(16 字节)。(线下,人工) ## 3. 后端验证 1. 启动 `foodie_server`(`ruoyi-admin`)。 2. 平台后台登录,进入"ezPay 发票开通管理"。 3. 选一个测试门店(`pos_store` 里普通店铺或摊位): - 点"发起申请" → 状态变 `申请中`。 - 点"录入凭证"填入第 2 步的真凭证 → 点"验证并开通": - 凭证正确 → 状态变 `已开通`、启用,`approved_time` 写入。 - 故意填错 HashKey → 提示"ezPay 凭证无效",状态保持 `申请中`,`last_verify_result` 记 KEY1xxxx。 4. 点"停用"/"恢复" → 启用开关翻转,状态仍 `已开通`。 5. 点"标记免用发票" → 该门店从"还要去开通/还没开通"过滤消失。 ## 4. 商家端验证 1. 商家端登录,进门店设置,填"统一编号"保存。 2. 回平台后台该门店,确认 `ubn` 已显示。 ## 5. 单元测试 `PosStoreEzpayServiceImpl` 验证判读逻辑(mock `EzPay.doPost`): - 回应 `Status!=成功` 且含 `KEY1` → 返回"凭证无效",status 不变。 - 回应业务错误(发票不存在)或成功 → 通过,status=2。 ## 6. 验收对照 回到 spec.md 的 SC-001 ~ SC-006 与各 User Story 的 Acceptance Scenarios 逐条核对。