成旭先生VX:xujian_cq头像
关注
企业全景信息查询 API:工商照面 33 项、股东出资、变更与社保一次查全封面图

企业全景信息查询 API:工商照面 33 项、股东出资、变更与社保一次查全

企业全景信息查询 API:工商照面 33 项、股东出资、变更与社保一次查全

做供应商准入、客户尽职调查、授信风控时,需要的信息往往不止「这家公司存不存在」:经营状态是否正常、注册资本与实缴、股东结构与出资明细、历史上改过什么、参保人数有没有异常——这些信息分散在工商公示的不同板块里,逐个去查要调好几个接口、拼好几套字段。

enterprise.detail 把四个维度合并成一次查询:工商照面 33 项 + 股东及认缴 / 实缴出资 + 工商变更记录 + 分年度社保参保,一次 GET 请求全部返回,并且查不到该企业不收费。

接口速览

关键事实说明
接口地址https://api.xujian.tech/openapi/enterprise/detail
接口编码enterprise.detail
请求方式GET(keyword 放 Query String)
鉴权方式请求头 X-API-Key,不做签名、时间戳或加密
唯一业务参数keyword,企业工商登记全称或统一社会信用代码,去空格后 2 ~ 50 个字符
返回四大块basicInfo / partners / changeRecords / socialSecurity
计费方式按次计费,0.52 元/次,先预鉴权、查到企业后再扣费
不计费场景关键词非法、服务不可用、未查询到该企业
典型耗时通常 1 ~ 3 秒,建议客户端超时至少 15 秒
条数限制无 limit、无分页,按上游实际结果完整返回

一、哪些业务需要这一步

场景具体用法
供应商准入一次拿到状态、注册资本、股东与参保规模,判断是否为壳公司
客户尽职调查核对统一社会信用代码与注册地址,配合变更记录看历史沿革
授信与风控用经营状态、吊销 / 注销信息、变更频率做风险打分
企业档案补全CRM 里只有企业名,批量补全信用代码、法人、经营范围
股东穿透从 partners 拿到股东名单与持股比例,继续向上穿透
合同评审签合同前核对企业名称、法人、经营期限是否异常
招投标资格审核校验经营范围是否覆盖招标内容、状态是否正常
招商与获客按行业代码 domain 与地区筛选目标企业
贷后监控定期复查状态与变更记录,发现法人 / 股东变动及时预警
企业画像标签用 tags(高新企业 / 上市等)与参保人数打标签

二、请求参数

2.1 请求头

参数名必填说明
X-API-Key是开发者 API Key,缺失或无效直接返回失败

2.2 查询参数

参数名必填类型示例说明
keyword是String91500113MAABRA7D0H企业工商登记全称或统一社会信用代码;去首尾空白后 2 ~ 50 个字符

2.3 关键词怎么填才查得准

  • 优先用统一社会信用代码:18 位,唯一且不会重名,准确率最高。
  • 用名称时必须是登记全称。接口不做模糊匹配,传简称大概率查不到。
  • 拿不准全称时,先用企业信息模糊查询(enterprise.query,0.01 元/次)校正全称,再查本接口,比反复猜更省钱。

三、返回字段

3.1 顶层与 data

字段类型说明
codeint0 成功,非 0 失败(统一为 500)
msgString成功为 success,失败为具体原因
dataObject业务数据,失败时为 null

data 字段:

字段类型示例说明
keywordString91500113MAABRA7D0H去首尾空白后的查询关键词
basicInfoObject{…}工商照面 33 项
partnersArray[…]股东及认缴 / 实缴出资明细
changeRecordsArray[…]工商变更记录
socialSecurityArray[…]分年度社保参保信息
apiCodeStringenterprise.detail接口编码
apiNameString企业详细信息综合查询接口名称
chargeTypeStringPER_CALL本次计费方式
balanceBigDecimal99.4800成功结算后的账户余额(元)
costMsLong1860本次调用总耗时(毫秒)

3.2 basicInfo:工商照面 33 项

