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

## 后端服务对接
- 预下单（JSAPI）
  - 写入 `payment_preorders`：`order_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_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`
- 后台主动退款（全额/部分）
  - 生成 `refund_no` 并调用微信退款 API，入库 `payment_refunds`：`order_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/refunds`、`GET /api/admin/pay/refunds/:refund_no`
- 对账入口：`POST /api/admin/pay/bills/import`、`GET /api/admin/pay/bills/diffs`

## 前端展示改造
- 金额统一元格式化显示（两位小数），接口仍用分；
- 详情页增加展示 `transaction_id/refund_no/channel/支付方式`、累计已退与可退余额（元）；退款记录按元显示

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

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