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

31 lines
2.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.

## 目标
- 连接已生成的 payment_* 表与 Model/DAO完成真实微信支付体系预下单→通知→退款→对账统一金额/积分;管理端与前端展示一致。
## 后端改造
- 预下单JSAPI
-`internal/api/user/pay_wechat_app.go` 调用 jsapi 预下单成功后,写入 `payment_preorders(order_id, order_no, out_trade_no=order_no, prepay_id, amount_total, payer_openid, notify_url, status, expired_at)` 并回填 `orders.pay_preorder_id`
- 通知验签与解密:
-`internal/api/pay/wechat_notify.go` 验签解密后,写 `payment_notify_events(notify_id, event_type, raw, processed=false)` 并去重;写 `payment_transactions(order_id, order_no, transaction_id, amount_total, success_time, raw)`;条件更新 `orders.status:1→2`,写 `paid_at`
- 后台主动退款:
-`internal/api/admin/pay_refund_admin.go` 调用微信退款后,写入 `payment_refunds(order_id, order_no, refund_no, amount_refund, status, success_time, raw, reason)`
- 按比例恢复积分:`恢复积分 = (订单积分抵扣分 × 退款分 ÷ 实付分) ÷ 100`,累计不超过订单抵扣积分;全额退款一次性恢复剩余;全额时置 `orders.status=4`;部分退款保留 `2已支付`
- 对账:
- 新增服务在每日任务中拉取 `tradebill/refundbill` 入库 `payment_bills`;对比 `payment_transactions/payment_refunds` 生成 `payment_bill_diff`;导出差异。
## 管理端接口
- 订单详情聚合:从 `payment_transactions/payment_refunds` 汇总展示 `transaction_id/success_time/amount_total``refund_no/amount_refund/status/success_time/reason`;计算可退余额 `actual_amount - 累计退款`
- 退款列表/详情:`GET /api/admin/pay/refunds``GET /api/admin/pay/refunds/:refund_no`
- 对账入口:`POST /api/admin/pay/bills/import``GET /api/admin/pay/bills/diffs`
## 前端改造
- 金额统一以“元”格式化展示(两位小数),接口仍用“分”;
- 订单详情增加真实字段(交易号、退款号、渠道/支付方式),展示累计已退与可退余额(元);退款记录按元显示。
## 幂等与安全
- 使用唯一索引与幂等键:`order_no/notify_id/refund_no/transaction_id/out_trade_no`
- 条件更新控制并发;异常与差异告警。
## 验收与测试
- 单元:分↔积分换算、比例恢复、幂等重复;
- 集成:预下单→通知→主动退款→详情一致;
- 对账:拉取账单并生成差异;前后端构建与联调通过。