docs: 添加充值功能修复指南
This commit is contained in:
227
DEPOSIT_FIX_GUIDE.md
Normal file
227
DEPOSIT_FIX_GUIDE.md
Normal file
@@ -0,0 +1,227 @@
|
||||
# 充值功能修复方案
|
||||
|
||||
## 📋 问题分析
|
||||
|
||||
**现象**: 充值功能点击"下一步"报错
|
||||
|
||||
**可能原因**:
|
||||
1. ✅ StackOverflowError(已修复)
|
||||
2. ⚠️ 前端解析响应错误
|
||||
3. ⚠️ 后端异常处理不当
|
||||
|
||||
## 🔍 诊断步骤
|
||||
|
||||
### 1. 检查后端日志
|
||||
|
||||
```bash
|
||||
# SSH 登录服务器
|
||||
ssh root@8.155.172.147
|
||||
|
||||
# 查看最新错误日志
|
||||
tail -f /var/log/monisuo/app.log | grep -A 50 ERROR
|
||||
|
||||
# 查看最近 100 行日志
|
||||
tail -100 /var/log/monisuo/app.log
|
||||
```
|
||||
|
||||
### 2. 测试后端接口
|
||||
|
||||
```bash
|
||||
# 获取 Token(先登录)
|
||||
curl -X POST http://localhost:5010/api/user/login \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"username":"testuser","password":"test123456"}'
|
||||
|
||||
# 测试充值接口(替换 YOUR_TOKEN)
|
||||
curl -X POST http://localhost:5010/api/fund/deposit \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "Authorization: Bearer YOUR_TOKEN" \
|
||||
-d '{"amount":"100","remark":"测试充值"}'
|
||||
```
|
||||
|
||||
### 3. 检查前端日志
|
||||
|
||||
在浏览器开发者工具中:
|
||||
1. 打开 Console 选项卡
|
||||
2. 查看 Network 选项卡
|
||||
3. 点击"充值"按钮
|
||||
4. 查看请求和响应
|
||||
|
||||
## 🛠️ 修复方案
|
||||
|
||||
### 方案 1: 重启后端服务(推荐)
|
||||
|
||||
```bash
|
||||
# SSH 登录服务器
|
||||
ssh root@8.155.172.147
|
||||
|
||||
# 拉取最新代码
|
||||
cd /path/to/monisuo
|
||||
git pull origin main
|
||||
|
||||
# 重启服务
|
||||
systemctl restart monisuo
|
||||
|
||||
# 查看日志
|
||||
tail -f /var/log/monisuo/app.log
|
||||
```
|
||||
|
||||
### 方案 2: 增强错误处理
|
||||
|
||||
如果重启后问题仍然存在,需要增强错误处理。
|
||||
|
||||
#### 后端改进
|
||||
|
||||
在 `FundController.java` 中添加更详细的错误信息:
|
||||
|
||||
```java
|
||||
@PostMapping("/deposit")
|
||||
public Result<Map<String, Object>> deposit(@RequestBody Map<String, Object> params) {
|
||||
try {
|
||||
Long userId = UserContext.getUserId();
|
||||
if (userId == null) {
|
||||
return Result.unauthorized("请先登录");
|
||||
}
|
||||
|
||||
Object amountObj = params.get("amount");
|
||||
if (amountObj == null) {
|
||||
return Result.fail("充值金额不能为空");
|
||||
}
|
||||
|
||||
BigDecimal amount;
|
||||
try {
|
||||
amount = new BigDecimal(amountObj.toString());
|
||||
} catch (NumberFormatException e) {
|
||||
return Result.fail("充值金额格式错误");
|
||||
}
|
||||
|
||||
if (amount.compareTo(BigDecimal.ZERO) <= 0) {
|
||||
return Result.fail("充值金额必须大于0");
|
||||
}
|
||||
|
||||
String remark = (String) params.get("remark");
|
||||
|
||||
Map<String, Object> result = fundService.deposit(userId, amount, remark);
|
||||
return Result.success("申请成功,请完成打款", result);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace(); // 打印完整堆栈
|
||||
return Result.fail("充值申请失败: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 前端改进
|
||||
|
||||
在 `asset_page.dart` 中改进错误处理:
|
||||
|
||||
```dart
|
||||
onPressed: () async {
|
||||
if (formKey.currentState!.saveAndValidate()) {
|
||||
Navigator.of(ctx).pop();
|
||||
try {
|
||||
final response = await context.read<AssetProvider>().deposit(
|
||||
amount: amountController.text,
|
||||
);
|
||||
if (context.mounted) {
|
||||
if (response.success && response.data != null) {
|
||||
_showDepositResultDialog(context, response.data!);
|
||||
} else {
|
||||
_showResultDialog(
|
||||
context,
|
||||
'申请失败',
|
||||
response.message ?? '未知错误,请稍后重试',
|
||||
);
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
if (context.mounted) {
|
||||
_showResultDialog(
|
||||
context,
|
||||
'申请失败',
|
||||
'充值申请异常: $e',
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
```
|
||||
|
||||
### 方案 3: 数据库检查
|
||||
|
||||
```bash
|
||||
# 检查冷钱包数据
|
||||
mysql -h 8.155.172.147 -P 3306 -u monisuo -pJPJ8wYicSGC8aRnk monisuo \
|
||||
-e "SELECT * FROM cold_wallet WHERE is_default=1 AND status=1;"
|
||||
|
||||
# 检查用户资金账户
|
||||
mysql -h 8.155.172.147 -P 3306 -u monisuo -pJPJ8wYicSGC8aRnk monisuo \
|
||||
-e "SELECT * FROM account_fund WHERE user_id=YOUR_USER_ID;"
|
||||
```
|
||||
|
||||
## 📊 测试验证
|
||||
|
||||
### 1. 后端测试
|
||||
|
||||
```bash
|
||||
# 运行测试脚本
|
||||
cd /path/to/monisuo
|
||||
./test_fund_flow.sh
|
||||
```
|
||||
|
||||
### 2. 前端测试
|
||||
|
||||
1. 打开用户端应用
|
||||
2. 登录账户
|
||||
3. 进入资产页面
|
||||
4. 点击充值按钮
|
||||
5. 输入金额(如 100)
|
||||
6. 点击"下一步"
|
||||
7. **预期结果**: 显示钱包地址对话框
|
||||
|
||||
### 3. 验证清单
|
||||
|
||||
- [ ] 后端服务运行正常
|
||||
- [ ] 充值接口返回正确
|
||||
- [ ] 前端显示钱包地址
|
||||
- [ ] 无错误提示
|
||||
|
||||
## 🚀 快速修复
|
||||
|
||||
如果问题紧急,可以直接执行:
|
||||
|
||||
```bash
|
||||
# 一键修复脚本
|
||||
ssh root@8.155.172.147 << 'EOF'
|
||||
cd /path/to/monisuo
|
||||
git pull origin main
|
||||
systemctl restart monisuo
|
||||
sleep 5
|
||||
systemctl status monisuo
|
||||
tail -50 /var/log/monisuo/app.log
|
||||
EOF
|
||||
```
|
||||
|
||||
## 📞 技术支持
|
||||
|
||||
如果以上方案都无法解决,请提供:
|
||||
|
||||
1. **后端日志**:
|
||||
```bash
|
||||
tail -100 /var/log/monisuo/app.log
|
||||
```
|
||||
|
||||
2. **浏览器控制台错误**:
|
||||
- F12 打开开发者工具
|
||||
- Console 选项卡的错误信息
|
||||
- Network 选项卡的请求/响应
|
||||
|
||||
3. **复现步骤**:
|
||||
- 详细描述操作步骤
|
||||
- 输入的金额
|
||||
- 期望结果 vs 实际结果
|
||||
|
||||
---
|
||||
|
||||
**修复优先级**: 🔴 高
|
||||
**预计修复时间**: 5-10 分钟
|
||||
**状态**: ⏳ 等待服务器重启
|
||||
Reference in New Issue
Block a user