From dea2ee5ee1154f869fcf8e3d1e48af1c9fadcc8e Mon Sep 17 00:00:00 2001 From: Codex Date: Sat, 20 Jun 2026 14:31:39 +0800 Subject: [PATCH] =?UTF-8?q?docs(M05-A):=20=E8=AE=B0=E5=BD=95=E7=BB=9F?= =?UTF-8?q?=E4=B8=80=E6=94=AF=E4=BB=98=E9=AA=8C=E6=94=B6=E5=B9=B6=E6=8E=A8?= =?UTF-8?q?=E8=BF=9B=E5=BE=AE=E4=BF=A1=E6=94=AF=E4=BB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 ++-- docs/current-baseline.md | 4 +-- docs/devlogs/2026-06-20-M05-A-统一支付领域.md | 28 +++++++++++++++++++ docs/feature-status.md | 2 +- docs/module-status.md | 12 ++++---- 5 files changed, 40 insertions(+), 12 deletions(-) create mode 100644 docs/devlogs/2026-06-20-M05-A-统一支付领域.md diff --git a/README.md b/README.md index e4f5489..ceb2f31 100644 --- a/README.md +++ b/README.md @@ -120,9 +120,9 @@ WSL 已验证:EMQX `5.8.9`、MQTTX CLI `1.13.0`、EMQX 服务 `active (running 项目已开发部分模块。具体完成度不得从 README 猜测,必须以现有代码、测试、数据库迁移、Git 历史以及 `docs/current-baseline.md`、`docs/module-status.md`、`docs/feature-status.md` 为准。 -- 当前执行游标:`M05-A` -- 最近工程提交:`91801fe`,完成 M04-D 最小权限订单分享并通过 M04 模块回归。 -- 下一工程目标:M05-A 统一支付领域和可信支付单。 +- 当前执行游标:`M05-B` +- 最近工程提交:`6c506ff`,完成 M05-A 统一支付领域、服务端金额和幂等回调。 +- 下一工程目标:M05-B 微信支付、退款和对账。 ## 版本递进 diff --git a/docs/current-baseline.md b/docs/current-baseline.md index fe6c718..a58d0d2 100644 --- a/docs/current-baseline.md +++ b/docs/current-baseline.md @@ -1,8 +1,8 @@ # 当前开发成果基线 > V5.0 首次核验日期:2026-06-16 -> audited_commit: `91801fe` -> next_engineering_target: M05-A 建立统一支付领域和可信支付单 +> audited_commit: `6c506ff` +> next_engineering_target: M05-B 接入微信支付、退款和对账 > 事实源:当前工作区、Git 历史、状态文档、Windows/WSL 检查脚本。 ## 总体结论 diff --git a/docs/devlogs/2026-06-20-M05-A-统一支付领域.md b/docs/devlogs/2026-06-20-M05-A-统一支付领域.md new file mode 100644 index 0000000..9a0e893 --- /dev/null +++ b/docs/devlogs/2026-06-20-M05-A-统一支付领域.md @@ -0,0 +1,28 @@ +# M05-A 统一支付领域 + +- 日期:2026-06-20 +- 起始 commit:`f9ec0af` +- 工程 commit:`6c506ff` +- ENGINEERING_DELTA=YES +- 子阶段状态:DONE,已 push 且 `HEAD == origin/main` + +## 工程增量 + +- 建立支付单、支付尝试、回调、退款单、分账单和分层支付配置模型。 +- 支付金额只取订单服务端未付金额,客户端金额字段被严格拒绝。 +- 支付创建使用 clientRequestId 幂等,回调使用 provider + callbackId 唯一约束。 +- 错误金额回调保存为 REJECTED,不更新支付单、订单金额或状态。 +- 成功回调在单事务内更新支付、订单已付金额、PAID 历史和房间预占。 +- 支付配置按门店、租户、小程序层级解析,只保存环境变量等凭据引用。 +- 测试支付适配器默认关闭,仅非生产环境显式开启后可用。 + +## 验证 + +- Windows 后端全量测试和仓库门禁通过。 +- WSL MySQL 8.4.9 临时库执行 `up → verify → down → up → verify` 通过。 +- 迁移语句:up 75、verify 54、down 69。 +- 实测服务端金额、支付单幂等、错误金额回调留档、重复成功回调不重复记账、门店配置优先级和生产环境测试适配器强制关闭。 + +## 后续 + +M05-B 接入微信支付预支付、签名、回调验签、主动查单、退款、退款回调和对账。 diff --git a/docs/feature-status.md b/docs/feature-status.md index f1c3601..9c3392e 100644 --- a/docs/feature-status.md +++ b/docs/feature-status.md @@ -32,4 +32,4 @@ | MAP-001 | 地图选店和最近门店 | M03-C/M08 | PARTIAL | `df373fa` | 已实现 AppID/tenant 隔离门店发现、城市/营业筛选、按门店时区判断营业中、后端 Haversine 距离排序;小程序支持定位和手工城市降级。 | 地图 SDK 可视化和真机定位授权尚未验收。 | M08 接入地图界面并完成真机验证。 | | QR-001 | 门店/房间场景码与 NFC | M03-D/M08 | PARTIAL | `d563078` | 已实现场景码生成、重建失效、撤销、扫码统计和二维码/NFC 统一页面解析;返回权限固定为空,旧码失效已在 MySQL 8.4.9 实测。 | 真实微信小程序码图片生成依赖可用 AppSecret 与真机环境。 | M08 接入微信小程序码接口并完成真机扫描验收。 | | WIFI-001 | 受控 Wi-Fi 凭据 | M03-D/M04 | PARTIAL | `91801fe` | 正式订单与分享令牌均执行最小权限;分享开门权限独立于查看和续费,撤销、过期或订单终态即时失效;MySQL 8.4.9 实测通过。 | 真实开门与设备权限仍需 M06 厂商适配器和硬件联调。 | M06 接入真实设备权限。 | -| ORD-001 | 预约下单与多方式支付 | M04/M05 | PARTIAL | `91801fe` | M04 已完成可信定价、并发预占、完整状态机、续费取消换房、管理员调整、代下单和短期可撤销分享;冲突回滚、历史审计及分享失效均在 MySQL 8.4.9 实测。 | 多方式支付、优惠/套餐权益校验和真实支付回调属于 M05。 | M05-A 建立统一支付领域。 | +| ORD-001 | 预约下单与多方式支付 | M04/M05 | PARTIAL | `6c506ff` | 已完成订单全生命周期和统一支付基础:服务端应付金额、支付尝试、回调唯一键、错误金额拒绝、重复成功回调不重复记账、分层支付配置和安全测试适配器均在 MySQL 8.4.9 实测。 | 微信真实预支付/验签/退款、余额套餐权益和团购支付尚未完成。 | M05-B 接入微信支付与退款。 | diff --git a/docs/module-status.md b/docs/module-status.md index 578b41c..d2635c2 100644 --- a/docs/module-status.md +++ b/docs/module-status.md @@ -3,15 +3,15 @@ ```yaml execution_cursor: current_module: M05 - current_stage: M05-A + current_stage: M05-B stage_status: TODO - last_completed_stage: M04-D - next_stage: M05-A - last_engineering_commit: 91801fe + last_completed_stage: M05-A + next_stage: M05-B + last_engineering_commit: 6c506ff last_push_verified: true base_branch: main blocked_reason: "" - updated_at: 2026-06-20T14:20:46+08:00 + updated_at: 2026-06-20T14:30:45+08:00 ``` | 模块 | 状态 | 最近提交 | 最近开发日志 | 备注 | @@ -21,7 +21,7 @@ execution_cursor: | M02 登录、租户、权限 | DONE | `5a300a8` | docs/devlogs/2026-06-18-M02-D-用户与员工管理.md | M02-A/B/C/D 已完成租户、身份、可撤销会话、RBAC、门店数据范围、员工管理、禁用、会话重置和审计;Windows 全量测试与 WSL MySQL 8.4.9 往返迁移通过。 | | M03 门店、房间、价格、营业时间 | DONE | `d563078` | docs/devlogs/2026-06-18-M03-D-场景码NFC与WiFi.md | M03-A/B/C/D 已完成门店房间、装修广告、媒体、地图选店、场景码/NFC 页面导航和受控 Wi-Fi;真实微信小程序码图片生成留待 M08 真机联调。 | | M04 订单、时段锁定、支付闭环 | DONE | `91801fe` | docs/devlogs/2026-06-20-M04-D-订单分享.md | M04-A/B/C/D 已完成可信定价、并发预占、订单状态机、续费取消换房、管理员调整、代下单和最小权限分享;Windows 全量回归与 WSL MySQL 8.4.9 模块回归通过。 | -| M05 会员、余额、套餐、优惠券 | TODO | - | - | 下一阶段 M05-A 统一支付领域。 | +| M05 会员、余额、套餐、优惠券 | PARTIAL | `6c506ff` | docs/devlogs/2026-06-20-M05-A-统一支付领域.md | M05-A 已完成统一支付表、服务端金额、幂等支付单/回调、分层配置和安全测试适配器;下一阶段 M05-B 微信支付与退款。 | | M06 设备、MQTT 与真实硬件联动 | TODO | - | - | - | | M07 保洁、通知、任务和语音播报 | TODO | - | - | - | | M08 微信原生小程序完整业务 | TODO | - | - | - |