Files
tyapi-server/docs/发票API接口文档.md
2025-08-02 02:54:21 +08:00

277 lines
6.3 KiB
Markdown
Raw 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接口文档
## 概述
本文档描述了发票管理相关的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格式