feat: 新增支付页面接口,为接入支付宝做准备

- GET /payment: 套餐选择页(无需认证,外部浏览器打开)
- GET /payment/page: 支付引导页(需 JWT,创建订单)
- GET /payment/pay: 支付宝电脑网站支付占位页(需 JWT)
- AppState 新增支付宝配置字段(可选)
- afterbody.js: PDF下载增加状态提示和重试按钮
This commit is contained in:
2026-04-23 10:48:31 +08:00
parent fe0e831210
commit 8c9552fbfc
7 changed files with 575 additions and 12 deletions

View File

@@ -275,6 +275,23 @@ created_at TIMESTAMPTZ创建时间
|------|------|
| `POST /api/payment/create-order` | 创建订单 |
| `POST /api/payment/mock-confirm` | 模拟支付确认(测试用) |
| `GET /payment/page` | 支付引导页面(生成订单并引导打开支付链接) |
| `GET /payment/pay` | 支付宝电脑网站支付页面(占位,接入支付宝后替换) |
### 支付宝配置(可选)
不配置则使用模拟支付;配置后启用真实支付宝支付:
```env
# .env 或 config/*.toml
ALIPAY_APP_ID=your_alipay_app_id
ALIPAY_PRIVATE_KEY=your_private_key_content
ALIPAY_ALIPAY_PUBLIC_KEY=alipay_public_key_content
ALIPAY_GATEWAY=https://openapi-sandbox.dl.alipaydev.com/gateway.do # 沙箱
ALIPAY_GATEWAY=https://openapi.alipay.com/gateway.do # 正式
```
> 正式环境必须使用 HTTPS服务已支持 TLS
---
@@ -401,6 +418,21 @@ ORDER BY "desc"
## 支付系统
### 支付流程
小程序内无法直接接入支付宝支付,采用以下方案:
```
小程序 → 后端 /payment/page → 重定向到 /payment/pay → 支付宝
```
1. 用户在小程序选择套餐 → 点击「立即开通」
2. 小程序调用 `POST /api/payment/create-order` 创建订单
3. 小程序跳转 `outter` 页面URL 指向 `/payment/page?package=xxx`
4. 后端验证 JWT创建订单返回自动跳转 HTML利用 outter 页面复制链接提示用户在浏览器打开)
5. 用户在浏览器打开 `/payment/pay?order_no=xxx&package_type=xxx`
6. 后端调用支付宝接口,返回支付表单或跳转链接
### 支付模式
| 模式 | 来源 | 处理方式 |