支付功能对齐网关文档 + 完善管理操作

- GatewayPayService: 新增 remark 字段(传uid/oid), 移除废弃 return_url, 新增 closeOrder/syncOrderStatus
- PaymentController: 新增 POST /payment/gateway/sync/:orderNo 和 /close/:id 端点
- Admin 订单页: 待支付订单增加「同步状态」按钮
- OrdersService: 下单时传入 remark 使 webhook 可匹配
- 清理 PaymentService 未使用依赖
- docs/progress.md 更新支付架构
This commit is contained in:
yuzhiran-dev
2026-06-05 13:19:44 +08:00
parent 538de50bb1
commit fb8152401b
5 changed files with 139 additions and 10 deletions
+36
View File
@@ -236,3 +236,39 @@ pm2 restart yuzhiran-api
- ✅ 前端 75 静态页面全部生成成功
- ✅ Nginx 配置语法验证通过
- ✅ 主站 + 镜像站均已部署
---
## 2026-06-01 Session — 支付功能对齐网关文档 + 完善管理操作
### Changes Made
- **GatewayPayService 对齐网关文档**:
- `createOrder()` 新增 `remark` 参数(传入 `{"uid":userId,"oid":orderId}`),移除废弃的 `return_url`
- 新增 `closeOrder(gatewayOrderId)` — 调用 `POST /v1/pay/orders/{id}/close`
- 新增 `syncOrderStatus(orderNo)` — 从网关查询订单状态,若 `paid` 则自动更新本地 + 激活订阅
- **OrdersService**: 下单时传入 `remark`(含 uid/oid),使 webhook 回调可正确匹配用户和订单
- **PaymentController**:
- 新增 `POST /payment/gateway/sync/:orderNo` — 手动同步单笔订单状态
- 新增 `POST /payment/gateway/close/:gatewayOrderId` — 关闭未支付订单
- 清理未使用的 `PaymentService` 依赖
- **管理后台订单页** (`admin/orders/page.tsx`):
- 待支付订单增加「同步状态」按钮 — 调用网关查询后更新
- **文档**: `docs/progress.md` 支付部署架构更新为统一网关模式
### Payment 架构现状
```
下单: 会员页 → POST /orders/create → OrdersService → GatewayPayService → yzrcloud.cn 网关
查询: POST /payment/gateway/sync/:orderNo → GatewayPayService.syncOrderStatus()
关闭: POST /payment/gateway/close/:id → GatewayPayService.closeOrder()
退款: POST /admin/orders/:orderNo/refund → GatewayPayService.refund()
回调: POST /payment/gateway/webhook → GatewayPayService.handleWebhook()
```
### Gaps Identified (远期)
- `payment.service.ts` (微信直连) 和 `alipay.service.ts` (支付宝直连) 为遗留代码,已被 GatewayPayService 全面替代,待确认无人依赖后可移除
- 课程购买页 (`courses/[id]/client.tsx`) 仍直接调用 `wxpay/unified-order` 绕过 OrdersService,未传入 `remark`
### Verification
- ✅ 后端 92 项测试全部通过
- ✅ 后端 TypeScript 编译无错误
- ✅ 前端 75 静态页面全部生成成功