Files
ai_dianshang/server/API_DOCUMENTATION.md
2025-11-28 15:18:10 +08:00

950 lines
15 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

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.

# 后端API接口文档
## 1. 接口概述
### 1.1 基本信息
- **项目名称**: vizee电商后端服务
- **技术栈**: Go + Gin + GORM + MySQL
- **API版本**: v1
- **Base URL**:
- 开发环境: `http://localhost:8080/api/v1`
- 测试环境: `配置中`
- 生产环境: `配置中`
### 1.2 通用说明
- **数据格式**: JSON
- **字符编码**: UTF-8
- **认证方式**: JWT Token
- **时间格式**: ISO 8601 (YYYY-MM-DDTHH:mm:ss.SSSZ)
### 1.3 通用响应格式
**成功响应**:
```json
{
"code": 200,
"message": "success",
"data": {}
}
```
**错误响应**:
```json
{
"code": 400,
"message": "错误信息描述",
"data": null
}
```
### 1.4 状态码说明
| 状态码 | 说明 |
|--------|------|
| 200 | 成功 |
| 400 | 请求参数错误 |
| 401 | 未授权,需要登录 |
| 403 | 禁止访问 |
| 404 | 资源不存在 |
| 500 | 服务器内部错误 |
---
## 2. 认证接口
### 2.1 用户登录
**接口地址**: `POST /auth/login`
**请求参数**:
```json
{
"email": "user@example.com",
"password": "password123"
}
```
**响应数据**:
```json
{
"code": 200,
"message": "登录成功",
"data": {
"token": "eyJhbGciOiJIUzI1NiIs...",
"user": {
"id": 1,
"email": "user@example.com",
"nickname": "用户昵称",
"avatar": "头像URL",
"created_at": "2024-01-01T00:00:00Z"
}
}
}
```
### 2.2 用户注册
**接口地址**: `POST /auth/register`
**请求参数**:
```json
{
"email": "user@example.com",
"password": "password123",
"nickname": "用户昵称"
}
```
**响应数据**:
```json
{
"code": 200,
"message": "注册成功",
"data": {
"user_id": 1
}
}
```
### 2.3 微信登录
**接口地址**: `POST /auth/wechat/login`
**请求参数**:
```json
{
"code": "微信登录code"
}
```
**响应数据**:
```json
{
"code": 200,
"message": "登录成功",
"data": {
"token": "eyJhbGciOiJIUzI1NiIs...",
"user": {
"id": 1,
"openid": "微信openid",
"nickname": "微信昵称",
"avatar": "微信头像"
}
}
}
```
---
## 3. 用户接口
### 3.1 获取用户信息
**接口地址**: `GET /users/profile`
**请求头**:
```
Authorization: Bearer {token}
```
**响应数据**:
```json
{
"code": 200,
"message": "success",
"data": {
"id": 1,
"email": "user@example.com",
"nickname": "用户昵称",
"avatar": "头像URL",
"phone": "手机号",
"gender": 1,
"points": 100,
"created_at": "2024-01-01T00:00:00Z"
}
}
```
### 3.2 更新用户信息
**接口地址**: `PUT /users/profile`
**请求头**:
```
Authorization: Bearer {token}
```
**请求参数**:
```json
{
"nickname": "新昵称",
"avatar": "新头像URL",
"phone": "手机号",
"gender": 1
}
```
**响应数据**:
```json
{
"code": 200,
"message": "更新成功",
"data": null
}
```
### 3.3 获取用户地址列表
**接口地址**: `GET /users/addresses`
**请求头**:
```
Authorization: Bearer {token}
```
**响应数据**:
```json
{
"code": 200,
"message": "success",
"data": [
{
"id": 1,
"name": "收货人",
"phone": "13800138000",
"province": "广东省",
"city": "深圳市",
"district": "南山区",
"detail": "详细地址",
"is_default": true
}
]
}
```
### 3.4 添加收货地址
**接口地址**: `POST /users/addresses`
**请求参数**:
```json
{
"name": "收货人",
"phone": "13800138000",
"province": "广东省",
"city": "深圳市",
"district": "南山区",
"detail": "详细地址",
"is_default": false
}
```
---
## 4. 商品接口
### 4.1 获取商品列表
**接口地址**: `GET /products`
**请求参数**:
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| page | int | 否 | 页码默认1 |
| page_size | int | 否 | 每页数量默认20 |
| category_id | int | 否 | 分类ID |
| keyword | string | 否 | 搜索关键词 |
| sort | string | 否 | 排序方式price_asc/price_desc/sales/new |
| min_price | float | 否 | 最低价格 |
| max_price | float | 否 | 最高价格 |
**响应数据**:
```json
{
"code": 200,
"message": "success",
"data": {
"list": [
{
"id": 1,
"name": "商品名称",
"cover": "封面图URL",
"price": 99.00,
"original_price": 199.00,
"sales": 1000,
"stock": 500,
"rating": 4.8,
"comment_count": 100
}
],
"pagination": {
"page": 1,
"page_size": 20,
"total": 100
}
}
}
```
### 4.2 获取商品详情
**接口地址**: `GET /products/:id`
**响应数据**:
```json
{
"code": 200,
"message": "success",
"data": {
"id": 1,
"name": "商品名称",
"cover": "封面图URL",
"images": ["图片1", "图片2"],
"price": 99.00,
"original_price": 199.00,
"sales": 1000,
"stock": 500,
"rating": 4.8,
"comment_count": 100,
"description": "商品描述",
"detail": "商品详情HTML",
"category": {
"id": 1,
"name": "分类名称"
},
"skus": [
{
"id": 1,
"name": "规格名称",
"price": 99.00,
"stock": 100,
"image": "规格图片"
}
],
"specs": [
{
"name": "颜色",
"values": ["红色", "蓝色"]
}
]
}
}
```
### 4.3 获取商品评价
**接口地址**: `GET /products/:id/comments`
**请求参数**:
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| page | int | 否 | 页码 |
| page_size | int | 否 | 每页数量 |
| rating | int | 否 | 评分筛选1-5 |
| has_image | bool | 否 | 是否有图 |
**响应数据**:
```json
{
"code": 200,
"message": "success",
"data": {
"stats": {
"total": 100,
"rating_5": 80,
"rating_4": 15,
"rating_3": 3,
"rating_2": 1,
"rating_1": 1,
"avg_rating": 4.8
},
"list": [
{
"id": 1,
"user": {
"nickname": "用户昵称",
"avatar": "头像URL"
},
"rating": 5,
"content": "评价内容",
"images": ["图片1", "图片2"],
"created_at": "2024-01-01T00:00:00Z"
}
],
"pagination": {
"page": 1,
"page_size": 10,
"total": 100
}
}
}
```
---
## 5. 分类接口
### 5.1 获取分类列表
**接口地址**: `GET /categories`
**响应数据**:
```json
{
"code": 200,
"message": "success",
"data": [
{
"id": 1,
"name": "艺术手工",
"icon": "图标URL",
"sort": 1,
"children": [
{
"id": 11,
"name": "陶艺",
"parent_id": 1
}
]
}
]
}
```
---
## 6. 购物车接口
### 6.1 获取购物车
**接口地址**: `GET /cart`
**请求头**:
```
Authorization: Bearer {token}
```
**响应数据**:
```json
{
"code": 200,
"message": "success",
"data": {
"items": [
{
"id": 1,
"product_id": 1,
"sku_id": 1,
"product_name": "商品名称",
"sku_name": "规格名称",
"image": "图片URL",
"price": 99.00,
"quantity": 2,
"stock": 100,
"selected": true
}
],
"total_price": 198.00,
"total_count": 2
}
}
```
### 6.2 添加到购物车
**接口地址**: `POST /cart`
**请求参数**:
```json
{
"product_id": 1,
"sku_id": 1,
"quantity": 1
}
```
### 6.3 更新购物车数量
**接口地址**: `PUT /cart/:id`
**请求参数**:
```json
{
"quantity": 2
}
```
### 6.4 删除购物车商品
**接口地址**: `DELETE /cart/:id`
### 6.5 清空购物车
**接口地址**: `DELETE /cart/clear`
---
## 7. 订单接口
### 7.1 创建订单
**接口地址**: `POST /orders`
**请求参数**:
```json
{
"address_id": 1,
"items": [
{
"product_id": 1,
"sku_id": 1,
"quantity": 2
}
],
"coupon_id": 1,
"remark": "备注信息"
}
```
**响应数据**:
```json
{
"code": 200,
"message": "下单成功",
"data": {
"order_id": "ORD20240101123456",
"total_amount": 198.00,
"pay_amount": 188.00
}
}
```
### 7.2 获取订单列表
**接口地址**: `GET /orders`
**请求参数**:
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| page | int | 否 | 页码 |
| page_size | int | 否 | 每页数量 |
| status | string | 否 | 订单状态pending/paid/shipped/completed/cancelled |
**响应数据**:
```json
{
"code": 200,
"message": "success",
"data": {
"list": [
{
"id": "ORD20240101123456",
"status": "paid",
"status_text": "已支付",
"total_amount": 198.00,
"pay_amount": 188.00,
"items": [
{
"product_name": "商品名称",
"sku_name": "规格名称",
"image": "图片URL",
"price": 99.00,
"quantity": 2
}
],
"created_at": "2024-01-01T00:00:00Z"
}
],
"pagination": {
"page": 1,
"page_size": 10,
"total": 50
}
}
}
```
### 7.3 获取订单详情
**接口地址**: `GET /orders/:id`
**响应数据**:
```json
{
"code": 200,
"message": "success",
"data": {
"id": "ORD20240101123456",
"status": "paid",
"status_text": "已支付",
"total_amount": 198.00,
"pay_amount": 188.00,
"shipping_fee": 10.00,
"discount_amount": 20.00,
"address": {
"name": "收货人",
"phone": "13800138000",
"province": "广东省",
"city": "深圳市",
"district": "南山区",
"detail": "详细地址"
},
"items": [
{
"product_name": "商品名称",
"sku_name": "规格名称",
"image": "图片URL",
"price": 99.00,
"quantity": 2
}
],
"created_at": "2024-01-01T00:00:00Z",
"paid_at": "2024-01-01T00:05:00Z"
}
}
```
### 7.4 取消订单
**接口地址**: `POST /orders/:id/cancel`
**请求参数**:
```json
{
"reason": "取消原因"
}
```
### 7.5 确认收货
**接口地址**: `POST /orders/:id/confirm`
---
## 8. 支付接口
### 8.1 创建支付
**接口地址**: `POST /pay/create`
**请求参数**:
```json
{
"order_id": "ORD20240101123456",
"pay_type": "wechat"
}
```
**响应数据**:
```json
{
"code": 200,
"message": "success",
"data": {
"pay_params": {
"timeStamp": "1234567890",
"nonceStr": "random_string",
"package": "prepay_id=xxx",
"signType": "MD5",
"paySign": "signature"
}
}
}
```
### 8.2 支付回调
**接口地址**: `POST /pay/callback`
**说明**: 由支付平台调用,处理支付结果
---
## 9. 退款接口
### 9.1 申请退款
**接口地址**: `POST /refunds`
**请求参数**:
```json
{
"order_id": "ORD20240101123456",
"reason": "退款原因",
"description": "详细说明",
"images": ["图片1", "图片2"]
}
```
### 9.2 获取退款列表
**接口地址**: `GET /refunds`
**响应数据**:
```json
{
"code": 200,
"message": "success",
"data": {
"list": [
{
"id": 1,
"order_id": "ORD20240101123456",
"status": "pending",
"status_text": "待审核",
"amount": 188.00,
"reason": "退款原因",
"created_at": "2024-01-01T00:00:00Z"
}
]
}
}
```
### 9.3 取消退款申请
**接口地址**: `POST /refunds/:id/cancel`
---
## 10. Banner接口
### 10.1 获取Banner列表
**接口地址**: `GET /banners`
**请求参数**:
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| position | string | 否 | 位置home/category |
**响应数据**:
```json
{
"code": 200,
"message": "success",
"data": [
{
"id": 1,
"title": "Banner标题",
"image": "图片URL",
"link": "跳转链接",
"sort": 1
}
]
}
```
---
## 11. 优惠券接口
### 11.1 获取优惠券列表
**接口地址**: `GET /coupons`
**响应数据**:
```json
{
"code": 200,
"message": "success",
"data": [
{
"id": 1,
"name": "优惠券名称",
"type": "discount",
"discount": 0.9,
"min_amount": 100.00,
"max_discount": 50.00,
"start_time": "2024-01-01T00:00:00Z",
"end_time": "2024-12-31T23:59:59Z",
"total_count": 1000,
"received_count": 500,
"is_received": false
}
]
}
```
### 11.2 领取优惠券
**接口地址**: `POST /coupons/:id/receive`
### 11.3 获取我的优惠券
**接口地址**: `GET /coupons/my`
**请求参数**:
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| status | string | 否 | unused/used/expired |
---
## 12. 文件上传接口
### 12.1 上传图片
**接口地址**: `POST /upload/image`
**请求头**:
```
Content-Type: multipart/form-data
Authorization: Bearer {token}
```
**请求参数**:
- file: 图片文件支持jpg、png、gif最大5MB
**响应数据**:
```json
{
"code": 200,
"message": "上传成功",
"data": {
"url": "https://cdn.example.com/images/xxx.jpg"
}
}
```
**说明**:
- 图片自动压缩优化
- 自动生成缩略图
- 设置正确的Content-Type和Content-Disposition
- 返回OSS访问URL
---
## 13. 统计接口(管理端)
### 13.1 获取销售统计
**接口地址**: `GET /admin/stats/sales`
**请求头**:
```
Authorization: Bearer {admin_token}
```
**请求参数**:
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| start_date | string | 是 | 开始日期 |
| end_date | string | 是 | 结束日期 |
**响应数据**:
```json
{
"code": 200,
"message": "success",
"data": {
"total_amount": 100000.00,
"total_orders": 1000,
"avg_order_amount": 100.00,
"daily_stats": [
{
"date": "2024-01-01",
"amount": 1000.00,
"orders": 10
}
]
}
}
```
---
## 14. 错误码说明
| 错误码 | 说明 |
|--------|------|
| 10001 | 参数错误 |
| 10002 | 用户不存在 |
| 10003 | 密码错误 |
| 10004 | Token无效 |
| 10005 | Token过期 |
| 20001 | 商品不存在 |
| 20002 | 库存不足 |
| 20003 | 商品已下架 |
| 30001 | 订单不存在 |
| 30002 | 订单状态错误 |
| 30003 | 订单已取消 |
| 40001 | 支付失败 |
| 40002 | 退款失败 |
| 50001 | 文件上传失败 |
| 50002 | 文件类型不支持 |
| 50003 | 文件大小超限 |
---
## 15. 开发调试
### 15.1 本地环境配置
**配置文件**: `server/configs/config.yaml`
```yaml
server:
port: 8080
mode: debug
database:
host: localhost
port: 3306
username: root
password: password
database: dianshang
jwt:
secret: your-secret-key
expire: 7200
oss:
endpoint: oss-cn-shenzhen.aliyuncs.com
access_key_id: your-access-key-id
access_key_secret: your-access-key-secret
bucket: your-bucket-name
```
### 15.2 API调试工具
- Postman
- Apifox
- Swagger UI (开发中)
### 15.3 测试账号
- **普通用户**: test@example.com / 123456
- **管理员**: admin@example.com / admin123
---
## 16. 注意事项
### 16.1 请求限制
- 同一IP每分钟最多60次请求
- 文件上传大小限制5MB
- 批量操作最多100条
### 16.2 数据安全
- 敏感信息传输使用HTTPS
- 密码使用bcrypt加密
- Token有效期2小时
- 软删除数据需显式过滤
### 16.3 性能优化
- 列表接口支持分页
- 使用Redis缓存热点数据
- 数据库连接池优化
- 图片CDN加速
### 16.4 数据库规范
- GORM预加载需显式过滤软删除数据
- SKU价格优先级SKU价格 > 商品价格
- 订单数据按用户隔离存储
- 所有时间字段使用UTC时间
---
**文档版本**: v1.0
**创建日期**: 2024-11-19
**最后更新**: 2024-11-19
**维护团队**: 后端开发组