## MODIFIED Requirements

### Requirement: 钱包支付
钱包支付 SHALL 在扣款成功的同一事务中创建 `tb_payment` 记录（payment_method=wallet，status=2，paid_at=当前时间），关联到 `tb_order`（order_type=package_order）。不再仅通过 `tb_order.payment_method` 隐式记录支付信息。

#### Scenario: 钱包支付同步创建支付记录
- **WHEN** 用户通过钱包支付套餐订单，扣款成功
- **THEN** 在同一事务中：创建 `tb_payment`（method=wallet，status=2）、更新 `tb_order.payment_status=2`、扣减钱包余额、创建钱包流水

#### Scenario: 钱包余额不足时不创建支付记录
- **WHEN** 用户发起钱包支付但余额不足
- **THEN** 事务回滚，不创建 `tb_payment` 记录，返回余额不足错误

### Requirement: 第三方支付回调
第三方支付回调处理 SHALL 从 `tb_payment` 查找 payment_no；找到后更新 `tb_payment.status=2` 并更新关联的 `tb_order` 或 `tb_recharge_order`。

#### Scenario: 新单号回调走新路由
- **WHEN** 第三方支付回调，payment_no 在 `tb_payment` 中存在
- **THEN** 更新 `tb_payment`（status=2，third_party_trade_no，paid_at）
- **THEN** 根据 `tb_payment.order_type` 更新关联业务订单（`tb_order` 或 `tb_recharge_order`）

## ADDED Requirements

### Requirement: 支付记录幂等保障
系统 SHALL 通过 `tb_payment` 的 `payment_no` 唯一约束 + 状态检查确保 PayOrder 接口的幂等性：同一 order_id 在 `tb_payment` 中已有 status=2 的记录时，直接返回成功，不重复扣款。

#### Scenario: 重复调用 PayOrder 幂等返回
- **WHEN** 相同 order_id 的 PayOrder 请求重复到达，`tb_payment` 中已存在 status=2 记录
- **THEN** 直接返回支付成功，不重复扣减钱包余额
