Files
1818web-hoduan/QUICK_START_POINTS_RECHARGE.md
2025-11-14 17:41:15 +08:00

285 lines
6.2 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 积分充值系统 - 快速启动
## 🚀 5分钟快速上手
### 1⃣ 执行数据库迁移
```bash
mysql -u root -p 1818ai < V6__add_points_recharge_system.sql
```
**验证**
```sql
-- 检查套餐数据
SELECT name, points, bonus_points, total_points, price FROM points_package;
-- 应该看到6个套餐
-- 检查order表新字段
DESC `order`;
-- 应该包含 order_type, points_package_id, points_amount
```
---
### 2⃣ 启动应用
```bash
mvn spring-boot:run
```
或者
```bash
mvn clean package
java -jar target/1818_user_server-0.0.1-SNAPSHOT.jar
```
---
### 3⃣ 测试接口
#### 步骤1获取套餐列表无需登录
```bash
curl -X GET "http://localhost:8080/user/points/packages"
```
**预期响应**
```json
{
"code": 200,
"data": [
{
"id": 1,
"name": "体验包",
"points": 100,
"price": 10.00,
...
}
]
}
```
---
#### 步骤2用户登录获取Token
```bash
curl -X POST "http://localhost:8080/user/auth/login" \
-H "Content-Type: application/json" \
-d '{"phone":"13800138000","password":"123456"}'
```
**获取token**
```json
{
"code": 200,
"data": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
}
```
---
#### 步骤3创建充值订单需要登录
```bash
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}'
```
**预期响应**
```json
{
"code": 200,
"data": {
"orderNo": "ORD20251021123456",
"amount": 48.00,
"pointsAmount": 605,
"paymentMethod": 2
}
}
```
**注意**
- `pointsAmount` 可能是 605500基础+50赠送+55首充奖励
- 如果是首次充值会有10%的额外奖励
---
#### 步骤4模拟支付成功测试用
```bash
curl -X POST "http://localhost:8080/payment/callback/test?orderNo=ORD20251021123456"
```
**预期响应**`success`
---
#### 步骤5查看用户积分
```bash
curl -X GET "http://localhost:8080/user/info" \
-H "Authorization: Bearer YOUR_TOKEN_HERE"
```
**验证积分是否到账**
```json
{
"code": 200,
"data": {
"points": 605,
"pointsExpiresAt": "2026-10-21T12:35:10"
}
}
```
---
#### 步骤6查看充值记录
```bash
curl -X GET "http://localhost:8080/user/points/recharge/records?page=1&size=10" \
-H "Authorization: Bearer YOUR_TOKEN_HERE"
```
---
## 📝 前端快速集成
### HTML示例
```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`
### 测试步骤:
1. **获取套餐**`GET /user/points/packages`
2. **用户登录**`POST /user/auth/login` → 获取token
3. **点击右上角🔑图标** → 输入 `Bearer YOUR_TOKEN`
4. **创建充值订单**`POST /user/points/recharge`
5. **测试支付回调**`POST /payment/callback/test`
6. **查看充值记录**`GET /user/points/recharge/records`
---
## ✅ 完成检查清单
- [ ] 数据库迁移成功6个套餐
- [ ] 能够获取套餐列表
- [ ] 能够创建充值订单
- [ ] 测试支付回调成功
- [ ] 用户积分正确到账
- [ ] 充值记录正常显示
- [ ] 首充奖励正确计算
---
## 🎉 成功!
现在用户可以:
- ✅ 浏览积分套餐
- ✅ 选择支付方式充值
- ✅ 查看充值历史
- ✅ 享受首充奖励
**下一步**:对接真实的支付宝/微信支付接口
详细文档请查看:`POINTS_RECHARGE_GUIDE.md`