2025-09-21 21:12:27 +08:00
|
|
|
|
# 小程序app接口设计文档
|
|
|
|
|
|
|
|
|
|
|
|
## 1. 概述
|
|
|
|
|
|
|
|
|
|
|
|
### 1.1 项目简介
|
|
|
|
|
|
本文档详细描述了解班客小程序端的所有API接口设计,包括用户系统、旅行结伴、动物认领、支付系统、消息通知等模块的接口规范。
|
|
|
|
|
|
|
|
|
|
|
|
### 1.2 接口设计原则
|
|
|
|
|
|
- **RESTful风格**:遵循REST架构风格
|
|
|
|
|
|
- **统一响应格式**:所有接口采用统一的响应格式
|
|
|
|
|
|
- **微信生态集成**:深度集成微信小程序能力
|
|
|
|
|
|
- **安全认证**:基于微信授权和JWT Token
|
|
|
|
|
|
- **性能优化**:针对移动端网络环境优化
|
|
|
|
|
|
|
|
|
|
|
|
### 1.3 技术规范
|
|
|
|
|
|
- **协议**:HTTPS
|
|
|
|
|
|
- **数据格式**:JSON
|
|
|
|
|
|
- **字符编码**:UTF-8
|
|
|
|
|
|
- **认证方式**:微信授权 + JWT Token
|
|
|
|
|
|
- **API版本**:v1
|
|
|
|
|
|
|
|
|
|
|
|
## 2. 通用规范
|
|
|
|
|
|
|
|
|
|
|
|
### 2.1 请求格式
|
|
|
|
|
|
|
|
|
|
|
|
#### 2.1.1 请求头
|
|
|
|
|
|
```http
|
|
|
|
|
|
Content-Type: application/json
|
|
|
|
|
|
Authorization: Bearer <JWT_TOKEN>
|
|
|
|
|
|
Accept: application/json
|
|
|
|
|
|
User-Agent: JieBanKe-MiniProgram/1.0.0
|
|
|
|
|
|
X-Platform: miniprogram
|
|
|
|
|
|
X-Version: 1.0.0
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### 2.1.2 请求参数
|
|
|
|
|
|
- **路径参数**:用于资源标识,如 `/api/v1/travels/{id}`
|
|
|
|
|
|
- **查询参数**:用于过滤、排序、分页等,如 `?page=1&size=10&sort=created_at:desc`
|
|
|
|
|
|
- **请求体**:JSON格式的数据
|
|
|
|
|
|
|
|
|
|
|
|
### 2.2 响应格式
|
|
|
|
|
|
|
|
|
|
|
|
#### 2.2.1 成功响应
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 200,
|
|
|
|
|
|
"message": "操作成功",
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
// 具体数据
|
|
|
|
|
|
},
|
|
|
|
|
|
"timestamp": "2024-01-15T10:30:00Z",
|
|
|
|
|
|
"request_id": "req_123456789"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### 2.2.2 分页响应
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 200,
|
|
|
|
|
|
"message": "获取成功",
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"items": [
|
|
|
|
|
|
// 数据列表
|
|
|
|
|
|
],
|
|
|
|
|
|
"pagination": {
|
|
|
|
|
|
"page": 1,
|
|
|
|
|
|
"size": 10,
|
|
|
|
|
|
"total": 50,
|
|
|
|
|
|
"pages": 5,
|
|
|
|
|
|
"has_next": true,
|
|
|
|
|
|
"has_prev": false
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"timestamp": "2024-01-15T10:30:00Z",
|
|
|
|
|
|
"request_id": "req_123456789"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### 2.2.3 错误响应
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 400,
|
|
|
|
|
|
"message": "请求参数错误",
|
|
|
|
|
|
"error": {
|
|
|
|
|
|
"type": "VALIDATION_ERROR",
|
|
|
|
|
|
"details": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"field": "phone",
|
|
|
|
|
|
"message": "手机号格式不正确"
|
|
|
|
|
|
}
|
|
|
|
|
|
]
|
|
|
|
|
|
},
|
|
|
|
|
|
"timestamp": "2024-01-15T10:30:00Z",
|
|
|
|
|
|
"request_id": "req_123456789"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2.3 状态码规范
|
|
|
|
|
|
|
|
|
|
|
|
| 状态码 | 说明 | 使用场景 |
|
|
|
|
|
|
|--------|------|----------|
|
|
|
|
|
|
| 200 | 成功 | 请求成功处理 |
|
|
|
|
|
|
| 201 | 创建成功 | 资源创建成功 |
|
|
|
|
|
|
| 204 | 无内容 | 删除成功或更新成功无返回内容 |
|
|
|
|
|
|
| 400 | 请求错误 | 参数错误、格式错误 |
|
|
|
|
|
|
| 401 | 未授权 | 未登录或token无效 |
|
|
|
|
|
|
| 403 | 禁止访问 | 权限不足 |
|
|
|
|
|
|
| 404 | 资源不存在 | 请求的资源不存在 |
|
|
|
|
|
|
| 422 | 实体错误 | 业务逻辑错误 |
|
|
|
|
|
|
| 500 | 服务器错误 | 内部服务器错误 |
|
|
|
|
|
|
|
|
|
|
|
|
### 2.4 分页参数
|
|
|
|
|
|
|
|
|
|
|
|
| 参数名 | 类型 | 默认值 | 说明 |
|
|
|
|
|
|
|--------|------|--------|------|
|
|
|
|
|
|
| page | integer | 1 | 页码,从1开始 |
|
|
|
|
|
|
| size | integer | 10 | 每页数量,最大50 |
|
|
|
|
|
|
| sort | string | created_at:desc | 排序字段和方向 |
|
|
|
|
|
|
|
|
|
|
|
|
## 3. 用户认证接口
|
|
|
|
|
|
|
|
|
|
|
|
### 3.1 微信登录
|
|
|
|
|
|
|
|
|
|
|
|
#### 接口信息
|
|
|
|
|
|
- **接口路径**:`POST /api/v1/auth/wechat/login`
|
|
|
|
|
|
- **接口描述**:微信小程序登录
|
|
|
|
|
|
- **是否需要认证**:否
|
|
|
|
|
|
|
|
|
|
|
|
#### 请求参数
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": "wx_code_from_login",
|
|
|
|
|
|
"encrypted_data": "encrypted_user_info",
|
|
|
|
|
|
"iv": "initialization_vector",
|
|
|
|
|
|
"raw_data": "raw_user_data",
|
|
|
|
|
|
"signature": "data_signature"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
| 参数名 | 类型 | 必填 | 说明 |
|
|
|
|
|
|
|--------|------|------|------|
|
|
|
|
|
|
| code | string | 是 | 微信登录凭证 |
|
|
|
|
|
|
| encrypted_data | string | 否 | 加密的用户信息 |
|
|
|
|
|
|
| iv | string | 否 | 加密算法的初始向量 |
|
|
|
|
|
|
| raw_data | string | 否 | 原始数据字符串 |
|
|
|
|
|
|
| signature | string | 否 | 数据签名 |
|
|
|
|
|
|
|
|
|
|
|
|
#### 响应示例
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 200,
|
|
|
|
|
|
"message": "登录成功",
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
|
|
|
|
|
|
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
|
|
|
|
|
|
"expires_in": 7200,
|
|
|
|
|
|
"token_type": "Bearer",
|
|
|
|
|
|
"user_info": {
|
|
|
|
|
|
"id": 1,
|
|
|
|
|
|
"uuid": "user_123456",
|
|
|
|
|
|
"openid": "wx_openid_123",
|
|
|
|
|
|
"unionid": "wx_unionid_456",
|
|
|
|
|
|
"nickname": "微信用户",
|
2025-09-22 02:04:07 +08:00
|
|
|
|
"real_name": "",
|
|
|
|
|
|
"avatar": "https://wx.qlogo.cn/avatar.jpg",
|
|
|
|
|
|
"user_type": "regular",
|
|
|
|
|
|
"balance": 0.00,
|
|
|
|
|
|
"status": "active",
|
2025-09-21 21:12:27 +08:00
|
|
|
|
"is_new_user": false,
|
|
|
|
|
|
"profile_completed": true
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 3.2 刷新令牌
|
|
|
|
|
|
|
|
|
|
|
|
#### 接口信息
|
|
|
|
|
|
- **接口路径**:`POST /api/v1/auth/refresh`
|
|
|
|
|
|
- **接口描述**:刷新访问令牌
|
|
|
|
|
|
- **是否需要认证**:否
|
|
|
|
|
|
|
|
|
|
|
|
#### 请求参数
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### 响应示例
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 200,
|
|
|
|
|
|
"message": "令牌刷新成功",
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
|
|
|
|
|
|
"expires_in": 7200,
|
|
|
|
|
|
"token_type": "Bearer"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 3.3 获取用户信息
|
|
|
|
|
|
|
|
|
|
|
|
#### 接口信息
|
|
|
|
|
|
- **接口路径**:`GET /api/v1/auth/me`
|
|
|
|
|
|
- **接口描述**:获取当前用户信息
|
|
|
|
|
|
- **是否需要认证**:是
|
|
|
|
|
|
|
|
|
|
|
|
#### 响应示例
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 200,
|
|
|
|
|
|
"message": "获取成功",
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"id": 1,
|
|
|
|
|
|
"uuid": "user_123456",
|
|
|
|
|
|
"nickname": "旅行达人",
|
2025-09-22 02:04:07 +08:00
|
|
|
|
"real_name": "张三",
|
2025-09-21 21:12:27 +08:00
|
|
|
|
"avatar_url": "https://example.com/avatar.jpg",
|
2025-09-22 02:04:07 +08:00
|
|
|
|
"user_type": "normal",
|
|
|
|
|
|
"balance": 1500.00,
|
2025-09-21 21:12:27 +08:00
|
|
|
|
"status": 1,
|
|
|
|
|
|
"profile_completed": true,
|
|
|
|
|
|
"created_at": "2024-01-01T10:00:00Z",
|
|
|
|
|
|
"statistics": {
|
|
|
|
|
|
"travel_count": 5,
|
|
|
|
|
|
"adoption_count": 2,
|
|
|
|
|
|
"following_count": 15,
|
|
|
|
|
|
"followers_count": 8,
|
|
|
|
|
|
"like_count": 23
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 3.4 更新用户信息
|
|
|
|
|
|
|
|
|
|
|
|
#### 接口信息
|
|
|
|
|
|
- **接口路径**:`PUT /api/v1/auth/profile`
|
|
|
|
|
|
- **接口描述**:更新用户个人信息
|
|
|
|
|
|
- **是否需要认证**:是
|
|
|
|
|
|
|
|
|
|
|
|
#### 请求参数
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"nickname": "新昵称",
|
|
|
|
|
|
"avatar_url": "https://example.com/new_avatar.jpg",
|
|
|
|
|
|
"gender": 2,
|
|
|
|
|
|
"birthday": "1995-05-15",
|
|
|
|
|
|
"location": "上海市",
|
|
|
|
|
|
"bio": "更新的个人简介",
|
|
|
|
|
|
"interests": ["旅行", "摄影", "美食"],
|
|
|
|
|
|
"occupation": "软件工程师"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### 响应示例
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 200,
|
|
|
|
|
|
"message": "更新成功",
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"id": 1,
|
|
|
|
|
|
"nickname": "新昵称",
|
2025-09-22 02:04:07 +08:00
|
|
|
|
"avatar": "https://example.com/new_avatar.jpg",
|
2025-09-21 21:12:27 +08:00
|
|
|
|
"updated_at": "2024-01-15T10:30:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 4. 旅行结伴接口
|
|
|
|
|
|
|
|
|
|
|
|
### 4.1 获取旅行列表
|
|
|
|
|
|
|
|
|
|
|
|
#### 接口信息
|
|
|
|
|
|
- **接口路径**:`GET /api/v1/travels`
|
|
|
|
|
|
- **接口描述**:分页获取旅行活动列表
|
|
|
|
|
|
- **是否需要认证**:否
|
|
|
|
|
|
|
|
|
|
|
|
#### 查询参数
|
|
|
|
|
|
| 参数名 | 类型 | 必填 | 说明 |
|
|
|
|
|
|
|--------|------|------|------|
|
|
|
|
|
|
| page | integer | 否 | 页码,默认1 |
|
|
|
|
|
|
| size | integer | 否 | 每页数量,默认10 |
|
|
|
|
|
|
| sort | string | 否 | 排序,默认created_at:desc |
|
|
|
|
|
|
| keyword | string | 否 | 搜索关键词 |
|
|
|
|
|
|
| destination | string | 否 | 目的地 |
|
|
|
|
|
|
| travel_type | string | 否 | 旅行类型 |
|
|
|
|
|
|
| start_date | string | 否 | 开始日期(YYYY-MM-DD) |
|
|
|
|
|
|
| end_date | string | 否 | 结束日期(YYYY-MM-DD) |
|
|
|
|
|
|
| budget_min | number | 否 | 预算下限 |
|
|
|
|
|
|
| budget_max | number | 否 | 预算上限 |
|
|
|
|
|
|
| status | integer | 否 | 状态:1-招募中,2-进行中,3-已完成 |
|
|
|
|
|
|
| is_featured | integer | 否 | 是否精选:1-是 |
|
|
|
|
|
|
|
|
|
|
|
|
#### 响应示例
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 200,
|
|
|
|
|
|
"message": "获取成功",
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"items": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"id": 1,
|
|
|
|
|
|
"uuid": "travel_123456",
|
|
|
|
|
|
"title": "云南大理古城深度游",
|
|
|
|
|
|
"description": "探索大理古城的历史文化...",
|
|
|
|
|
|
"destination": "云南大理",
|
|
|
|
|
|
"start_date": "2024-03-01",
|
|
|
|
|
|
"end_date": "2024-03-05",
|
|
|
|
|
|
"duration_days": 5,
|
|
|
|
|
|
"max_participants": 8,
|
|
|
|
|
|
"current_participants": 3,
|
2025-09-22 02:04:07 +08:00
|
|
|
|
"price_per_person": 2500.00,
|
|
|
|
|
|
"includes": "住宿、早餐、门票、导游",
|
|
|
|
|
|
"excludes": "午餐、晚餐、个人消费",
|
2025-09-21 21:12:27 +08:00
|
|
|
|
"travel_type": "cultural",
|
2025-09-22 02:04:07 +08:00
|
|
|
|
"status": "recruiting",
|
|
|
|
|
|
"is_featured": true,
|
2025-09-21 21:12:27 +08:00
|
|
|
|
"view_count": 156,
|
|
|
|
|
|
"like_count": 23,
|
|
|
|
|
|
"comment_count": 8,
|
|
|
|
|
|
"creator": {
|
|
|
|
|
|
"id": 1,
|
|
|
|
|
|
"nickname": "旅行达人",
|
2025-09-22 02:04:07 +08:00
|
|
|
|
"avatar": "https://example.com/avatar.jpg"
|
2025-09-21 21:12:27 +08:00
|
|
|
|
},
|
|
|
|
|
|
"cover_image": "https://example.com/cover.jpg",
|
|
|
|
|
|
"images": [
|
|
|
|
|
|
"https://example.com/image1.jpg",
|
|
|
|
|
|
"https://example.com/image2.jpg"
|
|
|
|
|
|
],
|
|
|
|
|
|
"tags": ["文化", "古城", "摄影"],
|
|
|
|
|
|
"created_at": "2024-01-15T10:00:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
"pagination": {
|
|
|
|
|
|
"page": 1,
|
|
|
|
|
|
"size": 10,
|
|
|
|
|
|
"total": 50,
|
|
|
|
|
|
"pages": 5,
|
|
|
|
|
|
"has_next": true,
|
|
|
|
|
|
"has_prev": false
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 4.2 获取旅行详情
|
|
|
|
|
|
|
|
|
|
|
|
#### 接口信息
|
|
|
|
|
|
- **接口路径**:`GET /api/v1/travels/{id}`
|
|
|
|
|
|
- **接口描述**:获取旅行活动详细信息
|
|
|
|
|
|
- **是否需要认证**:否
|
|
|
|
|
|
|
|
|
|
|
|
#### 响应示例
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 200,
|
|
|
|
|
|
"message": "获取成功",
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"id": 1,
|
|
|
|
|
|
"uuid": "travel_123456",
|
|
|
|
|
|
"title": "云南大理古城深度游",
|
|
|
|
|
|
"description": "探索大理古城的历史文化,体验白族风情,品尝当地美食...",
|
|
|
|
|
|
"destination": "云南大理",
|
|
|
|
|
|
"destination_detail": {
|
|
|
|
|
|
"province": "云南省",
|
|
|
|
|
|
"city": "大理市",
|
|
|
|
|
|
"district": "大理古城",
|
|
|
|
|
|
"address": "大理古城南门",
|
|
|
|
|
|
"latitude": 25.6916,
|
|
|
|
|
|
"longitude": 100.1669
|
|
|
|
|
|
},
|
|
|
|
|
|
"start_date": "2024-03-01",
|
|
|
|
|
|
"end_date": "2024-03-05",
|
|
|
|
|
|
"duration_days": 5,
|
|
|
|
|
|
"max_participants": 8,
|
|
|
|
|
|
"current_participants": 3,
|
2025-09-22 02:04:07 +08:00
|
|
|
|
"price_per_person": 2500.00,
|
|
|
|
|
|
"includes": "住宿、早餐、门票、导游",
|
|
|
|
|
|
"excludes": "午餐、晚餐、个人消费",
|
2025-09-21 21:12:27 +08:00
|
|
|
|
"travel_type": "cultural",
|
|
|
|
|
|
"itinerary": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"day": 1,
|
|
|
|
|
|
"title": "抵达大理",
|
2025-09-22 02:04:07 +08:00
|
|
|
|
"activities": ["接机", "入住客栈", "古城夜游"]
|
2025-09-21 21:12:27 +08:00
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
"day": 2,
|
|
|
|
|
|
"title": "大理古城游览",
|
2025-09-22 02:04:07 +08:00
|
|
|
|
"activities": ["洱海骑行", "三塔寺参观", "古城购物"]
|
2025-09-21 21:12:27 +08:00
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
"requirements": "身体健康,有一定体力,热爱文化旅行",
|
|
|
|
|
|
"included_services": ["住宿", "早餐", "景点门票", "导游服务"],
|
|
|
|
|
|
"excluded_services": ["往返交通", "午晚餐", "个人消费"],
|
|
|
|
|
|
"contact_info": {
|
|
|
|
|
|
"wechat": "traveler001",
|
|
|
|
|
|
"phone": "13800138000"
|
|
|
|
|
|
},
|
|
|
|
|
|
"images": [
|
|
|
|
|
|
"https://example.com/image1.jpg",
|
|
|
|
|
|
"https://example.com/image2.jpg"
|
|
|
|
|
|
],
|
|
|
|
|
|
"tags": ["文化", "古城", "摄影"],
|
2025-09-22 02:04:07 +08:00
|
|
|
|
"status": "recruiting",
|
|
|
|
|
|
"is_featured": true,
|
2025-09-21 21:12:27 +08:00
|
|
|
|
"view_count": 156,
|
|
|
|
|
|
"like_count": 23,
|
|
|
|
|
|
"comment_count": 8,
|
|
|
|
|
|
"share_count": 5,
|
|
|
|
|
|
"creator": {
|
|
|
|
|
|
"id": 1,
|
|
|
|
|
|
"nickname": "旅行达人",
|
2025-09-22 02:04:07 +08:00
|
|
|
|
"avatar": "https://example.com/avatar.jpg",
|
2025-09-21 21:12:27 +08:00
|
|
|
|
"travel_count": 15,
|
|
|
|
|
|
"rating": 4.8,
|
|
|
|
|
|
"verified": true
|
|
|
|
|
|
},
|
|
|
|
|
|
"participants": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"id": 1,
|
|
|
|
|
|
"user": {
|
|
|
|
|
|
"id": 2,
|
|
|
|
|
|
"nickname": "小明",
|
2025-09-22 02:04:07 +08:00
|
|
|
|
"avatar": "https://example.com/avatar2.jpg",
|
2025-09-21 21:12:27 +08:00
|
|
|
|
"age": 28,
|
|
|
|
|
|
"gender": 1
|
|
|
|
|
|
},
|
2025-09-22 02:04:07 +08:00
|
|
|
|
"status": "confirmed",
|
2025-09-21 21:12:27 +08:00
|
|
|
|
"applied_at": "2024-01-10T15:30:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
"is_liked": false,
|
|
|
|
|
|
"is_applied": false,
|
|
|
|
|
|
"can_apply": true,
|
|
|
|
|
|
"created_at": "2024-01-15T10:00:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 4.3 创建旅行活动
|
|
|
|
|
|
|
|
|
|
|
|
#### 接口信息
|
|
|
|
|
|
- **接口路径**:`POST /api/v1/travels`
|
|
|
|
|
|
- **接口描述**:创建新的旅行活动
|
|
|
|
|
|
- **是否需要认证**:是
|
|
|
|
|
|
|
|
|
|
|
|
#### 请求参数
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"title": "西藏拉萨朝圣之旅",
|
|
|
|
|
|
"description": "深度体验西藏文化,朝圣布达拉宫...",
|
|
|
|
|
|
"destination": "西藏拉萨",
|
|
|
|
|
|
"start_date": "2024-04-01",
|
|
|
|
|
|
"end_date": "2024-04-07",
|
|
|
|
|
|
"max_participants": 6,
|
2025-09-22 02:04:07 +08:00
|
|
|
|
"price_per_person": 6500.00,
|
|
|
|
|
|
"includes": "住宿、早餐、景点门票",
|
|
|
|
|
|
"excludes": "往返机票、午晚餐",
|
2025-09-21 21:12:27 +08:00
|
|
|
|
"travel_type": "cultural",
|
|
|
|
|
|
"itinerary": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"day": 1,
|
|
|
|
|
|
"title": "抵达拉萨",
|
2025-09-22 02:04:07 +08:00
|
|
|
|
"activities": ["接机", "入住酒店", "适应高原"]
|
2025-09-21 21:12:27 +08:00
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
"requirements": "身体健康,无高原反应病史",
|
|
|
|
|
|
"contact_info": {
|
|
|
|
|
|
"wechat": "tibet_lover",
|
|
|
|
|
|
"phone": "13900139000"
|
|
|
|
|
|
},
|
|
|
|
|
|
"images": [
|
|
|
|
|
|
"https://example.com/tibet1.jpg",
|
|
|
|
|
|
"https://example.com/tibet2.jpg"
|
|
|
|
|
|
],
|
|
|
|
|
|
"tags": ["西藏", "文化", "朝圣"]
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### 响应示例
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 201,
|
|
|
|
|
|
"message": "创建成功",
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"id": 101,
|
|
|
|
|
|
"uuid": "travel_654321",
|
|
|
|
|
|
"title": "西藏拉萨朝圣之旅",
|
|
|
|
|
|
"status": 0,
|
|
|
|
|
|
"created_at": "2024-01-15T10:30:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 4.4 申请参加旅行
|
|
|
|
|
|
|
|
|
|
|
|
#### 接口信息
|
|
|
|
|
|
- **接口路径**:`POST /api/v1/travels/{id}/apply`
|
|
|
|
|
|
- **接口描述**:申请参加旅行活动
|
|
|
|
|
|
- **是否需要认证**:是
|
|
|
|
|
|
|
|
|
|
|
|
#### 请求参数
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"join_reason": "对大理文化很感兴趣,希望能参加这次深度游",
|
|
|
|
|
|
"contact_info": {
|
|
|
|
|
|
"wechat": "xiaoming123",
|
|
|
|
|
|
"phone": "13900139000"
|
|
|
|
|
|
},
|
|
|
|
|
|
"emergency_contact": {
|
|
|
|
|
|
"name": "李四",
|
|
|
|
|
|
"phone": "13800138000",
|
|
|
|
|
|
"relationship": "朋友"
|
|
|
|
|
|
},
|
|
|
|
|
|
"special_requirements": "素食主义者,需要素食安排",
|
|
|
|
|
|
"travel_experience": "去过云南多次,有丰富的旅行经验"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### 响应示例
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 200,
|
|
|
|
|
|
"message": "申请成功",
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"application_id": 1,
|
|
|
|
|
|
"status": 0,
|
|
|
|
|
|
"applied_at": "2024-01-15T10:30:00Z",
|
|
|
|
|
|
"message": "申请已提交,请等待组织者审核"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 4.5 获取我的旅行
|
|
|
|
|
|
|
|
|
|
|
|
#### 接口信息
|
|
|
|
|
|
- **接口路径**:`GET /api/v1/travels/mine`
|
|
|
|
|
|
- **接口描述**:获取我创建和参与的旅行活动
|
|
|
|
|
|
- **是否需要认证**:是
|
|
|
|
|
|
|
|
|
|
|
|
#### 查询参数
|
|
|
|
|
|
| 参数名 | 类型 | 必填 | 说明 |
|
|
|
|
|
|
|--------|------|------|------|
|
|
|
|
|
|
| type | string | 否 | 类型:created-我创建的,joined-我参与的,applied-我申请的 |
|
|
|
|
|
|
| status | integer | 否 | 状态筛选 |
|
|
|
|
|
|
| page | integer | 否 | 页码 |
|
|
|
|
|
|
| size | integer | 否 | 每页数量 |
|
|
|
|
|
|
|
|
|
|
|
|
#### 响应示例
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 200,
|
|
|
|
|
|
"message": "获取成功",
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"items": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"id": 1,
|
|
|
|
|
|
"title": "云南大理古城深度游",
|
|
|
|
|
|
"destination": "云南大理",
|
|
|
|
|
|
"start_date": "2024-03-01",
|
|
|
|
|
|
"end_date": "2024-03-05",
|
|
|
|
|
|
"status": 1,
|
|
|
|
|
|
"my_role": "creator",
|
|
|
|
|
|
"my_status": 1,
|
|
|
|
|
|
"participants_count": 3,
|
|
|
|
|
|
"max_participants": 8,
|
|
|
|
|
|
"cover_image": "https://example.com/cover.jpg",
|
|
|
|
|
|
"created_at": "2024-01-15T10:00:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
"pagination": {
|
|
|
|
|
|
"page": 1,
|
|
|
|
|
|
"size": 10,
|
|
|
|
|
|
"total": 5,
|
|
|
|
|
|
"pages": 1
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 5. 动物认领接口
|
|
|
|
|
|
|
|
|
|
|
|
### 5.1 获取动物列表
|
|
|
|
|
|
|
|
|
|
|
|
#### 接口信息
|
|
|
|
|
|
- **接口路径**:`GET /api/v1/animals`
|
|
|
|
|
|
- **接口描述**:分页获取可认领动物列表
|
|
|
|
|
|
- **是否需要认证**:否
|
|
|
|
|
|
|
|
|
|
|
|
#### 查询参数
|
|
|
|
|
|
| 参数名 | 类型 | 必填 | 说明 |
|
|
|
|
|
|
|--------|------|------|------|
|
|
|
|
|
|
| page | integer | 否 | 页码,默认1 |
|
|
|
|
|
|
| size | integer | 否 | 每页数量,默认10 |
|
|
|
|
|
|
| sort | string | 否 | 排序,默认created_at:desc |
|
|
|
|
|
|
| keyword | string | 否 | 搜索关键词(动物名称) |
|
2025-09-22 02:04:07 +08:00
|
|
|
|
| type | string | 否 | 动物类型:cat,dog,rabbit,other |
|
2025-09-21 21:12:27 +08:00
|
|
|
|
| breed | string | 否 | 品种 |
|
2025-09-22 02:04:07 +08:00
|
|
|
|
| gender | string | 否 | 性别:male,female |
|
2025-09-21 21:12:27 +08:00
|
|
|
|
| age_min | integer | 否 | 年龄下限(月) |
|
|
|
|
|
|
| age_max | integer | 否 | 年龄上限(月) |
|
|
|
|
|
|
| location | string | 否 | 所在地 |
|
2025-09-22 02:04:07 +08:00
|
|
|
|
| status | string | 否 | 状态:available,claimed,unavailable |
|
2025-09-21 21:12:27 +08:00
|
|
|
|
| is_featured | integer | 否 | 是否精选:1-是 |
|
|
|
|
|
|
|
|
|
|
|
|
#### 响应示例
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 200,
|
|
|
|
|
|
"message": "获取成功",
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"items": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"id": 1,
|
|
|
|
|
|
"uuid": "animal_123456",
|
|
|
|
|
|
"name": "小花",
|
2025-09-22 02:04:07 +08:00
|
|
|
|
"type": "猫",
|
2025-09-21 21:12:27 +08:00
|
|
|
|
"breed": "英国短毛猫",
|
2025-09-22 02:04:07 +08:00
|
|
|
|
"gender": "female",
|
2025-09-21 21:12:27 +08:00
|
|
|
|
"age": 24,
|
2025-09-22 02:04:07 +08:00
|
|
|
|
"price": 500.00,
|
|
|
|
|
|
"daily_cost": 15.00,
|
2025-09-21 21:12:27 +08:00
|
|
|
|
"location": "北京市朝阳区",
|
2025-09-22 02:04:07 +08:00
|
|
|
|
"status": "available",
|
|
|
|
|
|
"health_status": "健康",
|
|
|
|
|
|
"description": "性格温顺,喜欢晒太阳",
|
2025-09-21 21:12:27 +08:00
|
|
|
|
"images": [
|
|
|
|
|
|
"https://example.com/cat1.jpg",
|
|
|
|
|
|
"https://example.com/cat2.jpg"
|
|
|
|
|
|
],
|
2025-09-22 02:04:07 +08:00
|
|
|
|
"vaccination_records": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"vaccine": "狂犬疫苗",
|
|
|
|
|
|
"date": "2024-01-01",
|
|
|
|
|
|
"next_date": "2025-01-01"
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
"farmer": {
|
2025-09-21 21:12:27 +08:00
|
|
|
|
"id": 1,
|
|
|
|
|
|
"name": "爱心动物农场",
|
2025-09-22 02:04:07 +08:00
|
|
|
|
"location": "北京市朝阳区"
|
2025-09-21 21:12:27 +08:00
|
|
|
|
},
|
2025-09-22 02:04:07 +08:00
|
|
|
|
"view_count": 89,
|
|
|
|
|
|
"like_count": 15,
|
2025-09-21 21:12:27 +08:00
|
|
|
|
"created_at": "2024-01-10T10:00:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
"pagination": {
|
|
|
|
|
|
"page": 1,
|
|
|
|
|
|
"size": 10,
|
|
|
|
|
|
"total": 30,
|
|
|
|
|
|
"pages": 3
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 5.2 获取动物详情
|
|
|
|
|
|
|
|
|
|
|
|
#### 接口信息
|
|
|
|
|
|
- **接口路径**:`GET /api/v1/animals/{id}`
|
|
|
|
|
|
- **接口描述**:获取动物详细信息
|
|
|
|
|
|
- **是否需要认证**:否
|
|
|
|
|
|
|
|
|
|
|
|
#### 响应示例
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 200,
|
|
|
|
|
|
"message": "获取成功",
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"id": 1,
|
|
|
|
|
|
"uuid": "animal_123456",
|
|
|
|
|
|
"name": "小花",
|
2025-09-22 02:04:07 +08:00
|
|
|
|
"type": "猫",
|
2025-09-21 21:12:27 +08:00
|
|
|
|
"breed": "英国短毛猫",
|
2025-09-22 02:04:07 +08:00
|
|
|
|
"gender": "female",
|
2025-09-21 21:12:27 +08:00
|
|
|
|
"age": 24,
|
2025-09-22 02:04:07 +08:00
|
|
|
|
"price": 500.00,
|
|
|
|
|
|
"daily_cost": 15.00,
|
2025-09-21 21:12:27 +08:00
|
|
|
|
"location": "北京市朝阳区",
|
2025-09-22 02:04:07 +08:00
|
|
|
|
"status": "available",
|
|
|
|
|
|
"health_status": "健康",
|
|
|
|
|
|
"description": "小花是一只非常温顺的英国短毛猫,喜欢晒太阳和玩毛线球...",
|
2025-09-21 21:12:27 +08:00
|
|
|
|
"images": [
|
|
|
|
|
|
"https://example.com/cat1.jpg",
|
|
|
|
|
|
"https://example.com/cat2.jpg"
|
|
|
|
|
|
],
|
2025-09-22 02:04:07 +08:00
|
|
|
|
"vaccination_records": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"vaccine": "狂犬疫苗",
|
|
|
|
|
|
"date": "2024-01-01",
|
|
|
|
|
|
"next_date": "2025-01-01"
|
|
|
|
|
|
}
|
2025-09-21 21:12:27 +08:00
|
|
|
|
],
|
2025-09-22 02:04:07 +08:00
|
|
|
|
"farmer": {
|
2025-09-21 21:12:27 +08:00
|
|
|
|
"id": 1,
|
|
|
|
|
|
"name": "爱心动物农场",
|
|
|
|
|
|
"location": "北京市朝阳区",
|
2025-09-22 02:04:07 +08:00
|
|
|
|
"contact_phone": "13800138000"
|
2025-09-21 21:12:27 +08:00
|
|
|
|
},
|
2025-09-22 02:04:07 +08:00
|
|
|
|
"view_count": 89,
|
|
|
|
|
|
"like_count": 15,
|
2025-09-21 21:12:27 +08:00
|
|
|
|
"is_liked": false,
|
|
|
|
|
|
"can_adopt": true,
|
|
|
|
|
|
"created_at": "2024-01-10T10:00:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 5.3 申请认领动物
|
|
|
|
|
|
|
|
|
|
|
|
#### 接口信息
|
|
|
|
|
|
- **接口路径**:`POST /api/v1/animals/{id}/adopt`
|
|
|
|
|
|
- **接口描述**:申请认领动物
|
|
|
|
|
|
- **是否需要认证**:是
|
|
|
|
|
|
|
|
|
|
|
|
#### 请求参数
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"adoption_type": 1,
|
|
|
|
|
|
"duration_months": 12,
|
|
|
|
|
|
"start_date": "2024-02-01",
|
|
|
|
|
|
"adoption_reason": "非常喜欢小花,希望能给它一个温暖的家",
|
|
|
|
|
|
"experience": "养过猫咪,有丰富的养宠经验",
|
|
|
|
|
|
"living_condition": "独居公寓,环境安静,适合猫咪生活",
|
|
|
|
|
|
"contact_info": {
|
|
|
|
|
|
"wechat": "cat_lover",
|
|
|
|
|
|
"phone": "13900139000"
|
|
|
|
|
|
},
|
|
|
|
|
|
"emergency_contact": {
|
|
|
|
|
|
"name": "李四",
|
|
|
|
|
|
"phone": "13800138000",
|
|
|
|
|
|
"relationship": "朋友"
|
|
|
|
|
|
},
|
|
|
|
|
|
"special_requirements": "希望能定期收到小花的照片和视频"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### 响应示例
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 200,
|
|
|
|
|
|
"message": "申请成功",
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"adoption_id": 1,
|
|
|
|
|
|
"status": 0,
|
|
|
|
|
|
"total_fee": 2400.00,
|
|
|
|
|
|
"applied_at": "2024-01-15T10:30:00Z",
|
|
|
|
|
|
"message": "认领申请已提交,请等待农场审核"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 5.4 获取我的认领
|
|
|
|
|
|
|
|
|
|
|
|
#### 接口信息
|
|
|
|
|
|
- **接口路径**:`GET /api/v1/adoptions/mine`
|
|
|
|
|
|
- **接口描述**:获取我的动物认领记录
|
|
|
|
|
|
- **是否需要认证**:是
|
|
|
|
|
|
|
|
|
|
|
|
#### 查询参数
|
|
|
|
|
|
| 参数名 | 类型 | 必填 | 说明 |
|
|
|
|
|
|
|--------|------|------|------|
|
|
|
|
|
|
| status | integer | 否 | 状态:0-申请中,1-已通过,2-已拒绝,3-进行中,4-已完成 |
|
|
|
|
|
|
| page | integer | 否 | 页码 |
|
|
|
|
|
|
| size | integer | 否 | 每页数量 |
|
|
|
|
|
|
|
|
|
|
|
|
#### 响应示例
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 200,
|
|
|
|
|
|
"message": "获取成功",
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"items": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"id": 1,
|
|
|
|
|
|
"uuid": "adoption_123456",
|
|
|
|
|
|
"animal": {
|
|
|
|
|
|
"id": 1,
|
|
|
|
|
|
"name": "小花",
|
|
|
|
|
|
"species": "cat",
|
|
|
|
|
|
"breed": "英国短毛猫",
|
|
|
|
|
|
"cover_image": "https://example.com/cat_cover.jpg"
|
|
|
|
|
|
},
|
|
|
|
|
|
"adoption_type": 1,
|
|
|
|
|
|
"duration_months": 12,
|
|
|
|
|
|
"start_date": "2024-02-01",
|
|
|
|
|
|
"end_date": "2025-02-01",
|
|
|
|
|
|
"monthly_fee": 200.00,
|
|
|
|
|
|
"total_fee": 2400.00,
|
|
|
|
|
|
"status": 3,
|
|
|
|
|
|
"progress": {
|
|
|
|
|
|
"days_passed": 15,
|
|
|
|
|
|
"total_days": 365,
|
|
|
|
|
|
"percentage": 4.1
|
|
|
|
|
|
},
|
|
|
|
|
|
"next_update_date": "2024-02-15",
|
|
|
|
|
|
"applied_at": "2024-01-15T10:30:00Z",
|
|
|
|
|
|
"approved_at": "2024-01-16T09:00:00Z",
|
|
|
|
|
|
"started_at": "2024-02-01T00:00:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
"pagination": {
|
|
|
|
|
|
"page": 1,
|
|
|
|
|
|
"size": 10,
|
|
|
|
|
|
"total": 2,
|
|
|
|
|
|
"pages": 1
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 5.5 获取认领动态
|
|
|
|
|
|
|
|
|
|
|
|
#### 接口信息
|
|
|
|
|
|
- **接口路径**:`GET /api/v1/adoptions/{id}/updates`
|
|
|
|
|
|
- **接口描述**:获取认领动物的成长动态
|
|
|
|
|
|
- **是否需要认证**:是
|
|
|
|
|
|
|
|
|
|
|
|
#### 响应示例
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 200,
|
|
|
|
|
|
"message": "获取成功",
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"items": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"id": 1,
|
|
|
|
|
|
"type": "daily_care",
|
|
|
|
|
|
"title": "小花今日状况",
|
|
|
|
|
|
"content": "小花今天很活泼,吃了很多猫粮,还玩了新玩具",
|
|
|
|
|
|
"images": [
|
|
|
|
|
|
"https://example.com/update1.jpg",
|
|
|
|
|
|
"https://example.com/update2.jpg"
|
|
|
|
|
|
],
|
|
|
|
|
|
"videos": [
|
|
|
|
|
|
"https://example.com/update_video.mp4"
|
|
|
|
|
|
],
|
|
|
|
|
|
"caretaker": {
|
|
|
|
|
|
"name": "张三",
|
|
|
|
|
|
"avatar_url": "https://example.com/caretaker.jpg"
|
|
|
|
|
|
},
|
|
|
|
|
|
"created_at": "2024-02-15T14:30:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
"pagination": {
|
|
|
|
|
|
"page": 1,
|
|
|
|
|
|
"size": 10,
|
|
|
|
|
|
"total": 20,
|
|
|
|
|
|
"pages": 2
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 6. 支付系统接口
|
|
|
|
|
|
|
|
|
|
|
|
### 6.1 创建订单
|
|
|
|
|
|
|
|
|
|
|
|
#### 接口信息
|
|
|
|
|
|
- **接口路径**:`POST /api/v1/orders`
|
|
|
|
|
|
- **接口描述**:创建支付订单
|
|
|
|
|
|
- **是否需要认证**:是
|
|
|
|
|
|
|
|
|
|
|
|
#### 请求参数
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"order_type": "adoption",
|
|
|
|
|
|
"related_id": 1,
|
|
|
|
|
|
"items": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"name": "认领小花(英国短毛猫)",
|
|
|
|
|
|
"description": "12个月长期认领",
|
|
|
|
|
|
"quantity": 1,
|
|
|
|
|
|
"unit_price": 2400.00
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
"amount": 2400.00,
|
|
|
|
|
|
"currency": "CNY",
|
|
|
|
|
|
"payment_method": "wechat",
|
|
|
|
|
|
"metadata": {
|
|
|
|
|
|
"adoption_id": 1,
|
|
|
|
|
|
"source": "miniprogram"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### 响应示例
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 201,
|
|
|
|
|
|
"message": "订单创建成功",
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"order_id": 1,
|
|
|
|
|
|
"order_no": "ORD202401150001",
|
|
|
|
|
|
"amount": 2400.00,
|
|
|
|
|
|
"currency": "CNY",
|
|
|
|
|
|
"status": 0,
|
|
|
|
|
|
"expires_at": "2024-01-15T11:00:00Z",
|
|
|
|
|
|
"created_at": "2024-01-15T10:30:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 6.2 发起支付
|
|
|
|
|
|
|
|
|
|
|
|
#### 接口信息
|
|
|
|
|
|
- **接口路径**:`POST /api/v1/orders/{id}/pay`
|
|
|
|
|
|
- **接口描述**:发起微信支付
|
|
|
|
|
|
- **是否需要认证**:是
|
|
|
|
|
|
|
|
|
|
|
|
#### 请求参数
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"payment_method": "wechat",
|
|
|
|
|
|
"openid": "wx_openid_123456"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### 响应示例
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 200,
|
|
|
|
|
|
"message": "支付参数获取成功",
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"payment_id": 1,
|
|
|
|
|
|
"payment_no": "PAY202401150001",
|
|
|
|
|
|
"payment_params": {
|
|
|
|
|
|
"appId": "wx_app_id",
|
|
|
|
|
|
"timeStamp": "1705312200",
|
|
|
|
|
|
"nonceStr": "random_string",
|
|
|
|
|
|
"package": "prepay_id=wx_prepay_123456",
|
|
|
|
|
|
"signType": "RSA",
|
|
|
|
|
|
"paySign": "signature_string"
|
|
|
|
|
|
},
|
|
|
|
|
|
"expires_at": "2024-01-15T11:00:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 6.3 查询订单状态
|
|
|
|
|
|
|
|
|
|
|
|
#### 接口信息
|
|
|
|
|
|
- **接口路径**:`GET /api/v1/orders/{id}`
|
|
|
|
|
|
- **接口描述**:查询订单详情和支付状态
|
|
|
|
|
|
- **是否需要认证**:是
|
|
|
|
|
|
|
|
|
|
|
|
#### 响应示例
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 200,
|
|
|
|
|
|
"message": "获取成功",
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"id": 1,
|
|
|
|
|
|
"order_no": "ORD202401150001",
|
|
|
|
|
|
"order_type": "adoption",
|
|
|
|
|
|
"related_id": 1,
|
|
|
|
|
|
"related_info": {
|
|
|
|
|
|
"animal": {
|
|
|
|
|
|
"id": 1,
|
|
|
|
|
|
"name": "小花",
|
|
|
|
|
|
"species": "cat",
|
|
|
|
|
|
"cover_image": "https://example.com/cat_cover.jpg"
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
"title": "认领小花(英国短毛猫)",
|
|
|
|
|
|
"description": "12个月长期认领",
|
|
|
|
|
|
"amount": 2400.00,
|
|
|
|
|
|
"currency": "CNY",
|
|
|
|
|
|
"status": 2,
|
|
|
|
|
|
"payment_method": "wechat",
|
|
|
|
|
|
"payment_status": 2,
|
|
|
|
|
|
"paid_at": "2024-01-15T10:35:00Z",
|
|
|
|
|
|
"created_at": "2024-01-15T10:30:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 6.4 获取我的订单
|
|
|
|
|
|
|
|
|
|
|
|
#### 接口信息
|
|
|
|
|
|
- **接口路径**:`GET /api/v1/orders/mine`
|
|
|
|
|
|
- **接口描述**:获取我的订单列表
|
|
|
|
|
|
- **是否需要认证**:是
|
|
|
|
|
|
|
|
|
|
|
|
#### 查询参数
|
|
|
|
|
|
| 参数名 | 类型 | 必填 | 说明 |
|
|
|
|
|
|
|--------|------|------|------|
|
|
|
|
|
|
| status | integer | 否 | 订单状态 |
|
|
|
|
|
|
| order_type | string | 否 | 订单类型 |
|
|
|
|
|
|
| page | integer | 否 | 页码 |
|
|
|
|
|
|
| size | integer | 否 | 每页数量 |
|
|
|
|
|
|
|
|
|
|
|
|
#### 响应示例
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 200,
|
|
|
|
|
|
"message": "获取成功",
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"items": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"id": 1,
|
|
|
|
|
|
"order_no": "ORD202401150001",
|
|
|
|
|
|
"order_type": "adoption",
|
|
|
|
|
|
"title": "认领小花(英国短毛猫)",
|
|
|
|
|
|
"amount": 2400.00,
|
|
|
|
|
|
"status": 2,
|
|
|
|
|
|
"payment_status": 2,
|
|
|
|
|
|
"cover_image": "https://example.com/cat_cover.jpg",
|
|
|
|
|
|
"paid_at": "2024-01-15T10:35:00Z",
|
|
|
|
|
|
"created_at": "2024-01-15T10:30:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
"pagination": {
|
|
|
|
|
|
"page": 1,
|
|
|
|
|
|
"size": 10,
|
|
|
|
|
|
"total": 5,
|
|
|
|
|
|
"pages": 1
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 7. 消息通知接口
|
|
|
|
|
|
|
|
|
|
|
|
### 7.1 获取消息列表
|
|
|
|
|
|
|
|
|
|
|
|
#### 接口信息
|
|
|
|
|
|
- **接口路径**:`GET /api/v1/messages`
|
|
|
|
|
|
- **接口描述**:获取用户消息列表
|
|
|
|
|
|
- **是否需要认证**:是
|
|
|
|
|
|
|
|
|
|
|
|
#### 查询参数
|
|
|
|
|
|
| 参数名 | 类型 | 必填 | 说明 |
|
|
|
|
|
|
|--------|------|------|------|
|
|
|
|
|
|
| type | string | 否 | 消息类型:system,travel,adoption,order |
|
|
|
|
|
|
| status | integer | 否 | 状态:0-未读,1-已读 |
|
|
|
|
|
|
| page | integer | 否 | 页码 |
|
|
|
|
|
|
| size | integer | 否 | 每页数量 |
|
|
|
|
|
|
|
|
|
|
|
|
#### 响应示例
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 200,
|
|
|
|
|
|
"message": "获取成功",
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"items": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"id": 1,
|
|
|
|
|
|
"type": "adoption",
|
|
|
|
|
|
"title": "认领申请通过",
|
|
|
|
|
|
"content": "您的动物认领申请已通过审核,请及时完成支付",
|
|
|
|
|
|
"avatar": "https://example.com/system_avatar.jpg",
|
|
|
|
|
|
"related_type": "adoption",
|
|
|
|
|
|
"related_id": 1,
|
|
|
|
|
|
"status": 0,
|
|
|
|
|
|
"created_at": "2024-01-16T09:00:00Z"
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
"id": 2,
|
|
|
|
|
|
"type": "travel",
|
|
|
|
|
|
"title": "旅行申请通过",
|
|
|
|
|
|
"content": "您申请参加的"云南大理古城深度游"已通过审核",
|
|
|
|
|
|
"avatar": "https://example.com/travel_avatar.jpg",
|
|
|
|
|
|
"related_type": "travel",
|
|
|
|
|
|
"related_id": 1,
|
|
|
|
|
|
"status": 1,
|
|
|
|
|
|
"created_at": "2024-01-15T16:00:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
"pagination": {
|
|
|
|
|
|
"page": 1,
|
|
|
|
|
|
"size": 10,
|
|
|
|
|
|
"total": 15,
|
|
|
|
|
|
"pages": 2
|
|
|
|
|
|
},
|
|
|
|
|
|
"unread_count": 3
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 7.2 标记消息已读
|
|
|
|
|
|
|
|
|
|
|
|
#### 接口信息
|
|
|
|
|
|
- **接口路径**:`PUT /api/v1/messages/{id}/read`
|
|
|
|
|
|
- **接口描述**:标记消息为已读
|
|
|
|
|
|
- **是否需要认证**:是
|
|
|
|
|
|
|
|
|
|
|
|
#### 响应示例
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 200,
|
|
|
|
|
|
"message": "标记成功"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 7.3 批量标记已读
|
|
|
|
|
|
|
|
|
|
|
|
#### 接口信息
|
|
|
|
|
|
- **接口路径**:`PUT /api/v1/messages/batch-read`
|
|
|
|
|
|
- **接口描述**:批量标记消息为已读
|
|
|
|
|
|
- **是否需要认证**:是
|
|
|
|
|
|
|
|
|
|
|
|
#### 请求参数
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"message_ids": [1, 2, 3, 4, 5]
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### 响应示例
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 200,
|
|
|
|
|
|
"message": "批量标记成功",
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"updated_count": 5
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 8. 文件上传接口
|
|
|
|
|
|
|
|
|
|
|
|
### 8.1 上传图片
|
|
|
|
|
|
|
|
|
|
|
|
#### 接口信息
|
|
|
|
|
|
- **接口路径**:`POST /api/v1/upload/image`
|
|
|
|
|
|
- **接口描述**:上传图片文件
|
|
|
|
|
|
- **是否需要认证**:是
|
|
|
|
|
|
|
|
|
|
|
|
#### 请求参数
|
|
|
|
|
|
- **Content-Type**:`multipart/form-data`
|
|
|
|
|
|
|
|
|
|
|
|
| 参数名 | 类型 | 必填 | 说明 |
|
|
|
|
|
|
|--------|------|------|------|
|
|
|
|
|
|
| file | file | 是 | 图片文件 |
|
|
|
|
|
|
| category | string | 否 | 分类:avatar,travel,animal,other |
|
|
|
|
|
|
|
|
|
|
|
|
#### 响应示例
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 200,
|
|
|
|
|
|
"message": "上传成功",
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"file_id": 1,
|
|
|
|
|
|
"file_url": "https://cdn.example.com/uploads/images/2024/01/15/image_123456.jpg",
|
|
|
|
|
|
"file_size": 1024000,
|
|
|
|
|
|
"width": 1920,
|
|
|
|
|
|
"height": 1080,
|
|
|
|
|
|
"uploaded_at": "2024-01-15T10:30:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 8.2 批量上传图片
|
|
|
|
|
|
|
|
|
|
|
|
#### 接口信息
|
|
|
|
|
|
- **接口路径**:`POST /api/v1/upload/images`
|
|
|
|
|
|
- **接口描述**:批量上传多张图片
|
|
|
|
|
|
- **是否需要认证**:是
|
|
|
|
|
|
|
|
|
|
|
|
#### 请求参数
|
|
|
|
|
|
- **Content-Type**:`multipart/form-data`
|
|
|
|
|
|
|
|
|
|
|
|
| 参数名 | 类型 | 必填 | 说明 |
|
|
|
|
|
|
|--------|------|------|------|
|
|
|
|
|
|
| files[] | file[] | 是 | 图片文件数组 |
|
|
|
|
|
|
| category | string | 否 | 分类 |
|
|
|
|
|
|
|
|
|
|
|
|
#### 响应示例
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 200,
|
|
|
|
|
|
"message": "批量上传完成",
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"success_count": 3,
|
|
|
|
|
|
"failed_count": 0,
|
|
|
|
|
|
"files": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"file_id": 1,
|
|
|
|
|
|
"file_url": "https://cdn.example.com/uploads/images/image1.jpg"
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
"file_id": 2,
|
|
|
|
|
|
"file_url": "https://cdn.example.com/uploads/images/image2.jpg"
|
|
|
|
|
|
}
|
|
|
|
|
|
]
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 9. 搜索接口
|
|
|
|
|
|
|
|
|
|
|
|
### 9.1 综合搜索
|
|
|
|
|
|
|
|
|
|
|
|
#### 接口信息
|
|
|
|
|
|
- **接口路径**:`GET /api/v1/search`
|
|
|
|
|
|
- **接口描述**:综合搜索旅行和动物
|
|
|
|
|
|
- **是否需要认证**:否
|
|
|
|
|
|
|
|
|
|
|
|
#### 查询参数
|
|
|
|
|
|
| 参数名 | 类型 | 必填 | 说明 |
|
|
|
|
|
|
|--------|------|------|------|
|
|
|
|
|
|
| keyword | string | 是 | 搜索关键词 |
|
|
|
|
|
|
| type | string | 否 | 搜索类型:all,travel,animal,默认all |
|
|
|
|
|
|
| page | integer | 否 | 页码 |
|
|
|
|
|
|
| size | integer | 否 | 每页数量 |
|
|
|
|
|
|
|
|
|
|
|
|
#### 响应示例
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 200,
|
|
|
|
|
|
"message": "搜索成功",
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"travels": {
|
|
|
|
|
|
"items": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"id": 1,
|
|
|
|
|
|
"title": "云南大理古城深度游",
|
|
|
|
|
|
"destination": "云南大理",
|
|
|
|
|
|
"cover_image": "https://example.com/travel_cover.jpg",
|
|
|
|
|
|
"creator": {
|
|
|
|
|
|
"nickname": "旅行达人"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
"total": 5
|
|
|
|
|
|
},
|
|
|
|
|
|
"animals": {
|
|
|
|
|
|
"items": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"id": 1,
|
|
|
|
|
|
"name": "小花",
|
|
|
|
|
|
"species": "cat",
|
|
|
|
|
|
"breed": "英国短毛猫",
|
|
|
|
|
|
"cover_image": "https://example.com/cat_cover.jpg",
|
|
|
|
|
|
"farm": {
|
|
|
|
|
|
"name": "爱心动物农场"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
"total": 3
|
|
|
|
|
|
},
|
|
|
|
|
|
"total_count": 8
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 9.2 搜索建议
|
|
|
|
|
|
|
|
|
|
|
|
#### 接口信息
|
|
|
|
|
|
- **接口路径**:`GET /api/v1/search/suggestions`
|
|
|
|
|
|
- **接口描述**:获取搜索建议
|
|
|
|
|
|
- **是否需要认证**:否
|
|
|
|
|
|
|
|
|
|
|
|
#### 查询参数
|
|
|
|
|
|
| 参数名 | 类型 | 必填 | 说明 |
|
|
|
|
|
|
|--------|------|------|------|
|
|
|
|
|
|
| keyword | string | 是 | 搜索关键词 |
|
|
|
|
|
|
| type | string | 否 | 类型:travel,animal |
|
|
|
|
|
|
|
|
|
|
|
|
#### 响应示例
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 200,
|
|
|
|
|
|
"message": "获取成功",
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"suggestions": [
|
|
|
|
|
|
"大理古城",
|
|
|
|
|
|
"大理洱海",
|
|
|
|
|
|
"大理三塔",
|
|
|
|
|
|
"大理旅游"
|
|
|
|
|
|
]
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 10. 收藏点赞接口
|
|
|
|
|
|
|
|
|
|
|
|
### 10.1 点赞/取消点赞
|
|
|
|
|
|
|
|
|
|
|
|
#### 接口信息
|
|
|
|
|
|
- **接口路径**:`POST /api/v1/likes`
|
|
|
|
|
|
- **接口描述**:点赞或取消点赞
|
|
|
|
|
|
- **是否需要认证**:是
|
|
|
|
|
|
|
|
|
|
|
|
#### 请求参数
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"target_type": "travel",
|
|
|
|
|
|
"target_id": 1,
|
|
|
|
|
|
"action": "like"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
| 参数名 | 类型 | 必填 | 说明 |
|
|
|
|
|
|
|--------|------|------|------|
|
|
|
|
|
|
| target_type | string | 是 | 目标类型:travel,animal |
|
|
|
|
|
|
| target_id | integer | 是 | 目标ID |
|
|
|
|
|
|
| action | string | 是 | 操作:like-点赞,unlike-取消点赞 |
|
|
|
|
|
|
|
|
|
|
|
|
#### 响应示例
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 200,
|
|
|
|
|
|
"message": "点赞成功",
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"is_liked": true,
|
|
|
|
|
|
"like_count": 24
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 10.2 收藏/取消收藏
|
|
|
|
|
|
|
|
|
|
|
|
#### 接口信息
|
|
|
|
|
|
- **接口路径**:`POST /api/v1/favorites`
|
|
|
|
|
|
- **接口描述**:收藏或取消收藏
|
|
|
|
|
|
- **是否需要认证**:是
|
|
|
|
|
|
|
|
|
|
|
|
#### 请求参数
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"target_type": "animal",
|
|
|
|
|
|
"target_id": 1,
|
|
|
|
|
|
"action": "favorite"
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### 响应示例
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 200,
|
|
|
|
|
|
"message": "收藏成功",
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"is_favorited": true,
|
|
|
|
|
|
"favorite_count": 16
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 10.3 获取我的收藏
|
|
|
|
|
|
|
|
|
|
|
|
#### 接口信息
|
|
|
|
|
|
- **接口路径**:`GET /api/v1/favorites/mine`
|
|
|
|
|
|
- **接口描述**:获取我的收藏列表
|
|
|
|
|
|
- **是否需要认证**:是
|
|
|
|
|
|
|
|
|
|
|
|
#### 查询参数
|
|
|
|
|
|
| 参数名 | 类型 | 必填 | 说明 |
|
|
|
|
|
|
|--------|------|------|------|
|
|
|
|
|
|
| type | string | 否 | 类型:travel,animal |
|
|
|
|
|
|
| page | integer | 否 | 页码 |
|
|
|
|
|
|
| size | integer | 否 | 每页数量 |
|
|
|
|
|
|
|
|
|
|
|
|
#### 响应示例
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 200,
|
|
|
|
|
|
"message": "获取成功",
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"items": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"id": 1,
|
|
|
|
|
|
"target_type": "travel",
|
|
|
|
|
|
"target_id": 1,
|
|
|
|
|
|
"target_info": {
|
|
|
|
|
|
"id": 1,
|
|
|
|
|
|
"title": "云南大理古城深度游",
|
|
|
|
|
|
"destination": "云南大理",
|
|
|
|
|
|
"cover_image": "https://example.com/travel_cover.jpg"
|
|
|
|
|
|
},
|
|
|
|
|
|
"created_at": "2024-01-15T10:30:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
"pagination": {
|
|
|
|
|
|
"page": 1,
|
|
|
|
|
|
"size": 10,
|
|
|
|
|
|
"total": 8,
|
|
|
|
|
|
"pages": 1
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 11. 评论接口
|
|
|
|
|
|
|
|
|
|
|
|
### 11.1 获取评论列表
|
|
|
|
|
|
|
|
|
|
|
|
#### 接口信息
|
|
|
|
|
|
- **接口路径**:`GET /api/v1/comments`
|
|
|
|
|
|
- **接口描述**:获取评论列表
|
|
|
|
|
|
- **是否需要认证**:否
|
|
|
|
|
|
|
|
|
|
|
|
#### 查询参数
|
|
|
|
|
|
| 参数名 | 类型 | 必填 | 说明 |
|
|
|
|
|
|
|--------|------|------|------|
|
|
|
|
|
|
| target_type | string | 是 | 目标类型:travel,animal |
|
|
|
|
|
|
| target_id | integer | 是 | 目标ID |
|
|
|
|
|
|
| page | integer | 否 | 页码 |
|
|
|
|
|
|
| size | integer | 否 | 每页数量 |
|
|
|
|
|
|
|
|
|
|
|
|
#### 响应示例
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 200,
|
|
|
|
|
|
"message": "获取成功",
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"items": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"id": 1,
|
|
|
|
|
|
"content": "这个旅行计划看起来很不错,很想参加!",
|
|
|
|
|
|
"user": {
|
|
|
|
|
|
"id": 2,
|
|
|
|
|
|
"nickname": "旅行爱好者",
|
|
|
|
|
|
"avatar_url": "https://example.com/avatar.jpg"
|
|
|
|
|
|
},
|
|
|
|
|
|
"like_count": 3,
|
|
|
|
|
|
"is_liked": false,
|
|
|
|
|
|
"replies": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"id": 2,
|
|
|
|
|
|
"content": "欢迎加入我们!",
|
|
|
|
|
|
"user": {
|
|
|
|
|
|
"id": 1,
|
|
|
|
|
|
"nickname": "旅行达人",
|
|
|
|
|
|
"avatar_url": "https://example.com/avatar2.jpg"
|
|
|
|
|
|
},
|
|
|
|
|
|
"created_at": "2024-01-15T11:00:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
"created_at": "2024-01-15T10:30:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
"pagination": {
|
|
|
|
|
|
"page": 1,
|
|
|
|
|
|
"size": 10,
|
|
|
|
|
|
"total": 8,
|
|
|
|
|
|
"pages": 1
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 11.2 发表评论
|
|
|
|
|
|
|
|
|
|
|
|
#### 接口信息
|
|
|
|
|
|
- **接口路径**:`POST /api/v1/comments`
|
|
|
|
|
|
- **接口描述**:发表评论
|
|
|
|
|
|
- **是否需要认证**:是
|
|
|
|
|
|
|
|
|
|
|
|
#### 请求参数
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"target_type": "travel",
|
|
|
|
|
|
"target_id": 1,
|
|
|
|
|
|
"content": "这个旅行计划很棒,期待参加!",
|
|
|
|
|
|
"parent_id": null
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
| 参数名 | 类型 | 必填 | 说明 |
|
|
|
|
|
|
|--------|------|------|------|
|
|
|
|
|
|
| target_type | string | 是 | 目标类型:travel,animal |
|
|
|
|
|
|
| target_id | integer | 是 | 目标ID |
|
|
|
|
|
|
| content | string | 是 | 评论内容 |
|
|
|
|
|
|
| parent_id | integer | 否 | 父评论ID(回复时填写) |
|
|
|
|
|
|
|
|
|
|
|
|
#### 响应示例
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 201,
|
|
|
|
|
|
"message": "评论成功",
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"id": 10,
|
|
|
|
|
|
"content": "这个旅行计划很棒,期待参加!",
|
|
|
|
|
|
"user": {
|
|
|
|
|
|
"id": 3,
|
|
|
|
|
|
"nickname": "我的昵称",
|
|
|
|
|
|
"avatar_url": "https://example.com/my_avatar.jpg"
|
|
|
|
|
|
},
|
|
|
|
|
|
"like_count": 0,
|
|
|
|
|
|
"created_at": "2024-01-15T10:30:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 12. 系统配置接口
|
|
|
|
|
|
|
|
|
|
|
|
### 12.1 获取小程序配置
|
|
|
|
|
|
|
|
|
|
|
|
#### 接口信息
|
|
|
|
|
|
- **接口路径**:`GET /api/v1/config/miniprogram`
|
|
|
|
|
|
- **接口描述**:获取小程序相关配置
|
|
|
|
|
|
- **是否需要认证**:否
|
|
|
|
|
|
|
|
|
|
|
|
#### 响应示例
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 200,
|
|
|
|
|
|
"message": "获取成功",
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"app_info": {
|
|
|
|
|
|
"name": "解班客",
|
|
|
|
|
|
"version": "1.0.0",
|
|
|
|
|
|
"description": "专业的旅行结伴和动物认领平台"
|
|
|
|
|
|
},
|
|
|
|
|
|
"features": {
|
|
|
|
|
|
"travel_enabled": true,
|
|
|
|
|
|
"adoption_enabled": true,
|
|
|
|
|
|
"payment_enabled": true,
|
|
|
|
|
|
"share_enabled": true
|
|
|
|
|
|
},
|
|
|
|
|
|
"upload": {
|
|
|
|
|
|
"max_image_size": 5242880,
|
|
|
|
|
|
"max_images_count": 9,
|
|
|
|
|
|
"allowed_image_types": ["jpg", "jpeg", "png"]
|
|
|
|
|
|
},
|
|
|
|
|
|
"payment": {
|
|
|
|
|
|
"min_amount": 0.01,
|
|
|
|
|
|
"max_amount": 50000.00,
|
|
|
|
|
|
"supported_methods": ["wechat"]
|
|
|
|
|
|
},
|
|
|
|
|
|
"contact": {
|
|
|
|
|
|
"customer_service": "kefu001",
|
|
|
|
|
|
"phone": "400-123-4567",
|
|
|
|
|
|
"email": "support@jiebanke.com"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 12.2 获取首页配置
|
|
|
|
|
|
|
|
|
|
|
|
#### 接口信息
|
|
|
|
|
|
- **接口路径**:`GET /api/v1/config/home`
|
|
|
|
|
|
- **接口描述**:获取首页配置信息
|
|
|
|
|
|
- **是否需要认证**:否
|
|
|
|
|
|
|
|
|
|
|
|
#### 响应示例
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"code": 200,
|
|
|
|
|
|
"message": "获取成功",
|
|
|
|
|
|
"data": {
|
|
|
|
|
|
"banners": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"id": 1,
|
|
|
|
|
|
"title": "春节特惠旅行",
|
|
|
|
|
|
"image_url": "https://example.com/banner1.jpg",
|
|
|
|
|
|
"link_type": "travel",
|
|
|
|
|
|
"link_value": "1",
|
|
|
|
|
|
"sort_order": 1
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
"featured_travels": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"id": 1,
|
|
|
|
|
|
"title": "云南大理古城深度游",
|
|
|
|
|
|
"cover_image": "https://example.com/travel_cover.jpg",
|
|
|
|
|
|
"destination": "云南大理"
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
"featured_animals": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"id": 1,
|
|
|
|
|
|
"name": "小花",
|
|
|
|
|
|
"species": "cat",
|
|
|
|
|
|
"cover_image": "https://example.com/cat_cover.jpg"
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
"announcements": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"id": 1,
|
|
|
|
|
|
"title": "平台升级公告",
|
|
|
|
|
|
"content": "为了提供更好的服务...",
|
|
|
|
|
|
"created_at": "2024-01-15T10:00:00Z"
|
|
|
|
|
|
}
|
|
|
|
|
|
]
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 13. 错误码说明
|
|
|
|
|
|
|
|
|
|
|
|
### 13.1 通用错误码
|
|
|
|
|
|
|
|
|
|
|
|
| 错误码 | HTTP状态码 | 说明 |
|
|
|
|
|
|
|--------|------------|------|
|
|
|
|
|
|
| 200 | 200 | 请求成功 |
|
|
|
|
|
|
| 400 | 400 | 请求参数错误 |
|
|
|
|
|
|
| 401 | 401 | 未授权,需要登录 |
|
|
|
|
|
|
| 403 | 403 | 权限不足 |
|
|
|
|
|
|
| 404 | 404 | 资源不存在 |
|
|
|
|
|
|
| 422 | 422 | 业务逻辑错误 |
|
|
|
|
|
|
| 429 | 429 | 请求频率限制 |
|
|
|
|
|
|
| 500 | 500 | 服务器内部错误 |
|
|
|
|
|
|
|
|
|
|
|
|
### 13.2 业务错误码
|
|
|
|
|
|
|
|
|
|
|
|
| 错误码 | 说明 |
|
|
|
|
|
|
|--------|------|
|
|
|
|
|
|
| 10001 | 微信授权失败 |
|
|
|
|
|
|
| 10002 | 用户信息不完整 |
|
|
|
|
|
|
| 10003 | 手机号格式错误 |
|
|
|
|
|
|
| 10004 | 用户不存在 |
|
|
|
|
|
|
| 20001 | 旅行活动不存在 |
|
|
|
|
|
|
| 20002 | 旅行活动已满员 |
|
|
|
|
|
|
| 20003 | 旅行活动已结束 |
|
|
|
|
|
|
| 20004 | 重复申请旅行活动 |
|
|
|
|
|
|
| 20005 | 不能申请自己创建的活动 |
|
|
|
|
|
|
| 30001 | 动物不存在 |
|
|
|
|
|
|
| 30002 | 动物已被认领 |
|
|
|
|
|
|
| 30003 | 重复申请认领 |
|
|
|
|
|
|
| 30004 | 认领申请不存在 |
|
|
|
|
|
|
| 40001 | 订单不存在 |
|
|
|
|
|
|
| 40002 | 订单已支付 |
|
|
|
|
|
|
| 40003 | 订单已过期 |
|
|
|
|
|
|
| 40004 | 支付失败 |
|
|
|
|
|
|
| 40005 | 退款失败 |
|
|
|
|
|
|
| 50001 | 文件上传失败 |
|
|
|
|
|
|
| 50002 | 文件格式不支持 |
|
|
|
|
|
|
| 50003 | 文件大小超限 |
|
|
|
|
|
|
| 60001 | 评论不存在 |
|
|
|
|
|
|
| 60002 | 不能删除他人评论 |
|
|
|
|
|
|
|
|
|
|
|
|
## 14. 接口测试
|
|
|
|
|
|
|
|
|
|
|
|
### 14.1 测试环境
|
|
|
|
|
|
|
|
|
|
|
|
- **测试域名**:`https://api-test.jiebanke.com`
|
|
|
|
|
|
- **文档地址**:`https://api-test.jiebanke.com/docs`
|
|
|
|
|
|
- **测试账号**:
|
|
|
|
|
|
- 测试用户1:openid_test_001
|
|
|
|
|
|
- 测试用户2:openid_test_002
|
|
|
|
|
|
|
|
|
|
|
|
### 14.2 测试工具
|
|
|
|
|
|
|
|
|
|
|
|
推荐使用以下工具进行接口测试:
|
|
|
|
|
|
- **Postman**:图形化接口测试工具
|
|
|
|
|
|
- **curl**:命令行测试工具
|
|
|
|
|
|
- **微信开发者工具**:小程序调试工具
|
|
|
|
|
|
|
|
|
|
|
|
### 14.3 测试示例
|
|
|
|
|
|
|
|
|
|
|
|
#### 14.3.1 登录测试
|
|
|
|
|
|
```bash
|
|
|
|
|
|
curl -X POST https://api-test.jiebanke.com/api/v1/auth/wechat/login \
|
|
|
|
|
|
-H "Content-Type: application/json" \
|
|
|
|
|
|
-d '{
|
|
|
|
|
|
"code": "test_wx_code_123456"
|
|
|
|
|
|
}'
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### 14.3.2 获取旅行列表测试
|
|
|
|
|
|
```bash
|
|
|
|
|
|
curl -X GET "https://api-test.jiebanke.com/api/v1/travels?page=1&size=10" \
|
|
|
|
|
|
-H "Accept: application/json"
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### 14.3.3 创建旅行活动测试
|
|
|
|
|
|
```bash
|
|
|
|
|
|
curl -X POST https://api-test.jiebanke.com/api/v1/travels \
|
|
|
|
|
|
-H "Content-Type: application/json" \
|
|
|
|
|
|
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
|
|
|
|
|
|
-d '{
|
|
|
|
|
|
"title": "测试旅行活动",
|
|
|
|
|
|
"description": "这是一个测试活动",
|
|
|
|
|
|
"destination": "北京",
|
|
|
|
|
|
"start_date": "2024-03-01",
|
|
|
|
|
|
"end_date": "2024-03-03",
|
|
|
|
|
|
"max_participants": 5,
|
|
|
|
|
|
"budget_min": 1000.00,
|
|
|
|
|
|
"budget_max": 2000.00,
|
|
|
|
|
|
"travel_type": "leisure"
|
|
|
|
|
|
}'
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 14.4 Mock数据
|
|
|
|
|
|
|
|
|
|
|
|
为了方便前端开发,提供以下Mock数据接口:
|
|
|
|
|
|
|
|
|
|
|
|
- **Mock服务地址**:`https://mock.jiebanke.com`
|
|
|
|
|
|
- **数据更新频率**:每日更新
|
|
|
|
|
|
- **支持接口**:所有小程序端接口
|
|
|
|
|
|
|
|
|
|
|
|
## 15. 版本更新记录
|
|
|
|
|
|
|
|
|
|
|
|
### v1.0.0 (2024-01-15)
|
|
|
|
|
|
- 初始版本发布
|
|
|
|
|
|
- 完成用户认证、旅行结伴、动物认领、支付系统等核心功能接口
|
|
|
|
|
|
- 支持微信小程序登录和支付
|
|
|
|
|
|
- 实现文件上传、消息通知等辅助功能
|
|
|
|
|
|
|
|
|
|
|
|
### 后续版本规划
|
|
|
|
|
|
|
|
|
|
|
|
#### v1.1.0 (计划2024-02-15)
|
|
|
|
|
|
- 增加社交功能接口(关注、私信)
|
|
|
|
|
|
- 优化搜索算法和推荐系统
|
|
|
|
|
|
- 增加用户等级和积分系统
|
|
|
|
|
|
|
|
|
|
|
|
#### v1.2.0 (计划2024-03-15)
|
|
|
|
|
|
- 增加直播功能接口
|
|
|
|
|
|
- 支持多语言国际化
|
|
|
|
|
|
- 增加AI智能推荐接口
|
|
|
|
|
|
|
|
|
|
|
|
## 16. 总结
|
|
|
|
|
|
|
|
|
|
|
|
本文档详细描述了解班客小程序端的所有API接口设计,涵盖了:
|
|
|
|
|
|
|
|
|
|
|
|
### 16.1 核心功能
|
|
|
|
|
|
- **用户系统**:微信登录、用户信息管理
|
|
|
|
|
|
- **旅行结伴**:活动发布、申请、管理
|
|
|
|
|
|
- **动物认领**:动物展示、认领申请、动态更新
|
|
|
|
|
|
- **支付系统**:订单创建、微信支付集成
|
|
|
|
|
|
- **消息通知**:系统消息、业务通知
|
|
|
|
|
|
|
|
|
|
|
|
### 16.2 辅助功能
|
|
|
|
|
|
- **文件上传**:图片上传、批量处理
|
|
|
|
|
|
- **搜索功能**:综合搜索、智能建议
|
|
|
|
|
|
- **社交功能**:点赞、收藏、评论
|
|
|
|
|
|
- **系统配置**:动态配置、首页内容
|
|
|
|
|
|
|
|
|
|
|
|
### 16.3 技术特点
|
|
|
|
|
|
- **RESTful设计**:遵循REST架构原则
|
|
|
|
|
|
- **统一响应格式**:标准化的API响应
|
|
|
|
|
|
- **微信生态集成**:深度集成微信小程序能力
|
|
|
|
|
|
- **安全认证**:JWT Token + 微信授权
|
|
|
|
|
|
- **性能优化**:分页、缓存、CDN加速
|
|
|
|
|
|
|
|
|
|
|
|
### 16.4 开发支持
|
|
|
|
|
|
- **完整的错误码体系**:便于问题定位和处理
|
|
|
|
|
|
- **详细的接口文档**:包含请求参数、响应示例
|
|
|
|
|
|
- **测试环境支持**:提供测试环境和Mock数据
|
|
|
|
|
|
- **版本管理**:清晰的版本规划和更新记录
|
|
|
|
|
|
|
|
|
|
|
|
本接口设计文档将作为小程序前端开发的重要参考,确保前后端协作的高效进行。
|