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

6.3 KiB
Raw Blame History

发票API接口文档

概述

本文档描述了发票管理相关的API接口包括用户申请开票和管理员处理开票申请的功能。

基础信息

  • Base URL: http://localhost:8080
  • 认证方式: Bearer Token (JWT)
  • Content-Type: application/json

用户接口

1. 申请开票

接口地址: POST /api/v1/invoices/apply

请求参数:

{
  "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"
  }
}

响应示例:

{
  "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

响应示例:

{
  "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

请求参数:

{
  "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)

响应示例:

{
  "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

响应示例:

{
  "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

响应示例:

{
  "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

响应示例:

{
  "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: 管理员备注 (可选)

响应示例:

{
  "success": true,
  "message": "通过发票申请成功",
  "data": null
}

3. 拒绝发票申请

接口地址: POST /api/v1/admin/invoices/{application_id}/reject

请求参数:

{
  "reason": "发票信息不完整,请补充企业注册地址和电话"
}

响应示例:

{
  "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格式