295 lines
7.9 KiB
Markdown
295 lines
7.9 KiB
Markdown
# 支付宝充值功能说明
|
||
|
||
## 功能概述
|
||
|
||
本功能实现了完整的支付宝充值流程,从前端用户操作到后端支付处理,再到支付回调确认,形成了完整的闭环。
|
||
|
||
## 功能特性
|
||
|
||
### 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. 性能优化
|
||
- 支付订单缓存
|
||
- 异步处理优化
|
||
- 数据库查询优化
|
||
- 前端体验优化 |