Files
soul-yongping/开发文档/8、部署/自动解绑API配置说明.md

281 lines
5.9 KiB
Markdown
Raw Normal View History

# 自动解绑API配置说明
## 📋 接口信息
### API 地址
```
GET https://soul.quwanzhi.com/api/cron/unbind-expired?secret=soul_cron_unbind_2026
```
### 功能说明
自动解绑过期的推荐关系,条件:
-`status = 'active'`(活跃状态)
-`expiry_date < NOW()`(已过期)
-`purchase_count = 0`(从未购买)
**规则说明**
- 只解绑「活跃 + 过期 + 未购买」的绑定
- 如果用户购买过(`purchase_count > 0`),即使过期也**不解绑**
- 保留有价值的推荐关系记录
---
## 🔧 宝塔面板配置
### 步骤1: 创建计划任务
1. 登录宝塔面板
2. 点击左侧菜单「计划任务」
3. 点击「添加计划任务」
### 步骤2: 配置任务参数
**任务类型**: 访问URL
**任务名称**: 自动解绑过期推荐关系
**执行周期**: N分钟
**分钟选择**: 30每30分钟执行一次
**URL地址**:
```
https://soul.quwanzhi.com/api/cron/unbind-expired?secret=soul_cron_unbind_2026
```
**备注**: 自动解绑过期且未购买的推荐关系
### 步骤3: 保存并测试
1. 点击「保存」
2. 点击「执行」按钮手动测试一次
3. 查看执行日志,确认任务正常运行
---
## 📊 返回数据格式
### 成功响应(有数据)
```json
{
"success": true,
"message": "自动解绑完成",
"unbound": 5,
"updatedReferrers": 3,
"details": [
{
"refereeId": "user_123",
"referrerId": "user_456",
"bindingDate": "2026-01-05T10:30:00.000Z",
"expiryDate": "2026-02-04T10:30:00.000Z",
"daysExpired": 1
}
],
"duration": 245
}
```
### 成功响应(无数据)
```json
{
"success": true,
"message": "无需解绑的记录",
"unbound": 0,
"duration": 12
}
```
### 失败响应(密钥错误)
```json
{
"success": false,
"error": "未授权访问"
}
```
---
## 🔍 日志示例
### 控制台输出
```
[UnbindExpired] ========== 自动解绑任务开始 ==========
[UnbindExpired] 找到 5 条需要解绑的记录
[UnbindExpired] 1. 用户 user_123
推荐人: user_456
绑定时间: 2026/1/5
过期时间: 2026/2/4 (已过期 1 天)
购买次数: 0
累计佣金: ¥0.00
[UnbindExpired] 2. 用户 user_789
推荐人: user_456
绑定时间: 2026/1/10
过期时间: 2026/2/3 (已过期 2 天)
购买次数: 0
累计佣金: ¥0.00
...
[UnbindExpired] 已成功解绑 5 条记录
[UnbindExpired] 更新推荐人 user_456 的 referral_count (-3)
[UnbindExpired] 更新推荐人 user_999 的 referral_count (-2)
[UnbindExpired] 解绑完成: 5 条记录,更新 2 个推荐人
[UnbindExpired] ========== 任务结束 (耗时 245ms) ==========
```
---
## 🔐 安全说明
### 密钥保护
- 密钥硬编码在代码中:`soul_cron_unbind_2026`
- 只能通过正确的密钥访问接口
- 如果需要修改密钥,编辑 `app/api/cron/unbind-expired/route.ts` 第 24 行
### 访问权限
- ✅ 只支持 GET 请求
- ✅ 需要提供正确的 secret 参数
- ✅ 错误的密钥返回 401 未授权
---
## ⏰ 推荐执行频率
### 每30分钟推荐
- ✅ 及时处理过期绑定
- ✅ 不会给服务器造成压力
- ✅ 符合业务需求
### 其他选项
- 每15分钟如果需要更实时的解绑
- 每1小时如果对实时性要求不高
- 每天凌晨3点如果只需要每日清理
---
## 🧪 手动测试
### 方法1: 浏览器测试
直接在浏览器访问:
```
https://soul.quwanzhi.com/api/cron/unbind-expired?secret=soul_cron_unbind_2026
```
### 方法2: curl 命令
```bash
curl "https://soul.quwanzhi.com/api/cron/unbind-expired?secret=soul_cron_unbind_2026"
```
### 方法3: 宝塔面板手动执行
1. 进入「计划任务」
2. 找到"自动解绑过期推荐关系"任务
3. 点击「执行」按钮
4. 查看「日志」了解执行结果
---
## 📝 数据库操作
### 查询将被解绑的记录(测试用)
```sql
SELECT
id,
referrer_id,
referee_id,
binding_date,
expiry_date,
purchase_count,
total_commission,
DATEDIFF(NOW(), expiry_date) as days_expired
FROM referral_bindings
WHERE status = 'active'
AND expiry_date < NOW()
AND purchase_count = 0
ORDER BY expiry_date ASC;
```
### 查看解绑历史
```sql
SELECT
id,
referrer_id,
referee_id,
binding_date,
expiry_date,
status,
purchase_count,
total_commission
FROM referral_bindings
WHERE status = 'expired'
ORDER BY expiry_date DESC
LIMIT 20;
```
---
## 🔄 对比API vs 脚本
### 旧方案Node.js 脚本)
```bash
# 缺点:
- ❌ 需要配置服务器环境变量
- ❌ 需要手动配置数据库连接
- ❌ 需要确保 Node.js 路径正确
- ❌ 依赖外部脚本文件
```
### 新方案API接口
```bash
# 优点:
- ✅ 无需配置环境变量
- ✅ 无需手动配置数据库(使用现有连接)
- ✅ 宝塔面板直接调用URL
- ✅ 集成在应用代码中
- ✅ 更易于维护和监控
```
---
## 📊 监控与告警
### 监控指标
- 解绑数量(`unbound`
- 执行时长(`duration`
- 成功率
### 查看执行历史
在宝塔面板的「计划任务」→「日志」中查看每次执行的结果。
### 建议
- 如果单次解绑数量 > 100检查是否有异常
- 如果连续失败,检查数据库连接或接口状态
---
## ✅ 部署检查清单
部署前确认:
- ✅ API 文件已创建:`app/api/cron/unbind-expired/route.ts`
- ✅ 代码已部署到服务器
- ✅ PM2 服务已重启
部署后确认:
- ✅ 手动访问接口测试成功
- ✅ 宝塔计划任务已创建
- ✅ 执行周期设置为 30 分钟
- ✅ 手动执行一次测试成功
- ✅ 查看日志确认正常运行
---
## 🚀 快速配置命令
### 宝塔面板 - 计划任务配置
**任务类型**: 访问URL
**URL地址**: `https://soul.quwanzhi.com/api/cron/unbind-expired?secret=soul_cron_unbind_2026`
**执行周期**: N分钟 → 30
**任务名称**: 自动解绑过期推荐关系
---
**配置完成后系统将每30分钟自动解绑过期且未购买的推荐关系**