字段示例含义
name重庆可乐家装饰工程有限公司企业名称
formatName重庆可乐家装饰工程有限公司清洗后的标准名称
creditNo91500113MAABRA7D0H统一社会信用代码
regNo500113014353471企业注册号
orgNo91500113MAABRA7D0H组织机构号
status存续(在营、开业、在册)工商公示经营状态原文
newStatus存续清洗后状态:存续 / 注销 / 吊销 / 撤销 / 迁出 / 设立中 / 清算中 / 停业 / 其他 / 歇业 / 责令关闭
operName李伦智法定代表人姓名
title法定代表人代表人职务
operTypePP 个人,C 公司
registCapi100 万人民币注册资本
actualCapi-实缴资本
currencyUnitCNY货币单位
startDate2021-06-02成立日期
termStart2021-06-02营业开始日期
termEnd-营业结束日期;- 表示长期
endDate-注销日期
checkDate2021-06-02最近一次核准日期
revokeDate-吊销日期
revokeReason-吊销原因
logoutReason-注销原因
econKind有限责任公司企业类型
econKindCode1100企业类型代码
typeNew0101 大陆企业 / 02 社会组织 / 03 机关及事业单位 / 04 港澳台及国外 / 05 律所及其他
categoryNew01156010115601 企业 / 0115602 个体 / 0115603 农民专业合作社
domainD4511国民经济行业四级代码
address重庆市巴南区……注册地址
belongOrg重庆市巴南区市场监督管理局登记机关
districtCode500110所属行政区划代码
scope许可项目:住宅室内装饰装修……完整经营范围
tags[]企业标签:1 新三板 / 6 主板上市 / 9 香港上市 / 17 高新企业 / 40 暂停上市 / 41 终止上市
historyNames[]历史名称
fenname-企业英文名

3.3 partners[]:股东与出资

字段示例含义
name李伦智股东名称
stockType自然人股东股东类型
identifyType-证件类型;- 表示未公示
identifyNo-证件号码;- 表示未公示
stockPercent1.0持股比例,小数形式(1.0 = 100%)
totalRealCapi-实缴出资总额
totalShouldCapi100 万人民币认缴出资总额
startDate2021-06-02出资 / 首次认缴日期
shouldCapiItems[{date, capi, type}]认缴明细
realCapiItems[]实缴明细

shouldCapiItems[] / realCapiItems[] 元素:date(出资日期)、capi(金额,如 100 万人民币)、type(出资方式,如 货币)。

3.4 changeRecords[]:工商变更

字段示例含义
changeItem章程备案变更事项
changeDate2021-07-15变更日期
beforeContent-变更前内容
afterContent同意启用新章程变更后内容
tag非历史信息非历史信息 / 历史信息
type章程备案变更章程备案 / 注册资金 / 住所 / 股东股权 / 人员 / 地址 / 经营范围 / 其他 变更

3.5 socialSecurity[]:分年度社保参保

字段示例含义
reportYear2024年报所属年份
reportDate2025-03-18年报公示日期
name重庆可乐家装饰工程有限公司企业名称
dwJeDisplay / bqJeDisplay / dwJsDisplay企业选择不公示缴费基数 / 实际缴费 / 累计欠缴是否公示
insuranceNum3人城镇职工基本养老保险参保人数
basicEndownmentNum3人基本养老保险参保人数
unenploymentNum3人失业保险参保人数
injuryInsuranceNum3人工伤保险参保人数
birthNum / birthInsuranceCount0人生育保险参保人数
basicMedicalAmount / actualMedicalAmount / baseMedicalDownBalance-医疗保险缴费基数 / 实缴 / 欠缴
unenploymentInsurance / actualLostAmount / unenploymentDownBalance-失业保险相关金额
endownmentInsuranceAmount / endownmentBaseAmount / actualEndownmentAmount-养老保险相关金额
injuryInsuranceAmount / actualInjuryAmount / companyInjuryDownBalance-工伤保险相关金额
birthAmount / birthActualAmount-生育保险相关金额

3.6 三个字段口径

  1. - 不等于 null,也不等于 0。它是工商数据里的「未公示 / 长期 / 无值」占位符,展示时写「—」即可。
  2. 缺失字符串是 "",缺失数组是 [],不用 null 表示,解析时按空值兜底即可。
  3. 上游内部 id 与法定代表人身份哈希 operPid 不对外返回,不要依赖。

四、调用示例

4.1 curl

curl -s -G "https://api.xujian.tech/openapi/enterprise/detail" \
  --data-urlencode "keyword=91500113MAABRA7D0H" \
  -H "X-API-Key: 你的APIKey"

4.2 Java(Hutool)

import cn.hutool.http.HttpRequest;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;

public class EnterpriseDetailClient {

    private static final String API_URL = "https://api.xujian.tech/openapi/enterprise/detail";

