feat: 1. 添加企查查的按钮。新增相关组件和对接接口进行显示。

2. 为51707端口添加只存在交叉评查入口的项目启动配置。入口页添加相关的区分。
3. 完善文档列表的权限功能控制。
4. 隐藏系统概览中高风险用户的统计模块。
fix: 1. 修复合同起草无权访问却生成了新的模板文件的问题。
2. 修复文档类型无法编辑入口模块的问题。
This commit is contained in:
2025-12-13 02:59:34 +08:00
parent 5c47b20e1d
commit daa53289af
23 changed files with 3370 additions and 183 deletions
+891
View File
@@ -0,0 +1,891 @@
# 企查查模块 API 接口文档
## 概述
企查查模块提供企业工商信息和失信核查查询功能,数据来源于企查查API。
### 基础信息
|项目 |说明 |
|---|---|
|基础路径 |`/api/v2/qichacha` |
|认证方式 |Bearer TokenJWT |
|数据格式 |JSON |
### 费用说明
|接口 |企查查接口 |单价 |
|---|---|---|
|工商信息 |410接口 |0.20元/次 |
|失信核查 |740接口 |0.30元/次 |
|完整查询 |410+740 |0.50元/次 |
> **注意**:仅调用企查查API时产生费用,使用数据库记录不产生费用。
### 权限要求
|权限键 |说明 |分配角色 |
|---|---|---|
|`qichacha:company:query` |查询企业信息 |市级管理员、省级管理员、普通员工 |
|`qichacha:status:read` |查看记录状态 |市级管理员、省级管理员、普通员工 |
---
## 业务逻辑
### 核心流程
企查查模块的核心设计理念是**数据库优先**,通过本地数据库存储已查询过的企业信息,减少对企查查API的调用次数,从而节省费用。
#### 查询流程图
```
┌─────────────────────────────────────────────────────────┐
│ 用户发起查询请求 │
│ keyword = "腾讯科技" 或 信用代码 │
└─────────────────────────────────────────────────────────┘
┌────────────────────────┐
│ 1. 查询数据库 │
│ (三字段OR匹配) │
│ search_key = keyword │
│ OR credit_code = keyword │
│ OR company_name = keyword │
└────────────────────────┘
┌────────────┴────────────┐
│ │
▼ ▼
┌──────────┐ ┌──────────┐
│ 无记录 │ │ 有记录 │
└──────────┘ └──────────┘
│ │
│ ▼
│ ┌─────────────────────────┐
│ │ 2. 检查force_refresh │
│ │ 参数是否为true? │
│ └─────────────────────────┘
│ │ │
│ true false
│ │ │
│ │ ▼
│ │ ┌──────────────────┐
│ │ │ 3. 检查数据新鲜度 │
│ │ │ updated_at距今 │
│ │ │ 是否超过30天? │
│ │ └──────────────────┘
│ │ │ │
│ │ >=30天 <30天
│ │ │ │
▼ ▼ ▼ ▼
┌─────────────────────────────┐ ┌──────────────┐
│ 4. 调用企查查API │ │ 5. 直接返回 │
│ ├─ 410接口(工商) 0.20元 │ │ 数据库记录 │
│ └─ 740接口(失信) 0.30元 │ │ │
│ │ │ ✓ 不产生费用 │
│ 5. 写入/更新数据库 │ │ ✓ 响应更快 │
│ ├─ search_key = keyword │ └──────────────┘
│ ├─ credit_code (从API获取) │
│ ├─ company_name (从API获取)│
│ ├─ enterprise = JSON │
│ └─ dishonesty = JSON │
│ │
│ 6. 返回查询结果 │
│ ✗ 产生费用: 0.50元/次 │
└─────────────────────────────┘
```
### 数据刷新策略
|场景 |条件 |动作 |是否产生费用 |
|---|---|---|---|
|首次查询 |数据库无此企业记录 |调用API → 写入数据库 |✓ 0.50元 |
|强制刷新 |`force_refresh=true` |调用API → 更新数据库 |✓ 0.50元 |
|数据过期 |记录存在但超过30天 |调用API → 更新数据库 |✓ 0.50元 |
|数据有效 |记录存在且未超30天 |直接返回数据库记录 |✗ 免费 |
### 三字段匹配机制
数据库查询使用**OR逻辑**匹配以下三个字段:
|字段 |说明 |示例 |
|---|---|---|
|`search_key` |原始查询关键词 |"腾讯科技" |
|`credit_code` |统一社会信用代码 |"91440300708461136T" |
|`company_name` |企业全称(从API获取) |"腾讯科技(深圳)有限公司" |
**匹配示例:**
1. 用户首次用 `"腾讯科技"` 查询
- 数据库无记录 → 调用API
- API返回企业全称和信用代码
- 写入数据库:`search_key="腾讯科技"`, `credit_code="91440300708461136T"`, `company_name="腾讯科技(深圳)有限公司"`
2. 用户再用 `"91440300708461136T"` 查询
- 数据库查询:`WHERE search_key='91440300708461136T' OR credit_code='91440300708461136T' OR company_name='91440300708461136T'`
- 命中 `credit_code` 字段 → 返回已有记录(不调用API)
3. 用户再用 `"腾讯科技(深圳)有限公司"` 查询
- 命中 `company_name` 字段 → 返回已有记录(不调用API)
### 数据存储结构
数据库表:`qcc_company_info`
|字段 |类型 |说明 |
|---|---|---|
|id |SERIAL |主键 |
|search_key |VARCHAR(500) |查询关键词(唯一索引) |
|credit_code |VARCHAR(50) |统一社会信用代码 |
|company_name |VARCHAR(500) |企业名称 |
|enterprise |JSONB |410接口原始返回(工商信息) |
|dishonesty |JSONB |740接口原始返回(失信信息) |
|created_at |TIMESTAMPTZ |创建时间 |
|updated_at |TIMESTAMPTZ |更新时间(用于判断数据新鲜度) |
### API调用说明
#### 企查查接口
|接口代码 |接口名称 |请求路径 |单价 |
|---|---|---|---|
|410 |企业工商信息 |`/ECIV4/GetBasicDetailsByName` |0.20元/次 |
|740 |失信核查 |`/ShixinCheck/GetList` |0.30元/次 |
#### Token生成规则
```
Token = MD5(AppKey + Timespan + SecretKey).toUpperCase()
```
- `AppKey`: 企查查分配的应用Key
- `Timespan`: Unix时间戳(秒)
- `SecretKey`: 企查查分配的密钥
#### 请求头
|Header |值 |
|---|---|
|Token |MD5签名(大写) |
|Timespan |Unix时间戳 |
|Content-Type |application/json |
### 并发处理
查询完整企业信息时,系统会**并发调用**410和740两个接口:
```python
# 并发请求示例
enterprise_task = client.get_enterprise_info(keyword) # 410接口
dishonesty_task = client.get_dishonesty_info(keyword) # 740接口
enterprise_resp, dishonesty_resp = await asyncio.gather(
enterprise_task,
dishonesty_task,
return_exceptions=True
)
```
优点:
- 减少总响应时间(两个请求并行执行)
- 单个接口失败不影响另一个接口的结果
---
## API 接口
### 1. 查询企业信息
查询企业完整信息(工商信息 + 失信核查)
**请求**
```
POST /api/v2/qichacha/company
Content-Type: application/json
Authorization: Bearer <token>
```
**请求参数**
|字段 |类型 |必填 |说明 |
|---|---|---|---|
|keyword |string |是 |查询关键词(企业名称或统一社会信用代码),2-200字符 |
|force_refresh |boolean |否 |是否强制刷新,默认false |
**请求示例**
```json
{
"keyword": "腾讯科技(深圳)有限公司",
"force_refresh": false
}
```
**响应参数**
|字段 |类型 |说明 |
|---|---|---|
|success |boolean |查询是否成功 |
|message |string |响应消息 |
|data |object |企业信息(见下表) |
|error_code |string |错误码(失败时返回) |
|error_details |object |错误详情(失败时返回) |
**data 字段说明**
|字段 |类型 |说明 |
|---|---|---|
|search_key |string |查询关键词 |
|credit_code |string |统一社会信用代码 |
|company_name |string |企业名称 |
|enterprise |object |企业工商信息(410接口原始返回) |
|dishonesty |object |失信核查信息(740接口原始返回) |
|has_dishonesty |boolean |是否有失信记录 |
|dishonesty_count |integer |失信记录数量 |
|updated_at |datetime |数据更新时间 |
**enterprise 字段说明(410接口返回)**
|字段 |类型 |说明 |
|---|---|---|
|KeyNo |string |企查查内部KeyNo |
|Name |string |企业名称 |
|No |string |工商注册号 |
|BelongOrg |string |登记机关 |
|OperId |string |法定代表人ID |
|OperName |string |法定代表人姓名 |
|DesignatedRepresentativeList |array |指定代表人列表 |
|StartDate |string |成立日期(格式:YYYY-MM-DD HH:mm:ss |
|EndDate |string |注销日期(空字符串表示未注销) |
|Status |string |企业状态(存续、注销、吊销等) |
|Province |string |省份代码(如JS=江苏) |
|UpdatedDate |string |数据更新日期 |
|CreditCode |string |统一社会信用代码(部分老企业可能为空) |
|RegistCapi |string |注册资本(含单位,如"36225万元" |
|RegisteredCapital |string |注册资本数值 |
|RegisteredCapitalUnit |string |注册资本单位(如"万" |
|RegisteredCapitalCCY |string |注册资本币种(如"CNY" |
|EconKind |string |企业类型(如"有限责任公司"、"全民所有制"等) |
|Address |string |注册地址 |
|Scope |string |经营范围 |
|TermStart |string |营业期限起始日期 |
|TermEnd |string |营业期限终止日期 |
|CheckDate |string |核准日期 |
|OrgNo |string |组织机构代码 |
|IsOnStock |string |是否上市("0"=否,"1"=是) |
|StockNumber |string |股票代码(非上市为null |
|StockType |string |股票类型(非上市为null |
|OriginalName |array |曾用名列表 |
|ImageUrl |string |企业Logo图片URL |
|EntType |string |企业类型代码 |
|RecCap |string |实缴资本(含单位) |
|PaidUpCapital |string |实缴资本数值 |
|PaidUpCapitalUnit |string |实缴资本单位 |
|PaidUpCapitalCCY |string |实缴资本币种 |
|RevokeInfo |object |注销/吊销信息 |
|Area |object |地区信息 |
|AreaCode |string |地区代码 |
**enterprise.DesignatedRepresentativeList[] 指定代表人**
|字段 |类型 |说明 |
|---|---|---|
|PartnerName |string |股东名称 |
|DelegatedName |string |委派代表姓名 |
**enterprise.OriginalName[] 曾用名**
|字段 |类型 |说明 |
|---|---|---|
|Name |string |曾用名称 |
|ChangeDate |string |变更日期 |
**enterprise.RevokeInfo 注销/吊销信息**
|字段 |类型 |说明 |
|---|---|---|
|CancelDate |string |注销日期 |
|CancelReason |string |注销原因 |
|RevokeDate |string |吊销日期 |
|RevokeReason |string |吊销原因 |
**enterprise.Area 地区信息**
|字段 |类型 |说明 |
|---|---|---|
|Province |string |省份 |
|City |string |城市 |
|County |string |区县 |
**dishonesty 字段说明(740接口返回)**
|字段 |类型 |说明 |
|---|---|---|
|VerifyResult |integer |核查结果:0-无失信记录,1-有失信记录 |
|Data |array |失信记录列表(VerifyResult=0时为null或空数组) |
**dishonesty.Data[] 失信记录字段说明**
|字段 |类型 |说明 |
|---|---|---|
|Id |string |记录唯一标识 |
|Liandate |string |立案日期(格式:YYYY-MM-DD |
|Anno |string |案号 |
|Executegov |string |执行法院 |
|Executestatus |string |执行情况(全部未履行/部分履行/全部履行) |
|Publicdate |string |发布日期(格式:YYYY-MM-DD |
|Executeno |string |执行依据文号 |
|ActionRemark |string |失信被执行人行为具体情形 |
|Amount |string |执行标的金额(元) |
**响应示例(成功)**
```json
{
"success": true,
"message": "查询成功",
"data": {
"search_key": "腾讯科技(深圳)有限公司",
"credit_code": "91440300708461136T",
"company_name": "腾讯科技(深圳)有限公司",
"enterprise": {
"KeyNo": "p5ef6e1c39f4817d33dfb4e9",
"Name": "腾讯科技(深圳)有限公司",
"No": "440301103206221",
"BelongOrg": "深圳市市场监督管理局",
"OperId": "p5ef6e1c39f4817d33dfb4e9op",
"OperName": "马化腾",
"DesignatedRepresentativeList": [],
"StartDate": "2000-02-24 00:00:00",
"EndDate": "",
"Status": "存续",
"Province": "GD",
"UpdatedDate": "2024-12-10 15:30:00",
"CreditCode": "91440300708461136T",
"RegistCapi": "65000万人民币",
"RegisteredCapital": "65000",
"RegisteredCapitalUnit": "万",
"RegisteredCapitalCCY": "CNY",
"EconKind": "有限责任公司",
"Address": "深圳市南山区粤海街道科技中一路腾讯大厦35层",
"Scope": "从事计算机软硬件及周边设备、通讯设备、数码产品、网络设备的技术开发、销售及相关的技术咨询、技术服务;经营进出口业务;从事广告业务;物业管理",
"TermStart": "2000-02-24 00:00:00",
"TermEnd": "2050-02-24 00:00:00",
"CheckDate": "2023-08-15 00:00:00",
"OrgNo": "708461136",
"IsOnStock": "1",
"StockNumber": "00700.HK",
"StockType": "港股",
"OriginalName": [
{
"Name": "深圳市腾讯计算机系统有限公司",
"ChangeDate": "2000-06-01"
}
],
"ImageUrl": "https://img.qichacha.com/xxx.png",
"EntType": "1",
"RecCap": "65000万人民币",
"PaidUpCapital": "65000",
"PaidUpCapitalUnit": "万",
"PaidUpCapitalCCY": "CNY",
"RevokeInfo": {
"CancelDate": "",
"CancelReason": "",
"RevokeDate": "",
"RevokeReason": ""
},
"Area": {
"Province": "广东省",
"City": "深圳市",
"County": "南山区"
},
"AreaCode": "440305"
},
"dishonesty": {
"VerifyResult": 0,
"Data": null
},
"has_dishonesty": false,
"dishonesty_count": 0,
"updated_at": "2024-12-12T10:30:00+08:00"
}
}
```
**响应示例(有失信记录)**
```json
{
"success": true,
"message": "查询成功",
"data": {
"search_key": "某某建设工程有限公司",
"credit_code": "91440106MA5CXXXX12",
"company_name": "某某建设工程有限公司",
"enterprise": {
"KeyNo": "abc123def456ghi789jkl",
"Name": "某某建设工程有限公司",
"No": "440106000123456",
"BelongOrg": "广州市天河区市场监督管理局",
"OperId": "abc123def456ghi789jklop",
"OperName": "张三",
"DesignatedRepresentativeList": [],
"StartDate": "2018-05-10 00:00:00",
"EndDate": "",
"Status": "存续",
"Province": "GD",
"UpdatedDate": "2024-12-01 09:00:00",
"CreditCode": "91440106MA5CXXXX12",
"RegistCapi": "5000万人民币",
"RegisteredCapital": "5000",
"RegisteredCapitalUnit": "万",
"RegisteredCapitalCCY": "CNY",
"EconKind": "有限责任公司(自然人投资或控股)",
"Address": "广州市天河区某某路123号",
"Scope": "建筑工程施工;市政公用工程施工;房屋建筑工程施工;建筑装饰、装修工程施工;园林绿化工程施工",
"TermStart": "2018-05-10 00:00:00",
"TermEnd": "2048-05-09 00:00:00",
"CheckDate": "2023-06-20 00:00:00",
"OrgNo": "MA5CXXXX1",
"IsOnStock": "0",
"StockNumber": null,
"StockType": null,
"OriginalName": [],
"ImageUrl": "",
"EntType": "1",
"RecCap": "1000万人民币",
"PaidUpCapital": "1000",
"PaidUpCapitalUnit": "万",
"PaidUpCapitalCCY": "CNY",
"RevokeInfo": {
"CancelDate": "",
"CancelReason": "",
"RevokeDate": "",
"RevokeReason": ""
},
"Area": {
"Province": "广东省",
"City": "广州市",
"County": "天河区"
},
"AreaCode": "440106"
},
"dishonesty": {
"VerifyResult": 1,
"Data": [
{
"Id": "c2edc410f8ceed3ed256055baa8df1432",
"Liandate": "2021-08-10",
"Anno": "2021)粤0106执34224号",
"Executegov": "广州市天河区人民法院",
"Executestatus": "全部未履行",
"Publicdate": "2022-01-07",
"Executeno": "2020)粤0106民初12345号",
"ActionRemark": "有履行能力而拒不履行生效法律文书确定义务",
"Amount": "1098000"
}
]
},
"has_dishonesty": true,
"dishonesty_count": 1,
"updated_at": "2024-12-12T10:30:00+08:00"
}
}
```
**响应示例(失败)**
```json
{
"success": false,
"message": "当前KEY已欠费",
"data": null,
"error_code": "102",
"error_details": {
"order_number": "20241212103000123",
"is_charged": false,
"is_valid_request": false
}
}
```
---
### 2. 仅查询工商信息
仅查询企业工商信息(410接口),费用 0.20元/次
**请求**
```
POST /api/v2/qichacha/enterprise
Content-Type: application/json
Authorization: Bearer <token>
```
**请求参数**
同 [查询企业信息](#1-查询企业信息)
**响应参数**
同 [查询企业信息](#1-查询企业信息),但 `dishonesty` 字段为 null
---
### 3. 仅查询失信信息
仅查询企业失信信息(740接口),费用 0.30元/次
**请求**
```
POST /api/v2/qichacha/dishonesty
Content-Type: application/json
Authorization: Bearer <token>
```
**请求参数**
同 [查询企业信息](#1-查询企业信息)
**响应参数**
同 [查询企业信息](#1-查询企业信息),但 `enterprise` 字段为 null
---
### 4. 批量查询企业信息
批量查询多个企业信息,单次最多10个
**请求**
```
POST /api/v2/qichacha/batch
Content-Type: application/json
Authorization: Bearer <token>
```
**请求参数**
|字段 |类型 |必填 |说明 |
|---|---|---|---|
|keywords |array[string] |是 |查询关键词列表,1-10个 |
|force_refresh |boolean |否 |是否强制刷新,默认false |
**请求示例**
```json
{
"keywords": ["腾讯科技", "阿里巴巴", "华为技术"],
"force_refresh": false
}
```
**响应参数**
|字段 |类型 |说明 |
|---|---|---|
|success |boolean |是否全部成功 |
|total |integer |总查询数 |
|success_count |integer |成功数 |
|failed_count |integer |失败数 |
|results |array |查询结果列表(每个元素同单个查询响应) |
**响应示例**
> 注:`results` 数组中每个元素的 `data` 结构与单个查询响应的 `data` 字段完全一致,包含完整的 `enterprise` 和 `dishonesty` 对象。
```json
{
"success": true,
"total": 3,
"success_count": 3,
"failed_count": 0,
"results": [
{
"success": true,
"message": "查询成功",
"data": {
"search_key": "腾讯科技",
"credit_code": "91440300708461136T",
"company_name": "腾讯科技(深圳)有限公司",
"enterprise": {
"KeyNo": "p5ef6e1c39f4817d33dfb4e9",
"Name": "腾讯科技(深圳)有限公司",
"No": "440301103206221",
"BelongOrg": "深圳市市场监督管理局",
"OperId": "p5ef6e1c39f4817d33dfb4e9op",
"OperName": "马化腾",
"DesignatedRepresentativeList": [],
"StartDate": "2000-02-24 00:00:00",
"EndDate": "",
"Status": "存续",
"Province": "GD",
"UpdatedDate": "2024-12-10 15:30:00",
"CreditCode": "91440300708461136T",
"RegistCapi": "65000万人民币",
"RegisteredCapital": "65000",
"RegisteredCapitalUnit": "万",
"RegisteredCapitalCCY": "CNY",
"EconKind": "有限责任公司",
"Address": "深圳市南山区粤海街道科技中一路腾讯大厦35层",
"Scope": "从事计算机软硬件及周边设备、通讯设备、数码产品、网络设备的技术开发、销售及相关的技术咨询、技术服务;经营进出口业务;从事广告业务;物业管理",
"TermStart": "2000-02-24 00:00:00",
"TermEnd": "2050-02-24 00:00:00",
"CheckDate": "2023-08-15 00:00:00",
"OrgNo": "708461136",
"IsOnStock": "1",
"StockNumber": "00700.HK",
"StockType": "港股",
"OriginalName": [],
"ImageUrl": "https://img.qichacha.com/xxx.png",
"EntType": "1",
"RecCap": "65000万人民币",
"PaidUpCapital": "65000",
"PaidUpCapitalUnit": "万",
"PaidUpCapitalCCY": "CNY",
"RevokeInfo": {
"CancelDate": "",
"CancelReason": "",
"RevokeDate": "",
"RevokeReason": ""
},
"Area": {
"Province": "广东省",
"City": "深圳市",
"County": "南山区"
},
"AreaCode": "440305"
},
"dishonesty": {
"VerifyResult": 0,
"Data": null
},
"has_dishonesty": false,
"dishonesty_count": 0,
"updated_at": "2024-12-12T10:30:00+08:00"
}
},
{
"success": true,
"message": "查询成功",
"data": {
"search_key": "阿里巴巴",
"credit_code": "91330100799655058B",
"company_name": "阿里巴巴(中国)有限公司",
"enterprise": { "/* 完整enterprise对象,结构同上 */" : "..." },
"dishonesty": { "VerifyResult": 0, "Data": null },
"has_dishonesty": false,
"dishonesty_count": 0,
"updated_at": "2024-12-12T10:31:00+08:00"
}
},
{
"success": true,
"message": "查询成功",
"data": {
"search_key": "华为技术",
"credit_code": "914403006194776951",
"company_name": "华为技术有限公司",
"enterprise": { "/* 完整enterprise对象,结构同上 */" : "..." },
"dishonesty": { "VerifyResult": 0, "Data": null },
"has_dishonesty": false,
"dishonesty_count": 0,
"updated_at": "2024-12-12T10:32:00+08:00"
}
}
]
}
```
---
### 5. 查询数据库记录状态
查询企业在数据库中的记录状态(不调用企查查API,不产生费用)
**请求**
```
GET /api/v2/qichacha/status?keyword=腾讯科技
Authorization: Bearer <token>
```
**请求参数**
|字段 |类型 |必填 |说明 |
|---|---|---|---|
|keyword |string |是 |查询关键词,最少2字符 |
**响应参数**
|字段 |类型 |说明 |
|---|---|---|
|exists |boolean |记录是否存在 |
|keyword |string |查询关键词 |
|search_key |string |数据库中的search_key |
|credit_code |string |统一社会信用代码 |
|company_name |string |企业名称 |
|has_enterprise |boolean |是否有工商信息 |
|has_dishonesty |boolean |是否有失信信息 |
|updated_at |datetime |数据更新时间 |
|age_days |integer |数据已存在天数 |
|refresh_threshold_days |integer |刷新阈值(默认30天) |
|need_refresh |boolean |是否需要刷新 |
**响应示例(有记录)**
```json
{
"exists": true,
"keyword": "腾讯科技",
"search_key": "腾讯科技(深圳)有限公司",
"credit_code": "91440300708461136T",
"company_name": "腾讯科技(深圳)有限公司",
"has_enterprise": true,
"has_dishonesty": true,
"updated_at": "2024-12-01T10:30:00+08:00",
"age_days": 11,
"refresh_threshold_days": 30,
"need_refresh": false
}
```
**响应示例(无记录)**
```json
{
"exists": false,
"keyword": "某某不存在的公司"
}
```
---
## 错误码
### 企查查API状态码
#### 有效请求(会计费)
|状态码 |说明 |
|---|---|
|200 |查询成功 |
|201 |查询无结果 |
|202 |查询参数错误 |
|205 |等待处理中 |
|207 |请求数据条目数超过上限 |
|208 |此接口不支持此公司类型查询 |
|209 |企业数量超过上限 |
|213 |参数长度不能小于2 |
|215 |不支持的查询关键字 |
#### 无效请求(不计费)
|状态码 |说明 |
|---|---|
|101 |当前的KEY无效或还未生效 |
|102 |当前KEY已欠费 |
|103 |当前KEY被暂停使用 |
|107 |被禁止的IP或签名错误 |
|111 |接口权限未开通 |
|112 |账号剩余使用量不足或已过期 |
### HTTP状态码
|状态码 |说明 |
|---|---|
|200 |成功 |
|401 |未认证(Token无效或过期) |
|403 |无权限(缺少qichacha:company:query权限) |
|500 |服务器内部错误 |
---
## 配置说明
在环境配置文件中添加:
```ini
# 企查查API配置
QCC_APP_KEY=你的AppKey
QCC_SECRET_KEY=你的SecretKey
# 可选配置
QCC_BASE_URL=https://api.qichacha.com
QCC_TIMEOUT=30
QCC_CACHE_DAYS=30
```
---
## 使用示例
### cURL
```bash
# 查询企业信息
curl -X POST "http://localhost:8000/api/v2/qichacha/company" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <your_token>" \
-d '{"keyword": "腾讯科技", "force_refresh": false}'
# 批量查询
curl -X POST "http://localhost:8000/api/v2/qichacha/batch" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <your_token>" \
-d '{"keywords": ["腾讯", "阿里", "华为"]}'
# 查询记录状态
curl -X GET "http://localhost:8000/api/v2/qichacha/status?keyword=腾讯" \
-H "Authorization: Bearer <your_token>"
```
### Python
```python
import httpx
async def query_company(keyword: str, token: str):
async with httpx.AsyncClient() as client:
response = await client.post(
"http://localhost:8000/api/v2/qichacha/company",
json={"keyword": keyword, "force_refresh": False},
headers={"Authorization": f"Bearer {token}"}
)
return response.json()
```
### JavaScript
```javascript
async function queryCompany(keyword, token) {
const response = await fetch('/api/v2/qichacha/company', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`
},
body: JSON.stringify({
keyword: keyword,
force_refresh: false
})
});
return await response.json();
}
```
@@ -0,0 +1,210 @@
# 企业工商信息查询接口文档
## 接口概述
该接口用于查询企业工商注册信息,返回企业的基本信息、注册资本、经营范围、法定代表人等详细数据。
## 响应结构
| 字段名 | 类型 | 描述 |
|--------|------|------|
| Result | Object | 查询结果数据 |
| Status | String | 状态码(200 表示成功) |
| Message | String | 响应消息 |
| OrderNumber | String | 订单编号 |
## Result 字段说明
### 基本信息
| 字段名 | 类型 | 长度 | 描述 |
|--------|------|------|------|
| KeyNo | String | 100 | 主键 |
| Name | String | 1000 | 企业名称 |
| No | String | 200 | 根据企业性质返回不同值(对中国境内企业(EntType=0/1/4/7/9/10/11)返回工商注册号,对中国香港企业返回企业编号,对中国台湾企业返回企业编号) |
| BelongOrg | String | 500 | 登记机关 |
| OperId | String | 100 | 法定代表人ID |
| OperName | String | 1000 | 法定代表人名称 |
| StartDate | String | 50 | 成立日期 |
| EndDate | String | 50 | 吊销日期(保留字段) |
| Status | String | 100 | 登记状态 |
| Province | String | 32 | 省份(缩写,如 JS 表示江苏) |
| UpdatedDate | String | 50 | 更新日期 |
| CreditCode | String | 50 | 根据企业性质返回不同值(对中国境内企业(EntType=0/1/4/7/9/10/11)返回统一社会信用代码,对中国香港企业返回商业登记号码) |
### 注册资本信息
| 字段名 | 类型 | 长度 | 描述 |
|--------|------|------|------|
| RegistCapi | String | 50 | 注册资本(含单位,如 "36225万元" |
| RegisteredCapital | String | 50 | 注册资本数额 |
| RegisteredCapitalUnit | String | 50 | 注册资本单位 |
| RegisteredCapitalCCY | String | 50 | 注册资本币种(如 CNY) |
| RecCap | String | 50 | 实缴资本(含单位) |
| PaidUpCapital | String | 50 | 实缴出资额数额 |
| PaidUpCapitalUnit | String | 50 | 实缴出资额单位 |
| PaidUpCapitalCCY | String | 50 | 实缴出资额币种 |
### 经营信息
| 字段名 | 类型 | 长度 | 描述 |
|--------|------|------|------|
| EconKind | String | 100 | 企业类型(如 "全民所有制" |
| Address | String | 1000 | 注册地址 |
| Scope | String | 5000 | 经营范围 |
| TermStart | String | 50 | 营业期限始 |
| TermEnd | String | 50 | 营业期限至 |
| CheckDate | String | 50 | 核准日期 |
| OrgNo | String | 50 | 组织机构代码 |
### 上市信息
| 字段名 | 类型 | 长度 | 描述 |
|--------|------|------|------|
| IsOnStock | String | 5 | 是否上市(0-未上市,1-上市) |
| StockNumber | String | 32 | 股票代码(若A股和港股同时存在,优先返回A股代码) |
| StockType | String | 10 | 上市类型(A股、港股、美股、新三板、新四板) |
### 其他信息
| 字段名 | 类型 | 长度 | 描述 |
|--------|------|------|------|
| ImageUrl | String | 500 | 企业Logo地址 |
| EntType | String | 10 | 企业性质 |
| AreaCode | String | 20 | 行政区划代码 |
**EntType 企业性质枚举值:**
| 值 | 描述 |
|----|------|
| 0 | 大陆企业 |
| 1 | 社会组织 |
| 4 | 事业单位 |
| 7 | 医院 |
| 9 | 律师事务所 |
| 10 | 学校 |
| 11 | 机关单位 |
| -1 | 其他 |
### 嵌套对象
| 字段名 | 类型 | 描述 |
|--------|------|------|
| DesignatedRepresentativeList | List\<Object\> | 委派代表列表 |
| OriginalName | List\<Object\> | 曾用名列表 |
| RevokeInfo | Object | 注销吊销信息 |
| Area | Object | 行政区域 |
---
## 嵌套对象字段说明
### DesignatedRepresentativeList(委派代表)
| 字段名 | 类型 | 长度 | 描述 |
|--------|------|------|------|
| PartnerName | String | 1000 | 合伙人名称 |
| DelegatedName | String | 1000 | 委派代表名称 |
### OriginalName(曾用名)
| 字段名 | 类型 | 长度 | 描述 |
|--------|------|------|------|
| Name | String | 1000 | 曾用名 |
| ChangeDate | String | 50 | 变更日期 |
### RevokeInfo(注销吊销信息)
| 字段名 | 类型 | 长度 | 描述 |
|--------|------|------|------|
| CancelDate | String | 50 | 注销日期(如 "2022-01-01" |
| CancelReason | String | 2000 | 注销原因 |
| RevokeDate | String | 50 | 吊销日期 |
| RevokeReason | String | 2000 | 吊销原因 |
### Area(行政区域)
| 字段名 | 类型 | 长度 | 描述 |
|--------|------|------|------|
| Province | String | 32 | 省份 |
| City | String | 32 | 城市 |
| County | String | 32 | 区域 |
---
## 响应示例
```json
{
"Result": {
"KeyNo": "xxxxxxxxxxxx",
"Name": "xxxxxxx公司",
"No": "xxxxxxxxxxxxxxx",
"BelongOrg": "xxxxxxxxxxxx管理局",
"OperId": "xxxxxxxxxxxxx",
"OperName": "xxx",
"DesignatedRepresentativeList": [
{
"PartnerName": "xxx股权投资有限公司",
"DelegatedName": "xxx"
}
],
"StartDate": "1994-03-04 00:00:00",
"EndDate": "",
"Status": "注销",
"Province": "JS",
"UpdatedDate": "2021-12-17 12:34:53",
"CreditCode": "",
"RegistCapi": "36225万元",
"RegisteredCapital": "36225",
"RegisteredCapitalUnit": "万",
"RegisteredCapitalCCY": "CNY",
"EconKind": "全民所有制",
"Address": "xxx",
"Scope": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"TermStart": "1994-03-04 00:00:00",
"TermEnd": "2029-06-28 00:00:00",
"CheckDate": "2018-06-28 00:00:00",
"OrgNo": "0881xxxx-7",
"IsOnStock": "0",
"StockNumber": null,
"StockType": null,
"OriginalName": [
{
"Name": "xxxxx有限公司",
"ChangeDate": "2023-07-06"
}
],
"ImageUrl": "xxxxxxxxxxxxxxxxxxxxx",
"EntType": "0",
"RecCap": "36225万元",
"PaidUpCapital": "36225",
"PaidUpCapitalUnit": "万",
"PaidUpCapitalCCY": "CNY",
"RevokeInfo": {
"CancelDate": "2018-06-28",
"CancelReason": "其他原因",
"RevokeDate": "",
"RevokeReason": ""
},
"Area": {
"Province": "江苏省",
"City": "苏州市",
"County": "苏州工业园区"
},
"AreaCode": "320571"
},
"Status": "200",
"Message": "【有效请求】查询成功",
"OrderNumber": "ECI2021123010294871571463"
}
```
---
## 注意事项
1. **日期格式**:部分日期字段返回格式为 `YYYY-MM-DD HH:mm:ss`,部分为 `YYYY-MM-DD`
2. **空值处理**:字段值可能为空字符串 `""``null`,需做兼容处理
3. **企业性质**:根据 `EntType` 字段判断企业类型,不同类型的 `No``CreditCode` 含义不同
4. **上市信息**:仅当 `IsOnStock``"1"` 时,`StockNumber``StockType` 才有值
+115
View File
@@ -0,0 +1,115 @@
# 失信核查接口文档
## 接口概述
该接口用于查询企业或个人的失信被执行人信息,返回失信记录详情,包括案号、执行法院、履行情况、涉案金额等。
## 响应结构
| 字段名 | 类型 | 描述 |
|--------|------|------|
| Paging | Object | 分页信息 |
| Result | Object | 查询结果数据 |
| Status | String | 状态码(200 表示成功) |
| Message | String | 响应消息 |
| OrderNumber | String | 订单编号 |
## Paging(分页信息)
| 字段名 | 类型 | 描述 |
|--------|------|------|
| PageSize | Int32 | 每页记录数 |
| PageIndex | Int32 | 当前页码 |
| TotalRecords | Int32 | 总记录数 |
## Result(返回参数)
| 字段名 | 类型 | 长度 | 描述 |
|--------|------|------|------|
| VerifyResult | Int32 | 1 | 数据是否存在(1-存在,0-不存在) |
| Data | List\<Object\> | - | 数据信息列表 |
**VerifyResult 枚举值:**
| 值 | 描述 |
|----|------|
| 1 | 存在失信记录 |
| 0 | 不存在失信记录 |
## Data(数据信息)
| 字段名 | 类型 | 长度 | 描述 |
|--------|------|------|------|
| Id | String | 100 | 主键 |
| Liandate | String | 50 | 立案日期(如 "2022-01-01" |
| Anno | String | 1000 | 案号 |
| Executegov | String | 500 | 执行法院 |
| Executestatus | String | 5000 | 被执行人的履行情况 |
| Publicdate | String | 50 | 发布日期(如 "2022-01-01" |
| Executeno | String | 1000 | 执行依据文号 |
| ActionRemark | String | 5000 | 失信行为 |
| Amount | String | 50 | 涉案金额(元) |
---
## 响应示例
```json
{
"Paging": {
"PageSize": 1,
"PageIndex": 1,
"TotalRecords": 35
},
"Result": {
"VerifyResult": 1,
"Data": [
{
"Id": "c2edc410f8ceed3ed256055baa8df1432",
"Liandate": "2021-08-10",
"Anno": "2021)京0105执34224号",
"Executegov": "北京市朝阳区人民法院",
"Executestatus": "全部未履行",
"Publicdate": "2022-01-07",
"Executeno": "2020)京0105民初51653号",
"ActionRemark": "有履行能力而拒不履行生效法律文书确定义务",
"Amount": "1098000"
}
]
},
"Status": "200",
"Message": "【有效请求】查询成功",
"OrderNumber": "SHIXINCHECK2022022815011713633136"
}
```
---
## 字段说明
### Executestatus(履行情况)常见值
| 值 | 描述 |
|----|------|
| 全部未履行 | 被执行人未履行任何义务 |
| 部分履行 | 被执行人已履行部分义务 |
| 全部履行 | 被执行人已全部履行义务 |
### ActionRemark(失信行为)常见类型
- 有履行能力而拒不履行生效法律文书确定义务
- 以伪造证据、暴力、威胁等方法妨碍、抗拒执行
- 以虚假诉讼、虚假仲裁或者以隐匿、转移财产等方法规避执行
- 违反财产报告制度
- 违反限制消费令
- 无正当理由拒不履行执行和解协议
---
## 注意事项
1. **分页处理**:当 `TotalRecords` 大于 `PageSize` 时,需要分页请求获取完整数据
2. **金额格式**`Amount` 字段为字符串类型,单位为元,使用时需转换为数值类型
3. **日期格式**:日期字段格式为 `YYYY-MM-DD`
4. **空数据处理**:当 `VerifyResult``0` 时,`Data` 数组为空
5. **案号格式**`Anno``Executeno` 包含中文括号,注意字符编码处理