Files
tyapi-frontend/docs/支付宝充值功能说明.md

295 lines
7.9 KiB
Markdown
Raw Normal View History

2025-11-24 16:06:44 +08:00
# 支付宝充值功能说明
## 功能概述
本功能实现了完整的支付宝充值流程,从前端用户操作到后端支付处理,再到支付回调确认,形成了完整的闭环。
## 功能特性
### 1. 前端功能
- **钱包余额显示**:实时显示用户当前钱包余额和状态
- **充值方式选择**:支持支付宝充值和对公转账两种方式
- **支付宝充值表单**:用户输入充值金额,系统创建支付订单
- **支付跳转**:自动跳转到支付宝支付页面
- **支付结果页面**
- 支付成功页面:显示充值详情和操作按钮
- 支付失败页面:显示失败原因和重试选项
### 2. 后端功能
- **支付宝订单创建**:生成唯一订单号,创建支付宝支付订单
- **异步回调处理**:处理支付宝支付成功通知,更新钱包余额
- **同步回调处理**:处理用户支付完成后的页面跳转
- **充值记录管理**:完整的充值记录创建、查询和管理
- **事务保护**:确保充值过程的原子性和数据一致性
## 技术架构
### 前端架构
```
Wallet.vue (钱包页面)
├── 余额显示
├── 充值方式选择
├── 支付宝充值表单
└── 支付跳转逻辑
WalletSuccess.vue (支付成功页面)
├── 成功状态显示
├── 充值详情展示
└── 操作按钮
WalletFail.vue (支付失败页面)
├── 失败状态显示
├── 失败原因说明
└── 重试和客服选项
```
### 后端架构
```
FinanceHandler (HTTP处理器)
├── CreateAlipayRecharge (创建充值订单)
├── HandleAlipayCallback (异步回调处理)
└── HandleAlipayReturn (同步回调处理)
FinanceApplicationService (应用服务)
├── CreateAlipayRechargeOrder (业务流程编排)
├── HandleAlipayCallback (回调处理)
└── GetUserRechargeRecords (充值记录查询)
RechargeRecordService (充值记录服务)
├── CreateAlipayRecharge (创建充值记录)
├── CreateAlipayOrder (创建支付宝订单)
└── HandleAlipayPaymentSuccess (支付成功处理)
AliPayService (支付宝服务)
├── CreateAlipayOrder (创建支付订单)
├── HandleAliPaymentNotification (回调验证)
└── GenerateOutTradeNo (生成订单号)
```
## API接口
### 1. 创建支付宝充值订单
```
POST /api/v1/finance/wallet/alipay-recharge
Content-Type: application/json
Authorization: Bearer <token>
{
"amount": 100.00,
"subject": "钱包充值 ¥100.00",
"platform": "pc"
}
Response:
{
"code": 200,
"message": "支付宝充值订单创建成功",
"data": {
"pay_url": "https://openapi.alipay.com/...",
"out_trade_no": "202412011234567890",
"amount": 100.00,
"platform": "pc",
"subject": "钱包充值 ¥100.00"
}
}
```
### 2. 支付宝异步回调
```
POST /api/v1/finance/alipay/callback
Content-Type: application/x-www-form-urlencoded
支付宝回调参数...
Response: "success"
```
### 3. 支付宝同步回调
```
GET /api/v1/finance/alipay/return?out_trade_no=xxx&trade_no=xxx&trade_status=TRADE_SUCCESS&total_amount=100.00
Response: 302 Redirect to frontend success/fail page
```
### 4. 获取用户充值记录
```
GET /api/v1/finance/wallet/recharge-records?page=1&page_size=10&recharge_type=alipay&status=success
Authorization: Bearer <token>
Response:
{
"code": 200,
"message": "获取充值记录成功",
"data": {
"items": [...],
"total": 50,
"page": 1,
"size": 10
}
}
```
## 支付流程
### 1. 用户充值流程
1. 用户进入钱包页面,查看当前余额
2. 选择"支付宝充值"方式
3. 输入充值金额最低1元
4. 点击"立即充值"按钮
5. 前端调用后端创建充值订单接口
6. 后端生成订单号,创建支付宝支付订单
7. 返回支付链接给前端
8. 前端自动跳转到支付宝支付页面
9. 用户在支付宝完成支付
10. 支付宝跳转回系统同步回调地址
11. 后端处理同步回调,跳转到前端成功/失败页面
12. 支付宝异步通知后端支付结果
13. 后端处理异步回调,更新钱包余额和充值记录状态
### 2. 支付回调处理
- **异步回调**:支付宝主动通知支付结果,用于更新订单状态和钱包余额
- **同步回调**:用户支付完成后页面跳转,用于用户体验优化
## 数据库设计
### 1. 充值记录表 (recharge_records)
```sql
CREATE TABLE recharge_records (
id VARCHAR(36) PRIMARY KEY,
user_id VARCHAR(36) NOT NULL,
amount DECIMAL(20,8) NOT NULL,
recharge_type VARCHAR(20) NOT NULL,
status VARCHAR(20) NOT NULL DEFAULT 'pending',
alipay_order_id VARCHAR(64) UNIQUE,
transfer_order_id VARCHAR(64) UNIQUE,
notes VARCHAR(500),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at TIMESTAMP NULL
);
```
### 2. 支付宝订单表 (alipay_orders)
```sql
CREATE TABLE alipay_orders (
id VARCHAR(36) PRIMARY KEY,
recharge_id VARCHAR(36) NOT NULL UNIQUE,
out_trade_no VARCHAR(64) NOT NULL UNIQUE,
trade_no VARCHAR(64) UNIQUE,
subject VARCHAR(200) NOT NULL,
amount DECIMAL(20,8) NOT NULL,
platform VARCHAR(20) NOT NULL,
status VARCHAR(20) NOT NULL DEFAULT 'pending',
buyer_id VARCHAR(64),
seller_id VARCHAR(64),
pay_amount DECIMAL(20,8),
receipt_amount DECIMAL(20,8),
notify_time TIMESTAMP NULL,
return_time TIMESTAMP NULL,
error_code VARCHAR(64),
error_message TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
```
## 配置说明
### 1. 支付宝配置
```yaml
alipay:
app_id: "2021004181633376"
private_key: "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSj..."
alipay_public_key: "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..."
is_production: true
notify_url: "https://console.tianyuanapi.com/api/v1/finance/alipay/callback"
return_url: "https://console.tianyuanapi.com/api/v1/finance/alipay/return"
```
### 2. 环境配置
- **开发环境**:使用沙箱环境,回调地址指向开发服务器
- **生产环境**:使用正式环境,回调地址指向生产服务器
## 安全考虑
### 1. 支付安全
- 使用支付宝官方SDK进行签名验证
- 异步回调验证签名确保数据真实性
- 订单号唯一性检查防止重复处理
- 金额验证确保支付金额正确
### 2. 数据安全
- 所有敏感操作使用事务保护
- 充值记录状态变更的原子性
- 钱包余额更新的并发控制
- 完整的操作日志记录
## 错误处理
### 1. 支付失败处理
- 网络异常:提示用户重试
- 余额不足:提示用户检查支付账户
- 订单超时:自动取消订单,允许重新创建
- 系统异常:记录错误日志,提供客服支持
### 2. 回调异常处理
- 签名验证失败:记录异常,不处理回调
- 重复回调:幂等性处理,避免重复更新
- 数据不一致:记录异常,人工介入处理
## 监控和日志
### 1. 关键日志点
- 充值订单创建
- 支付宝回调接收
- 支付成功处理
- 钱包余额更新
- 异常错误记录
### 2. 监控指标
- 充值成功率
- 支付响应时间
- 回调处理延迟
- 异常错误率
## 测试建议
### 1. 功能测试
- 正常充值流程测试
- 支付失败场景测试
- 网络异常处理测试
- 并发充值测试
### 2. 安全测试
- 回调签名验证测试
- 重复订单处理测试
- 金额篡改防护测试
- 并发安全测试
## 部署注意事项
### 1. 环境配置
- 确保支付宝配置正确
- 回调地址可访问性
- 数据库连接稳定性
- 日志存储空间充足
### 2. 监控告警
- 支付成功率监控
- 系统异常告警
- 数据库性能监控
- 网络连接监控
## 后续优化
### 1. 功能增强
- 支持更多支付方式(微信支付、银行卡等)
- 充值优惠活动
- 自动充值功能
- 充值提醒功能
### 2. 性能优化
- 支付订单缓存
- 异步处理优化
- 数据库查询优化
- 前端体验优化