bindbox-game/.trae/documents/支付体系一致性整改计划.md
邹方成 6ee627139c
Some checks failed
Build docker and publish / linux (1.24.5) (push) Failing after 40s
feat: 新增支付测试小程序与微信支付集成
feat(pay): 添加支付API基础结构
feat(miniapp): 创建支付测试小程序页面与配置
feat(wechatpay): 配置微信支付参数与证书
fix(guild): 修复成员列表查询条件
docs: 更新代码规范文档与需求文档
style: 统一前后端枚举显示与注释格式
refactor(admin): 重构用户奖励发放接口参数处理
test(title): 添加称号效果参数验证测试
2025-11-17 00:42:08 +08:00

44 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 审计结论摘要
- 金额统一“分”,积分统一“元等值整数(1元=1积分)”;现有退款登记复用积分流水记录“金额/100”语义混用。
- 退款恢复积分在多次部分退款时可能重复恢复导致超恢复;预下单未持久化;前端金额展示直用“分”,体验不佳;订单积分抵扣落账缺失。
## 整改目标
- 明确并统一金额/积分口径:分↔积分换算唯一、无混用。
- 完善退款与积分恢复逻辑:部分退款按比例恢复、全额退款一次性恢复;幂等保护。
- 持久化支付域关键数据:预下单/交易/退款/通知;订单详情展示真实字段。
- 前端金额展示统一为“元”且格式化,枚举与文案一致。
## 具体改造项
1) 数据结构与落账
- 新增“货币退款流水”独立记录(或新增表`payment_refunds`并在订单详情聚合展示),将每笔退款金额以“分”记录;保留`user_points_ledger`仅记录“积分”类动作(如`refund_restore`)。
- 在支付阶段补充“订单积分扣减流水”(action=`order_deduct`),并回填`orders.points_ledger_id`,与实际抵扣金额对应(分→积分换算)。
2) 退款恢复与幂等
- 部分退款按比例恢复积分:`恢复积分 = 订单积分抵扣(分) × 本次退款金额(分) / 实付金额(分) ÷ 100`(四舍五入),累计不超过订单抵扣积分总额。
- 全额退款一次性恢复剩余积分;为`refund_restore`增加去重幂等:唯一键`(order_no, action='refund_restore')`或累计校验。
- 订单置“已退款”的条件与部分退款展示:保持`2已支付`,在详情中清晰展示“累计已退款金额(分)”和每笔明细。
3) 预下单与交易持久化
- 引入并使用`payment_preorders/payment_transactions/payment_refunds/payment_notify_events`表:
- 预下单:落库`out_trade_no=order_no``prepay_id`,回填`orders.pay_preorder_id`
- 交易:回调落库`transaction_id/amount/success_time/raw`,订单推进。
- 退款:真实调用后落库`refund_no/amount/status/success_time/raw`,并通过回调/查询推进状态。
- 通知事件:记录`notify_id/event_type/raw/processed`作审计与去重。
4) 前端展示统一
- 列表与详情金额展示统一格式化为“元”(保留两位小数),并保留原始分用于导出或接口。
- 详情页展示:交易号`transaction_id`、退款号`refund_no`、渠道/支付方式;“可退余额(分/元)”与“累计已退款(分/元)”。
5) 安全与幂等
- 业务幂等键:`order_no`(预下单/订单推进)、`notify_id`(回调)、`refund_no`(退款)。
- 数据库唯一索引:`orders.order_no``payment_preorders.out_trade_no``payment_transactions.transaction_id``payment_refunds.refund_no``payment_notify_events.notify_id`
## 验收与测试
- 单元:分↔积分换算正确;部分/全额退款恢复积分计算;幂等重复请求不重复落账。
- 集成:真实预下单→回调验证→管理端主动退款→退款落库与恢复积分→订单详情展示一致;账单对账拉取与差异比对基础验证。
## 执行顺序
1. 数据表与DAO新增支付域表与唯一索引迁移脚本。
2. 业务与服务:预下单持久化、回调入库、退款入库与恢复积分比例算法、幂等保护。
3. 前端统一金额展示与详情字段扩展;导出口径对齐。
4. 测试与联调:场景覆盖与灰度验证,文案与枚举一致。