6.2 KiB
6.2 KiB
积分充值系统 - 快速启动
🚀 5分钟快速上手
1️⃣ 执行数据库迁移
mysql -u root -p 1818ai < V6__add_points_recharge_system.sql
验证:
-- 检查套餐数据
SELECT name, points, bonus_points, total_points, price FROM points_package;
-- 应该看到6个套餐
-- 检查order表新字段
DESC `order`;
-- 应该包含 order_type, points_package_id, points_amount
2️⃣ 启动应用
mvn spring-boot:run
或者
mvn clean package
java -jar target/1818_user_server-0.0.1-SNAPSHOT.jar
3️⃣ 测试接口
步骤1:获取套餐列表(无需登录)
curl -X GET "http://localhost:8080/user/points/packages"
预期响应:
{
"code": 200,
"data": [
{
"id": 1,
"name": "体验包",
"points": 100,
"price": 10.00,
...
}
]
}
步骤2:用户登录获取Token
curl -X POST "http://localhost:8080/user/auth/login" \
-H "Content-Type: application/json" \
-d '{"phone":"13800138000","password":"123456"}'
获取token:
{
"code": 200,
"data": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
}
步骤3:创建充值订单(需要登录)
curl -X POST "http://localhost:8080/user/points/recharge" \
-H "Authorization: Bearer YOUR_TOKEN_HERE" \
-H "Content-Type: application/json" \
-d '{"packageId":2,"paymentMethod":2}'
预期响应:
{
"code": 200,
"data": {
"orderNo": "ORD20251021123456",
"amount": 48.00,
"pointsAmount": 605,
"paymentMethod": 2
}
}
注意:
pointsAmount可能是 605(500基础+50赠送+55首充奖励)- 如果是首次充值,会有10%的额外奖励
步骤4:模拟支付成功(测试用)
curl -X POST "http://localhost:8080/payment/callback/test?orderNo=ORD20251021123456"
预期响应:success
步骤5:查看用户积分
curl -X GET "http://localhost:8080/user/info" \
-H "Authorization: Bearer YOUR_TOKEN_HERE"
验证积分是否到账:
{
"code": 200,
"data": {
"points": 605,
"pointsExpiresAt": "2026-10-21T12:35:10"
}
}
步骤6:查看充值记录
curl -X GET "http://localhost:8080/user/points/recharge/records?page=1&size=10" \
-H "Authorization: Bearer YOUR_TOKEN_HERE"
📝 前端快速集成
HTML示例
<!DOCTYPE html>
<html>
<head>
<title>积分充值</title>
</head>
<body>
<h1>积分充值</h1>
<!-- 套餐列表 -->
<div id="packages"></div>
<script>
const API_BASE = 'http://localhost:8080';
const token = localStorage.getItem('token'); // 从登录获取
// 1. 加载套餐列表
async function loadPackages() {
const res = await fetch(`${API_BASE}/user/points/packages`);
const result = await res.json();
if (result.code === 200) {
const html = result.data.map(pkg => `
<div class="package">
<h3>${pkg.name}</h3>
<p>${pkg.description}</p>
<p>基础积分:${pkg.points}</p>
<p>赠送积分:${pkg.bonusPoints}</p>
<p>总计:${pkg.totalPoints}积分</p>
<p class="price">¥${pkg.price}</p>
<button onclick="recharge(${pkg.id}, 2)">
微信支付
</button>
</div>
`).join('');
document.getElementById('packages').innerHTML = html;
}
}
// 2. 创建充值订单
async function recharge(packageId, paymentMethod) {
const res = await fetch(`${API_BASE}/user/points/recharge`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`
},
body: JSON.stringify({
packageId: packageId,
paymentMethod: paymentMethod
})
});
const result = await res.json();
if (result.code === 200) {
const { orderNo, paymentParams } = result.data;
console.log('订单创建成功:', orderNo);
// TODO: 调起真实支付
// 这里暂时调用测试回调
testPay(orderNo);
} else {
alert(result.message);
}
}
// 3. 测试支付(仅开发环境)
async function testPay(orderNo) {
const res = await fetch(
`${API_BASE}/payment/callback/test?orderNo=${orderNo}`,
{ method: 'POST' }
);
if (await res.text() === 'success') {
alert('充值成功!');
location.reload();
}
}
// 页面加载时获取套餐
loadPackages();
</script>
</body>
</html>
🔐 Swagger测试
访问:http://localhost:8080/doc.html
测试步骤:
- 获取套餐 →
GET /user/points/packages - 用户登录 →
POST /user/auth/login→ 获取token - 点击右上角🔑图标 → 输入
Bearer YOUR_TOKEN - 创建充值订单 →
POST /user/points/recharge - 测试支付回调 →
POST /payment/callback/test - 查看充值记录 →
GET /user/points/recharge/records
✅ 完成检查清单
- 数据库迁移成功(6个套餐)
- 能够获取套餐列表
- 能够创建充值订单
- 测试支付回调成功
- 用户积分正确到账
- 充值记录正常显示
- 首充奖励正确计算
🎉 成功!
现在用户可以:
- ✅ 浏览积分套餐
- ✅ 选择支付方式充值
- ✅ 查看充值历史
- ✅ 享受首充奖励
下一步:对接真实的支付宝/微信支付接口
详细文档请查看:POINTS_RECHARGE_GUIDE.md