    /**
     * 查询企业详细信息
     *
     * @param apiKey  开发者 API Key
     * @param keyword 企业全称或统一社会信用代码
     * @return data 节点;查不到或失败返回 null,且不扣费
     */
    public static JSONObject detail(String apiKey, String keyword) {
        JSONObject json = JSONUtil.parseObj(
                HttpRequest.get(API_URL)
                        .header("X-API-Key", apiKey)
                        .form("keyword", keyword)
                        .timeout(20000)
                        .execute().body());
        if (json.getInt("code") == null || json.getInt("code") != 0) {
            System.out.println("查询失败(不收费):" + json.getStr("msg"));
            return null;
        }
        return json.getJSONObject("data");
    }

    public static void main(String[] args) {
        JSONObject data = detail("你的APIKey", "91500113MAABRA7D0H");
        if (data == null) {
            return;
        }
        JSONObject basic = data.getJSONObject("basicInfo");
        System.out.printf("%s | %s | 法人 %s | 注册资本 %s | 股东 %d 人%n",
                basic.getStr("name"), basic.getStr("newStatus"), basic.getStr("operName"),
                basic.getStr("registCapi"), data.getJSONArray("partners").size());
    }
}

4.3 Python

import requests


def enterprise_detail(api_key: str, keyword: str):
    """返回 data 节点;查不到或失败返回 None,且不扣费"""
    resp = requests.get(
        "https://api.xujian.tech/openapi/enterprise/detail",
        params={"keyword": keyword},
        headers={"X-API-Key": api_key},
        timeout=20,
    )
    result = resp.json()
    if result.get("code") != 0:
        print("查询失败(不收费):", result.get("msg"))
        return None
    return result["data"]


if __name__ == "__main__":
    data = enterprise_detail("你的APIKey", "91500113MAABRA7D0H")
    if data:
        print(data["basicInfo"]["name"], data["basicInfo"]["newStatus"])

4.4 JavaScript

async function enterpriseDetail(apiKey, keyword) {
  const qs = new URLSearchParams({ keyword }).toString();
  const resp = await fetch(
    `https://api.xujian.tech/openapi/enterprise/detail?${qs}`,
    { headers: { "X-API-Key": apiKey } }
  );
  const result = await resp.json();
  if (result.code !== 0) {
    throw new Error(result.msg);
  }
  return result.data;
}

五、返回示例

{
  "code": 0,
  "msg": "success",
  "data": {
    "keyword": "91500113MAABRA7D0H",
    "basicInfo": {
      "name": "重庆可乐家装饰工程有限公司",
      "creditNo": "91500113MAABRA7D0H",
      "regNo": "500113014353471",
      "status": "存续(在营、开业、在册)",
      "newStatus": "存续",
      "operName": "李伦智",
      "registCapi": "100 万人民币",
      "actualCapi": "-",
      "startDate": "2021-06-02",
      "termEnd": "-",
      "econKind": "有限责任公司",
      "domain": "D4511",
      "address": "重庆市巴南区龙洲湾街道龙洲大道255号17-1",
      "belongOrg": "重庆市巴南区市场监督管理局",
      "districtCode": "500110",
      "scope": "许可项目:住宅室内装饰装修(依法须经批准的项目,经相关部门批准后方可开展经营活动)",
      "tags": [],
      "historyNames": []
    },
    "partners": [
      {
        "name": "李伦智",
        "stockType": "自然人股东",
        "stockPercent": "1.0",
        "totalShouldCapi": "100 万人民币",
        "shouldCapiItems": [{"date": "2021-06-02", "capi": "100 万人民币", "type": "货币"}],
        "realCapiItems": []
      }
    ],
    "changeRecords": [
      {
        "changeItem": "章程备案",
        "changeDate": "2021-07-15",
        "beforeContent": "-",
        "afterContent": "同意启用新章程",
        "tag": "非历史信息",
        "type": "章程备案变更"
      }
    ],
    "socialSecurity": [
      {
        "reportYear": "2024",
        "reportDate": "2025-03-18",
        "insuranceNum": "3人",
        "basicEndownmentNum": "3人",
        "unenploymentNum": "3人",
        "injuryInsuranceNum": "3人",
        "birthNum": "0人"
      }
    ],
    "apiCode": "enterprise.detail",
    "apiName": "企业详细信息综合查询",
    "chargeType": "PER_CALL",
    "balance": 99.4800,
    "costMs": 1860
  }
}

查不到(不收费):

{
  "code": 500,
  "msg": "未查询到该企业的详细信息,请核对企业名称或更换统一社会信用代码后重试;本次调用不计费",
  "data": null
}

六、可直接复用的两段代码

6.1 准入初筛:状态 + 规模 + 股东

