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

2.3 KiB
Raw Blame History

实施范围

  • 对接已生成的 payment_* 表与 Model/DAO落地真实支付服务逻辑与管理端展示

后端服务对接

  • 预下单JSAPI
    • 写入 payment_preordersorder_id/order_no/out_trade_no=order_no/prepay_id/amount_total/payer_openid/notify_url/status=created/expired_at
    • 回填 orders.pay_preorder_id;返回四行签名参数给小程序
  • 支付通知(验签与解密)
    • 入库 payment_notify_eventsnotify_id/event_type/raw/processed=false,幂等去重)
    • 入库 payment_transactionsorder_id/order_no/transaction_id/amount_total/success_time/raw
    • 条件更新 orders.status:1→2,写 paid_at
  • 后台主动退款(全额/部分)
    • 生成 refund_no 并调用微信退款 API入库 payment_refundsorder_id/order_no/refund_no/amount_refund/status/success_time/raw/reason
    • 积分恢复(统一换算与幂等):
      • 部分退款:恢复积分 = (订单积分抵扣分 × 退款分 ÷ 实付分) ÷ 100,累计不超过订单抵扣积分;幂等以“累计已恢复”校验
      • 全额退款:一次性恢复剩余积分,置 orders.status=4
  • 对账基础能力
    • 拉取交易/退款账单入库 payment_bills;比对生成 payment_bill_diff;导出差异

管理端接口

  • 订单详情聚合字段:
    • 交易:transaction_id/success_time/amount_total
    • 退款:累计已退与明细 refund_no/amount_refund/status/success_time/reason
    • 可退余额(分):actual_amount - 累计退款
  • 退款列表与详情:GET /api/admin/pay/refundsGET /api/admin/pay/refunds/:refund_no
  • 对账入口:POST /api/admin/pay/bills/importGET /api/admin/pay/bills/diffs

前端展示改造

  • 金额统一元格式化显示(两位小数),接口仍用分;
  • 详情页增加展示 transaction_id/refund_no/channel/支付方式、累计已退与可退余额(元);退款记录按元显示

幂等与安全

  • 幂等键:order_no/notify_id/refund_no;唯一索引已在表层
  • 条件更新控制并发;日志与告警覆盖验签失败、金额不一致、退款异常、对账差异

验收与测试

  • 单元:分↔积分换算、部分/全额退款恢复、幂等重复
  • 集成:真实预下单→通知→主动退款→详情对齐;对账拉取与差异
  • 构建与联调通过,数据持久化与展示一致