886 lines
16 KiB
Markdown
886 lines
16 KiB
Markdown
# 外卖SaaS系统 - API接口设计
|
||
|
||
## 1. API设计规范
|
||
|
||
### 1.1 RESTful规范
|
||
- 使用标准HTTP方法:GET、POST、PUT、DELETE、PATCH
|
||
- URL使用名词复数形式,如:`/api/orders`
|
||
- 使用HTTP状态码表示请求结果
|
||
- 版本控制:`/api/v1/orders`
|
||
|
||
### 1.2 请求规范
|
||
- **Content-Type**:`application/json`
|
||
- **认证方式**:Bearer Token (JWT)
|
||
- **租户识别**:通过Header `X-Tenant-Id` 或从Token中解析
|
||
|
||
### 1.3 响应规范
|
||
```json
|
||
{
|
||
"success": true,
|
||
"code": 200,
|
||
"message": "操作成功",
|
||
"data": {},
|
||
"timestamp": "2024-01-01T12:00:00Z"
|
||
}
|
||
```
|
||
|
||
### 1.4 错误响应
|
||
```json
|
||
{
|
||
"success": false,
|
||
"code": 400,
|
||
"message": "参数错误",
|
||
"errors": [
|
||
{
|
||
"field": "phone",
|
||
"message": "手机号格式不正确"
|
||
}
|
||
],
|
||
"timestamp": "2024-01-01T12:00:00Z"
|
||
}
|
||
```
|
||
|
||
### 1.5 HTTP状态码
|
||
- **200 OK**:请求成功
|
||
- **201 Created**:创建成功
|
||
- **204 No Content**:删除成功
|
||
- **400 Bad Request**:参数错误
|
||
- **401 Unauthorized**:未认证
|
||
- **403 Forbidden**:无权限
|
||
- **404 Not Found**:资源不存在
|
||
- **409 Conflict**:资源冲突
|
||
- **422 Unprocessable Entity**:业务逻辑错误
|
||
- **500 Internal Server Error**:服务器错误
|
||
|
||
### 1.6 分页规范
|
||
```json
|
||
// 请求参数
|
||
{
|
||
"pageIndex": 1,
|
||
"pageSize": 20,
|
||
"sortBy": "createdAt",
|
||
"sortOrder": "desc"
|
||
}
|
||
|
||
// 响应格式
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"items": [],
|
||
"totalCount": 100,
|
||
"pageIndex": 1,
|
||
"pageSize": 20,
|
||
"totalPages": 5
|
||
}
|
||
}
|
||
```
|
||
|
||
## 2. 认证授权接口
|
||
|
||
### 2.1 用户登录
|
||
```http
|
||
POST /api/v1/auth/login
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"phone": "13800138000",
|
||
"password": "password123",
|
||
"loginType": "customer" // customer, merchant, system
|
||
}
|
||
|
||
Response:
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"accessToken": "eyJhbGciOiJIUzI1NiIs...",
|
||
"refreshToken": "eyJhbGciOiJIUzI1NiIs...",
|
||
"expiresIn": 7200,
|
||
"tokenType": "Bearer",
|
||
"userInfo": {
|
||
"id": "uuid",
|
||
"phone": "13800138000",
|
||
"nickname": "张三",
|
||
"avatar": "https://..."
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
### 2.2 刷新Token
|
||
```http
|
||
POST /api/v1/auth/refresh
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"refreshToken": "eyJhbGciOiJIUzI1NiIs..."
|
||
}
|
||
|
||
Response:
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"accessToken": "eyJhbGciOiJIUzI1NiIs...",
|
||
"expiresIn": 7200
|
||
}
|
||
}
|
||
```
|
||
|
||
### 2.3 用户注册
|
||
```http
|
||
POST /api/v1/auth/register
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"phone": "13800138000",
|
||
"password": "password123",
|
||
"verificationCode": "123456",
|
||
"nickname": "张三"
|
||
}
|
||
```
|
||
|
||
### 2.4 发送验证码
|
||
```http
|
||
POST /api/v1/auth/send-code
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"phone": "13800138000",
|
||
"type": "register" // register, login, reset_password
|
||
}
|
||
```
|
||
|
||
## 3. 商家管理接口
|
||
|
||
### 3.1 获取商家列表
|
||
```http
|
||
GET /api/v1/merchants?pageIndex=1&pageSize=20&keyword=&status=1
|
||
Authorization: Bearer {token}
|
||
|
||
Response:
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"items": [
|
||
{
|
||
"id": "uuid",
|
||
"name": "美味餐厅",
|
||
"logo": "https://...",
|
||
"rating": 4.5,
|
||
"totalSales": 1000,
|
||
"status": 1,
|
||
"createdAt": "2024-01-01T12:00:00Z"
|
||
}
|
||
],
|
||
"totalCount": 50,
|
||
"pageIndex": 1,
|
||
"pageSize": 20
|
||
}
|
||
}
|
||
```
|
||
|
||
### 3.2 获取商家详情
|
||
```http
|
||
GET /api/v1/merchants/{id}
|
||
Authorization: Bearer {token}
|
||
|
||
Response:
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": "uuid",
|
||
"name": "美味餐厅",
|
||
"logo": "https://...",
|
||
"description": "专注美食20年",
|
||
"contactPhone": "400-123-4567",
|
||
"rating": 4.5,
|
||
"totalSales": 1000,
|
||
"status": 1,
|
||
"stores": [
|
||
{
|
||
"id": "uuid",
|
||
"name": "总店",
|
||
"address": "北京市朝阳区...",
|
||
"phone": "010-12345678"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
### 3.3 创建商家
|
||
```http
|
||
POST /api/v1/merchants
|
||
Authorization: Bearer {token}
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"name": "美味餐厅",
|
||
"logo": "https://...",
|
||
"description": "专注美食20年",
|
||
"contactPhone": "400-123-4567",
|
||
"contactPerson": "张三",
|
||
"businessLicense": "91110000..."
|
||
}
|
||
```
|
||
|
||
### 3.4 更新商家信息
|
||
```http
|
||
PUT /api/v1/merchants/{id}
|
||
Authorization: Bearer {token}
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"name": "美味餐厅",
|
||
"logo": "https://...",
|
||
"description": "专注美食20年"
|
||
}
|
||
```
|
||
|
||
### 3.5 删除商家
|
||
```http
|
||
DELETE /api/v1/merchants/{id}
|
||
Authorization: Bearer {token}
|
||
```
|
||
|
||
## 4. 菜品管理接口
|
||
|
||
### 4.1 获取菜品列表
|
||
```http
|
||
GET /api/v1/dishes?merchantId={merchantId}&categoryId={categoryId}&keyword=&status=1&pageIndex=1&pageSize=20
|
||
Authorization: Bearer {token}
|
||
|
||
Response:
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"items": [
|
||
{
|
||
"id": "uuid",
|
||
"name": "宫保鸡丁",
|
||
"description": "经典川菜",
|
||
"image": "https://...",
|
||
"price": 38.00,
|
||
"originalPrice": 48.00,
|
||
"salesCount": 500,
|
||
"rating": 4.8,
|
||
"status": 1,
|
||
"tags": ["热销", "招牌菜"]
|
||
}
|
||
],
|
||
"totalCount": 100
|
||
}
|
||
}
|
||
```
|
||
|
||
### 4.2 获取菜品详情
|
||
```http
|
||
GET /api/v1/dishes/{id}
|
||
Authorization: Bearer {token}
|
||
|
||
Response:
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": "uuid",
|
||
"name": "宫保鸡丁",
|
||
"description": "经典川菜,选用优质鸡肉...",
|
||
"image": "https://...",
|
||
"price": 38.00,
|
||
"originalPrice": 48.00,
|
||
"unit": "份",
|
||
"stock": 100,
|
||
"salesCount": 500,
|
||
"rating": 4.8,
|
||
"status": 1,
|
||
"tags": ["热销", "招牌菜"],
|
||
"specs": [
|
||
{
|
||
"id": "uuid",
|
||
"name": "大份",
|
||
"price": 48.00,
|
||
"stock": 50
|
||
},
|
||
{
|
||
"id": "uuid",
|
||
"name": "小份",
|
||
"price": 28.00,
|
||
"stock": 50
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
### 4.3 创建菜品
|
||
```http
|
||
POST /api/v1/dishes
|
||
Authorization: Bearer {token}
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"merchantId": "uuid",
|
||
"categoryId": "uuid",
|
||
"name": "宫保鸡丁",
|
||
"description": "经典川菜",
|
||
"image": "https://...",
|
||
"price": 38.00,
|
||
"originalPrice": 48.00,
|
||
"unit": "份",
|
||
"stock": 100,
|
||
"tags": ["热销", "招牌菜"],
|
||
"specs": [
|
||
{
|
||
"name": "大份",
|
||
"price": 48.00,
|
||
"stock": 50
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
### 4.4 更新菜品
|
||
```http
|
||
PUT /api/v1/dishes/{id}
|
||
Authorization: Bearer {token}
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"name": "宫保鸡丁",
|
||
"price": 38.00,
|
||
"stock": 100,
|
||
"status": 1
|
||
}
|
||
```
|
||
|
||
### 4.5 批量上下架
|
||
```http
|
||
PATCH /api/v1/dishes/batch-status
|
||
Authorization: Bearer {token}
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"dishIds": ["uuid1", "uuid2"],
|
||
"status": 1 // 1:上架 2:下架
|
||
}
|
||
```
|
||
|
||
## 5. 订单管理接口
|
||
|
||
### 5.1 创建订单
|
||
```http
|
||
POST /api/v1/orders
|
||
Authorization: Bearer {token}
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"merchantId": "uuid",
|
||
"storeId": "uuid",
|
||
"items": [
|
||
{
|
||
"dishId": "uuid",
|
||
"specId": "uuid",
|
||
"quantity": 2,
|
||
"price": 38.00
|
||
}
|
||
],
|
||
"deliveryAddress": {
|
||
"contactName": "张三",
|
||
"contactPhone": "13800138000",
|
||
"address": "北京市朝阳区...",
|
||
"latitude": 39.9042,
|
||
"longitude": 116.4074
|
||
},
|
||
"remark": "少辣",
|
||
"couponId": "uuid"
|
||
}
|
||
|
||
Response:
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"orderId": "uuid",
|
||
"orderNo": "202401010001",
|
||
"totalAmount": 76.00,
|
||
"deliveryFee": 5.00,
|
||
"discountAmount": 10.00,
|
||
"actualAmount": 71.00,
|
||
"paymentInfo": {
|
||
"paymentNo": "PAY202401010001",
|
||
"qrCode": "https://..." // 支付二维码
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
### 5.2 获取订单列表
|
||
```http
|
||
GET /api/v1/orders?status=&startDate=&endDate=&pageIndex=1&pageSize=20
|
||
Authorization: Bearer {token}
|
||
|
||
Response:
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"items": [
|
||
{
|
||
"id": "uuid",
|
||
"orderNo": "202401010001",
|
||
"merchantName": "美味餐厅",
|
||
"totalAmount": 76.00,
|
||
"actualAmount": 71.00,
|
||
"status": 2,
|
||
"statusText": "待接单",
|
||
"createdAt": "2024-01-01T12:00:00Z",
|
||
"items": [
|
||
{
|
||
"dishName": "宫保鸡丁",
|
||
"specName": "大份",
|
||
"quantity": 2,
|
||
"price": 38.00
|
||
}
|
||
]
|
||
}
|
||
],
|
||
"totalCount": 50
|
||
}
|
||
}
|
||
```
|
||
|
||
### 5.3 获取订单详情
|
||
```http
|
||
GET /api/v1/orders/{id}
|
||
Authorization: Bearer {token}
|
||
|
||
Response:
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": "uuid",
|
||
"orderNo": "202401010001",
|
||
"merchant": {
|
||
"id": "uuid",
|
||
"name": "美味餐厅",
|
||
"phone": "400-123-4567"
|
||
},
|
||
"items": [
|
||
{
|
||
"dishName": "宫保鸡丁",
|
||
"dishImage": "https://...",
|
||
"specName": "大份",
|
||
"quantity": 2,
|
||
"price": 38.00,
|
||
"amount": 76.00
|
||
}
|
||
],
|
||
"deliveryAddress": {
|
||
"contactName": "张三",
|
||
"contactPhone": "13800138000",
|
||
"address": "北京市朝阳区..."
|
||
},
|
||
"dishAmount": 76.00,
|
||
"deliveryFee": 5.00,
|
||
"packageFee": 2.00,
|
||
"discountAmount": 10.00,
|
||
"totalAmount": 83.00,
|
||
"actualAmount": 73.00,
|
||
"status": 2,
|
||
"statusText": "待接单",
|
||
"paymentStatus": 1,
|
||
"paymentMethod": "wechat",
|
||
"estimatedDeliveryTime": "2024-01-01T13:00:00Z",
|
||
"createdAt": "2024-01-01T12:00:00Z",
|
||
"paidAt": "2024-01-01T12:05:00Z",
|
||
"remark": "少辣",
|
||
"timeline": [
|
||
{
|
||
"status": "created",
|
||
"statusText": "订单创建",
|
||
"time": "2024-01-01T12:00:00Z"
|
||
},
|
||
{
|
||
"status": "paid",
|
||
"statusText": "支付成功",
|
||
"time": "2024-01-01T12:05:00Z"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
### 5.4 商家接单
|
||
```http
|
||
POST /api/v1/orders/{id}/accept
|
||
Authorization: Bearer {token}
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"estimatedTime": 30 // 预计制作时长(分钟)
|
||
}
|
||
```
|
||
|
||
### 5.5 开始制作
|
||
```http
|
||
POST /api/v1/orders/{id}/cooking
|
||
Authorization: Bearer {token}
|
||
```
|
||
|
||
### 5.6 订单完成
|
||
```http
|
||
POST /api/v1/orders/{id}/complete
|
||
Authorization: Bearer {token}
|
||
```
|
||
|
||
### 5.7 取消订单
|
||
```http
|
||
POST /api/v1/orders/{id}/cancel
|
||
Authorization: Bearer {token}
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"reason": "用户取消",
|
||
"cancelBy": "customer" // customer, merchant, system
|
||
}
|
||
```
|
||
|
||
## 6. 支付接口
|
||
|
||
### 6.1 创建支付
|
||
```http
|
||
POST /api/v1/payments
|
||
Authorization: Bearer {token}
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"orderId": "uuid",
|
||
"paymentMethod": "wechat", // wechat, alipay, balance
|
||
"amount": 71.00
|
||
}
|
||
|
||
Response:
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"paymentNo": "PAY202401010001",
|
||
"qrCode": "https://...", // 支付二维码
|
||
"deepLink": "weixin://..." // 唤起支付的深度链接
|
||
}
|
||
}
|
||
```
|
||
|
||
### 6.2 查询支付状态
|
||
```http
|
||
GET /api/v1/payments/{paymentNo}
|
||
Authorization: Bearer {token}
|
||
|
||
Response:
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"paymentNo": "PAY202401010001",
|
||
"status": 2, // 0:待支付 1:支付中 2:成功 3:失败
|
||
"amount": 71.00,
|
||
"paidAt": "2024-01-01T12:05:00Z"
|
||
}
|
||
}
|
||
```
|
||
|
||
### 6.3 支付回调(第三方调用)
|
||
```http
|
||
POST /api/v1/payments/callback/wechat
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"out_trade_no": "PAY202401010001",
|
||
"transaction_id": "4200001234567890",
|
||
"total_fee": 7100,
|
||
"result_code": "SUCCESS"
|
||
}
|
||
```
|
||
|
||
### 6.4 申请退款
|
||
```http
|
||
POST /api/v1/refunds
|
||
Authorization: Bearer {token}
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"orderId": "uuid",
|
||
"amount": 71.00,
|
||
"reason": "不想要了"
|
||
}
|
||
```
|
||
|
||
## 7. 配送管理接口
|
||
|
||
### 7.1 获取配送任务列表
|
||
```http
|
||
GET /api/v1/delivery-tasks?status=&driverId=&pageIndex=1&pageSize=20
|
||
Authorization: Bearer {token}
|
||
```
|
||
|
||
### 7.2 分配配送员
|
||
```http
|
||
POST /api/v1/delivery-tasks/{id}/assign
|
||
Authorization: Bearer {token}
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"driverId": "uuid"
|
||
}
|
||
```
|
||
|
||
### 7.3 配送员接单
|
||
```http
|
||
POST /api/v1/delivery-tasks/{id}/accept
|
||
Authorization: Bearer {token}
|
||
```
|
||
|
||
### 7.4 确认取餐
|
||
```http
|
||
POST /api/v1/delivery-tasks/{id}/pickup
|
||
Authorization: Bearer {token}
|
||
```
|
||
|
||
### 7.5 确认送达
|
||
```http
|
||
POST /api/v1/delivery-tasks/{id}/deliver
|
||
Authorization: Bearer {token}
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"deliveryCode": "123456" // 取餐码
|
||
}
|
||
```
|
||
|
||
### 7.6 更新配送员位置
|
||
```http
|
||
POST /api/v1/delivery-drivers/location
|
||
Authorization: Bearer {token}
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"latitude": 39.9042,
|
||
"longitude": 116.4074
|
||
}
|
||
```
|
||
|
||
## 8. 营销管理接口
|
||
|
||
### 8.1 获取优惠券列表
|
||
```http
|
||
GET /api/v1/coupons?merchantId=&status=1&pageIndex=1&pageSize=20
|
||
Authorization: Bearer {token}
|
||
```
|
||
|
||
### 8.2 领取优惠券
|
||
```http
|
||
POST /api/v1/coupons/{id}/receive
|
||
Authorization: Bearer {token}
|
||
```
|
||
|
||
### 8.3 获取用户优惠券
|
||
```http
|
||
GET /api/v1/user-coupons?status=1&pageIndex=1&pageSize=20
|
||
Authorization: Bearer {token}
|
||
|
||
Response:
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"items": [
|
||
{
|
||
"id": "uuid",
|
||
"couponName": "满50减10",
|
||
"discountValue": 10.00,
|
||
"minOrderAmount": 50.00,
|
||
"status": 1,
|
||
"expiredAt": "2024-12-31T23:59:59Z"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
### 8.4 获取可用优惠券
|
||
```http
|
||
GET /api/v1/user-coupons/available?merchantId={merchantId}&amount={amount}
|
||
Authorization: Bearer {token}
|
||
```
|
||
|
||
## 9. 评价管理接口
|
||
|
||
### 9.1 创建评价
|
||
```http
|
||
POST /api/v1/reviews
|
||
Authorization: Bearer {token}
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"orderId": "uuid",
|
||
"rating": 5,
|
||
"tasteRating": 5,
|
||
"packageRating": 5,
|
||
"deliveryRating": 5,
|
||
"content": "非常好吃",
|
||
"images": ["https://...", "https://..."],
|
||
"isAnonymous": false
|
||
}
|
||
```
|
||
|
||
### 9.2 获取商家评价列表
|
||
```http
|
||
GET /api/v1/reviews?merchantId={merchantId}&rating=&pageIndex=1&pageSize=20
|
||
|
||
Response:
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"items": [
|
||
{
|
||
"id": "uuid",
|
||
"userName": "张三",
|
||
"userAvatar": "https://...",
|
||
"rating": 5,
|
||
"content": "非常好吃",
|
||
"images": ["https://..."],
|
||
"createdAt": "2024-01-01T12:00:00Z",
|
||
"replyContent": "感谢支持",
|
||
"replyAt": "2024-01-01T13:00:00Z"
|
||
}
|
||
],
|
||
"totalCount": 100,
|
||
"statistics": {
|
||
"avgRating": 4.8,
|
||
"totalReviews": 100,
|
||
"rating5Count": 80,
|
||
"rating4Count": 15,
|
||
"rating3Count": 3,
|
||
"rating2Count": 1,
|
||
"rating1Count": 1
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
### 9.3 商家回复评价
|
||
```http
|
||
POST /api/v1/reviews/{id}/reply
|
||
Authorization: Bearer {token}
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"replyContent": "感谢您的支持"
|
||
}
|
||
```
|
||
|
||
## 10. 数据统计接口
|
||
|
||
### 10.1 商家数据概览
|
||
```http
|
||
GET /api/v1/statistics/merchant/overview?merchantId={merchantId}&startDate=&endDate=
|
||
Authorization: Bearer {token}
|
||
|
||
Response:
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"totalOrders": 1000,
|
||
"totalRevenue": 50000.00,
|
||
"avgOrderAmount": 50.00,
|
||
"completionRate": 0.95,
|
||
"todayOrders": 50,
|
||
"todayRevenue": 2500.00,
|
||
"orderTrend": [
|
||
{
|
||
"date": "2024-01-01",
|
||
"orders": 50,
|
||
"revenue": 2500.00
|
||
}
|
||
],
|
||
"topDishes": [
|
||
{
|
||
"dishId": "uuid",
|
||
"dishName": "宫保鸡丁",
|
||
"salesCount": 200,
|
||
"revenue": 7600.00
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
### 10.2 平台数据大盘
|
||
```http
|
||
GET /api/v1/statistics/platform/dashboard?startDate=&endDate=
|
||
Authorization: Bearer {token}
|
||
|
||
Response:
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"totalMerchants": 100,
|
||
"totalUsers": 10000,
|
||
"totalOrders": 50000,
|
||
"totalRevenue": 2500000.00,
|
||
"activeMerchants": 80,
|
||
"activeUsers": 5000,
|
||
"todayOrders": 500,
|
||
"todayRevenue": 25000.00
|
||
}
|
||
}
|
||
```
|
||
|
||
## 11. 文件上传接口
|
||
|
||
### 11.1 上传图片
|
||
```http
|
||
POST /api/v1/files/upload
|
||
Authorization: Bearer {token}
|
||
Content-Type: multipart/form-data
|
||
|
||
file: <binary>
|
||
type: dish_image // dish_image, merchant_logo, user_avatar, review_image
|
||
|
||
Response:
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"url": "https://cdn.example.com/images/xxx.jpg",
|
||
"fileName": "xxx.jpg",
|
||
"fileSize": 102400
|
||
}
|
||
}
|
||
```
|
||
|
||
## 12. WebSocket实时通知
|
||
|
||
### 12.1 连接WebSocket
|
||
```javascript
|
||
// 连接地址
|
||
ws://api.example.com/ws?token={jwt_token}
|
||
|
||
// 订阅主题
|
||
{
|
||
"action": "subscribe",
|
||
"topics": ["order.new", "order.status", "delivery.location"]
|
||
}
|
||
|
||
// 接收消息
|
||
{
|
||
"topic": "order.new",
|
||
"data": {
|
||
"orderId": "uuid",
|
||
"orderNo": "202401010001",
|
||
"merchantId": "uuid"
|
||
},
|
||
"timestamp": "2024-01-01T12:00:00Z"
|
||
}
|
||
```
|
||
|
||
### 12.2 消息主题
|
||
- `order.new`:新订单通知
|
||
- `order.status`:订单状态变更
|
||
- `delivery.location`:配送员位置更新
|
||
- `payment.success`:支付成功通知
|
||
|