This commit is contained in:
2025-08-02 02:54:21 +08:00
parent 934dce2776
commit 66845d3fe0
74 changed files with 8686 additions and 212 deletions

View File

@@ -0,0 +1,277 @@
# 发票API接口文档
## 概述
本文档描述了发票管理相关的API接口包括用户申请开票和管理员处理开票申请的功能。
## 基础信息
- **Base URL**: `http://localhost:8080`
- **认证方式**: Bearer Token (JWT)
- **Content-Type**: `application/json`
## 用户接口
### 1. 申请开票
**接口地址**: `POST /api/v1/invoices/apply`
**请求参数**:
```json
{
"invoice_type": "general", // 发票类型: general(普票) | special(专票)
"amount": "1000.00", // 开票金额
"invoice_info": {
"company_name": "海南省学宇思网络科技有限公司",
"taxpayer_id": "91460108MADNY3F43W",
"bank_name": "中国银行海口分行", // 专票必填
"bank_account": "1234567890123456", // 专票必填
"company_address": "海南省海口市", // 专票必填
"company_phone": "0898-12345678", // 专票必填
"receiving_email": "ilirnax@gmail.com"
}
}
```
**响应示例**:
```json
{
"success": true,
"message": "申请开票成功",
"data": {
"id": "uuid",
"user_id": "user_uuid",
"invoice_type": "general",
"amount": "1000.00",
"status": "pending",
"invoice_info": {
"company_name": "海南省学宇思网络科技有限公司",
"taxpayer_id": "91460108MADNY3F43W",
"receiving_email": "ilirnax@gmail.com"
},
"created_at": "2024-01-01T12:00:00Z"
}
}
```
### 2. 获取用户发票信息
**接口地址**: `GET /api/v1/invoices/info`
**响应示例**:
```json
{
"success": true,
"message": "获取发票信息成功",
"data": {
"company_name": "海南省学宇思网络科技有限公司",
"taxpayer_id": "91460108MADNY3F43W",
"bank_name": "",
"bank_account": "",
"company_address": "",
"company_phone": "",
"receiving_email": "ilirnax@gmail.com",
"is_complete": false,
"missing_fields": ["基本开户银行", "基本开户账号", "企业注册地址", "企业注册电话"]
}
}
```
### 3. 更新用户发票信息
**接口地址**: `PUT /api/v1/invoices/info`
**请求参数**:
```json
{
"company_name": "海南省学宇思网络科技有限公司",
"taxpayer_id": "91460108MADNY3F43W",
"bank_name": "中国银行海口分行",
"bank_account": "1234567890123456",
"company_address": "海南省海口市",
"company_phone": "0898-12345678",
"receiving_email": "ilirnax@gmail.com"
}
```
### 4. 获取用户开票记录
**接口地址**: `GET /api/v1/invoices/records?page=1&page_size=10&status=completed`
**查询参数**:
- `page`: 页码 (默认: 1)
- `page_size`: 每页数量 (默认: 10, 最大: 100)
- `status`: 状态筛选 (可选: pending, completed, rejected)
**响应示例**:
```json
{
"success": true,
"message": "获取开票记录成功",
"data": {
"records": [
{
"id": "uuid",
"user_id": "user_uuid",
"invoice_type": "general",
"amount": "1000.00",
"status": "completed",
"company_name": "海南省学宇思网络科技有限公司",
"file_name": "invoice_20240101.pdf",
"file_size": 1024000,
"file_url": "https://example.com/invoice.pdf",
"processed_at": "2024-01-01T14:00:00Z",
"created_at": "2024-01-01T12:00:00Z"
}
],
"total": 1,
"page": 1,
"page_size": 10,
"total_pages": 1
}
}
```
### 5. 获取可开票金额
**接口地址**: `GET /api/v1/invoices/available-amount`
**响应示例**:
```json
{
"success": true,
"message": "获取可开票金额成功",
"data": {
"available_amount": "5000.00",
"total_recharged": "10000.00",
"total_gifted": "1000.00",
"total_invoiced": "4000.00"
}
}
```
### 6. 下载发票文件
**接口地址**: `GET /api/v1/invoices/{application_id}/download`
**响应示例**:
```json
{
"success": true,
"message": "获取下载信息成功",
"data": {
"file_id": "file_uuid",
"file_name": "invoice_20240101.pdf",
"file_size": 1024000,
"file_url": "https://example.com/invoice.pdf"
}
}
```
## 管理员接口
### 1. 获取待处理的发票申请列表
**接口地址**: `GET /api/v1/admin/invoices/pending?page=1&page_size=10`
**响应示例**:
```json
{
"success": true,
"message": "获取待处理申请列表成功",
"data": {
"applications": [
{
"id": "uuid",
"user_id": "user_uuid",
"invoice_type": "general",
"amount": "1000.00",
"status": "pending",
"company_name": "海南省学宇思网络科技有限公司",
"receiving_email": "ilirnax@gmail.com",
"created_at": "2024-01-01T12:00:00Z"
}
],
"total": 1,
"page": 1,
"page_size": 10,
"total_pages": 1
}
}
```
### 2. 通过发票申请(上传发票)
**接口地址**: `POST /api/v1/admin/invoices/{application_id}/approve`
**请求方式**: `multipart/form-data`
**请求参数**:
- `file`: 发票文件 (PDF格式)
- `admin_notes`: 管理员备注 (可选)
**响应示例**:
```json
{
"success": true,
"message": "通过发票申请成功",
"data": null
}
```
### 3. 拒绝发票申请
**接口地址**: `POST /api/v1/admin/invoices/{application_id}/reject`
**请求参数**:
```json
{
"reason": "发票信息不完整,请补充企业注册地址和电话"
}
```
**响应示例**:
```json
{
"success": true,
"message": "拒绝发票申请成功",
"data": null
}
```
## 错误码说明
| 状态码 | 说明 |
|--------|------|
| 200 | 请求成功 |
| 400 | 请求参数错误 |
| 401 | 用户未登录或认证已过期 |
| 403 | 权限不足 |
| 404 | 资源不存在 |
| 500 | 服务器内部错误 |
## 业务规则
### 开票金额限制
- 用户只能申请充值金额(除去赠送)减去已开票金额
- 开票金额必须大于0
### 发票信息验证
- **普票**: 至少需要公司名称、纳税人识别号、接收邮箱
- **专票**: 需要完整的企业信息(包括银行信息、地址、电话)
### 状态流转
- `pending` (待处理) → `completed` (已完成) 或 `rejected` (已拒绝)
### 文件要求
- 发票文件格式PDF
- 文件大小限制10MB
- 文件命名:`invoice_{application_id}.pdf`
## 注意事项
1. 所有接口都需要JWT认证
2. 管理员接口需要管理员权限
3. 文件上传接口使用 `multipart/form-data` 格式
4. 金额字段使用字符串格式,精确到分
5. 时间字段使用ISO 8601格式