def pre_check(data: dict) -> dict:
    """返回一份可读的准入结论"""
    basic = data["basicInfo"]
    partners = data.get("partners") or []
    social = data.get("socialSecurity") or []
    latest = social[0] if social else {}

    return {
        "name": basic.get("name"),
        "credit_no": basic.get("creditNo"),
        "status": basic.get("newStatus"),
        "alive": basic.get("newStatus") == "存续",
        "regist_capi": basic.get("registCapi"),
        "legal_person": basic.get("operName"),
        "partner_count": len(partners),
        "staff_hint": latest.get("insuranceNum"),
        "risk": [] if basic.get("newStatus") == "存续" else ["经营状态异常"],
    }

6.2 变更记录里找敏感变动

SENSITIVE = {"股东股权变更", "注册资金变更", "人员变更", "住所变更", "经营范围变更"}


def sensitive_changes(data: dict):
    """挑出需要人工复核的变更事项"""
    rows = data.get("changeRecords") or []
    return [r for r in rows if r.get("type") in SENSITIVE]

七、实践建议

  1. 关键词优先用信用代码。18 位信用代码唯一,名称要精确匹配全称,模糊查不到。
  2. 超时至少 15 秒。接口要向多个维度取数,典型 1 ~ 3 秒,costMs 会告诉你真实耗时。
  3. 本地缓存结果。工商数据变动不频繁,按企业缓存 30 ~ 90 天,重复查询直接读库,省下 0.52 元/次。
  4. - 不要当空值处理成 0。termEnd = - 是「长期」,转成 0 会算出「已过期」的错误结论。
  5. stockPercent 是小数。1.0 表示 100%,展示时乘 100。
  6. 参保人数只作参考。很多企业选择不公示金额字段,参保人数是「3人」这种带单位的文本。
  7. 复用 creditNo 做主键。企业名称可能变更(historyNames 会记录),信用代码不会变。
  8. 查不到不收费,可以放心重试。但重试前先确认名称是否准确,避免无效调用堆积。

八、错误码与排查

codemsg是否扣费
0success扣费(查到企业后结算)
500缺少请求头 X-API-Key否
500API Key 无效 / API Key 已停用否
500客户不存在或已停用否
500接口不存在或已停用否
500余额不足,请先充值否
500keyword 不能为空否
500keyword 至少需要 2 个字符(建议使用企业全称或统一社会信用代码)否
500keyword 长度不能超过 50 个字符否
500数据服务未启用 / 数据服务未配置(上游凭证缺失)否
500未查询到该企业的详细信息,请核对企业名称或更换统一社会信用代码后重试;本次调用不计费否
500数据服务暂时不可用(请求上游超时或网络异常),本次调用不计费否

结算判定很简单:只有 basicInfo.name 有值时才扣费。其余所有失败分支都不产生费用。

九、计费与接入

项目说明
单价0.52 元/次
计费方式按次计费;preAuthorize 预校验 → 查询 → 查到企业后 settle 扣费
不计费场景关键词为空 / 少于 2 字符 / 超过 50 字符、服务未启用或凭证缺失、上游超时或返回异常、未查询到该企业、Key / 客户 / 接口校验失败、余额不足
返回条数无 limit、无分页,四个维度按上游实际结果完整返回

接入流程:注册开发者账号 → 控制台创建 API Key → 请求头带上 X-API-Key 即可调用,无需签名或加密。控制台可查看调用量、扣费流水与余额。

服务站点:api.xujian.tech(纯文本域名,不做跳转)。接口试用、数据与充值咨询可在控制台提交工单,或联系 Vxujian_cq。

十、小结

一个关键词换回四个维度的结构化数据,省掉的是「查四遍、拼四套、口径还要自己对齐」的工作量。几个取舍值得记住:

  • 查不到不收费:先校正名称再查,试错成本是 0;
  • - 是业务占位:表示未公示 / 长期 / 无值,别当成 0 参与计算;
  • 信用代码是最佳主键:名称会变,代码不变;
  • 缓存价值高:工商数据低频变动,缓存一次能省下不少调用成本。

同系列还有:enterprise.query(0.01 元/次,名称模糊查询,适合先校正全称)、enterprise.profile(0.2 元/次,只要 33 项照面)、enterprise.abnormal 与 enterprise.dishonesty(各 0.2 元/次,经营异常与失信记录)、enterprise.report(0.3 元/次,多年度工商年报)。按需组合,比一律查最贵的接口更划算。

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/xujianflying/article/details/167173490

文章来源转载

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--