拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

企业经营异常查询 API 实战:列入原因、移出原因与决定机关一次拿到

企业经营异常查询 API 实战:列入原因、移出原因与决定机关一次拿到 企业经营异常查询 API 实战列入原因、移出原因与决定机关一次拿到失信被执行人之外「经营异常名录」是另一类高频但容易被忽略的风险信号企业未按时报送年度报告、登记的住所无法联系、公示信息弄虚作假都会被市场监管部门列入经营异常名录并公示。它比失信更轻、更常见也更容易在数据里被漏掉——很多风控系统只查失信而忘了这一项。本文介绍一个经营异常查询接口一个关键词进去返回该企业全部经营异常记录的列入原因、列入日期、列入机关、移出原因、移出日期、移出机关并且没有记录不收费。api.xujian.techVxujian_cq一、为什么「经营异常」值得单独查难点具体表现信号更轻量更常见未报送年报、地址失联在中小微企业里非常普遍命中率远高于失信被低估的风险不列入失信名单不等于健康长期列入经营异常往往预示经营停滞或空壳化列入 / 移出成对出现只查「是否被列入」会漏掉「曾列入但已整改移出」这个正面信号地域分散按登记机关省/市/区市场监管局分布跨区域经营的企业可能有多条记录公示文本不规范列入原因是自然语言描述很难做归因统计与年报状态联动「未依照规定期限公示年度报告」这类原因本质上是年报缺失导致的可交叉验证单独做一个接口的好处成本极低0.2 元/次、「无记录」不收费可以毫无顾虑地挂在准入流程的默认检查项里。二、接口能力概览2.1 接口基础信息项目说明接口地址https://api.xujian.tech/openapi/enterprise/abnormal接口编码enterprise.abnormal请求方式GETkeyword放 Query String鉴权方式请求头X-API-Key不做签名、时间戳或加密返回格式JSONContent-Type: application/json;charsetUTF-8单次费用0.2 元/次关键词长度2 ~ 50 个字符单次返回该企业全部经营异常记录含已移出典型耗时数百毫秒 ~ 数秒响应体costMs字段为本次真实耗时在线文档https://api.xujian.tech/api/enterprise-abnormal2.2 请求参数请求头参数名必填说明X-API-Key是开发者 API Key缺失或无效直接返回失败业务参数参数名必填类型示例说明keyword是String重庆某某贸易有限公司企业全称或统一社会信用代码长度 2 ~ 50 字符关键词同时兼容企业全称与统一社会信用代码。同省同名概率不低建议优先使用 18 位信用代码。2.3 计费上比较实在的一点接口是先预鉴权、查到结果后再扣费的两段式流程。下面这些情况直接返回失败不扣费、不写扣费流水、不累加调用次数keyword为空、少于 2 个字符或超过 50 个字符上游数据服务暂时不可用超时或网络异常该企业没有经营异常记录包括「从未被列入」和「已全部移出且无在案记录」。把它作为准入流程的默认检查项时绝大多数正常企业都是「无记录」也就是绝大多数调用不产生费用。三、返回字段详解3.1 顶层字段字段类型说明codeint0成功非 0 失败常见为500msgString结果描述成功为success失败为具体原因dataObject业务数据失败时为null3.2 data 字段字段类型示例说明keywordString重庆某某贸易有限公司本次实际使用的查询关键词totalint2本次返回的经营异常记录条数listArray[…]经营异常记录列表apiCodeStringenterprise.abnormal接口编码apiNameString企业经营异常查询接口名称chargeTypeStringPER_CALL计费类型balanceBigDecimal99.9700调用完成后已扣费的账户余额元costMsLong760本次调用耗时毫秒3.3 list[] 经营异常记录字段字段示例说明name重庆某某贸易有限公司企业完整名称regNo500113014353471企业注册号 / 统一社会信用代码inReason未依照《企业信息公示暂行条例》第八条规定的期限公示年度报告列入经营异常名录原因inDate2023-07-14列入日期YYYY-MM-DDdepartment重庆市巴南区市场监督管理局作出列入决定的行政机关outReason列入经营异常名录3年内且依照《经营异常名录管理办法》第十条规定被列入经营异常名录后已经补报了未报年份的年度报告并公示移出原因未移出时为空字符串outDate2023-11-20移出日期未移出时为空字符串outDepartment重庆市巴南区市场监督管理局作出移出决定的行政机关province重庆省份含简称说明口径如TJ-天津disabled0记录状态0当前有效信息在案1历史信息常见的列入原因inReason有四列入原因含义可采取的整改动作未依照规定期限公示年度报告年报漏报补报年报后申请移出通过登记的住所或者经营场所无法联系地址失联变更登记地址或接受实地检查公示企业信息隐瞒真实情况、弄虚作假信息不实更正公示信息未依法即时公示应当公示的企业信息信息未公示补全即时信息公示两个字段设计上的细节一是disabled决定「当前是否在案」outDate为空时通常意味着尚未移出两者配合判断最稳二是所有字段未取到时统一返回空字符串而不是null调用方不必到处判空。四、调用示例4.1 curlcurl-s-Ghttps://api.xujian.tech/openapi/enterprise/abnormal\--data-urlencodekeyword重庆某某贸易有限公司\-HX-API-Key: 你的APIKey4.2 JavaHutoolimportcn.hutool.http.HttpRequest;importcn.hutool.json.JSONArray;importcn.hutool.json.JSONObject;importcn.hutool.json.JSONUtil;publicclassEnterpriseAbnormalClient{privatestaticfinalStringAPI_URLhttps://api.xujian.tech/openapi/enterprise/abnormal;/** * 查询企业经营异常记录 * * param apiKey 开发者 API Key * param keyword 企业全称或统一社会信用代码 * return 经营异常记录列表无记录或查询失败返回 null且不扣费 */publicstaticJSONArrayabnormal(StringapiKey,Stringkeyword){StringbodyHttpRequest.get(API_URL).form(keyword,keyword).header(X-API-Key,apiKey).timeout(20000).execute().body();JSONObjectjsonJSONUtil.parseObj(body);Integercodejson.getInt(code);if(codenull||code!0){System.out.println(查询失败不收费json.getStr(msg));returnnull;}returnjson.getJSONObject(data).getJSONArray(list);}publicstaticvoidmain(String[]args){JSONArraylistabnormal(你的APIKey,重庆某某贸易有限公司);if(listnull){return;// 无经营异常记录同样不收费}for(inti0;ilist.size();i){JSONObjectrlist.getJSONObject(i);booleaninForcer.getStr(outDate).isEmpty()0.equals(r.getStr(disabled));System.out.printf(%s 列入 | 原因%s | 是否在案%s%n,r.getStr(inDate),r.getStr(inReason),inForce);}}}4.3 Pythonimportrequestsdefenterprise_abnormal(api_key:str,keyword:str): 查询企业经营异常记录 Args: api_key: 开发者 API Key keyword: 企业全称或统一社会信用代码2 ~ 50 字符 Returns: list: 成功返回经营异常记录列表无记录或失败返回 None且不扣费 resprequests.get(https://api.xujian.tech/openapi/enterprise/abnormal,params{keyword:keyword},headers{X-API-Key:api_key},timeout20,)resultresp.json()ifresult.get(code)!0:print(查询失败不收费,result.get(msg))returnNonereturnresult[data][list]defis_currently_abnormal(api_key:str,keyword:str)-bool:是否当前仍在经营异常名录中未移出且记录有效recordsenterprise_abnormal(api_key,keyword)or[]returnany(notr.get(outDate)andr.get(disabled)0forrinrecords)if__name____main__:print(is_currently_abnormal(你的APIKey,重庆某某贸易有限公司))4.4 JavaScript浏览器 / Node 18constrespawaitfetch(https://api.xujian.tech/openapi/enterprise/abnormal?keywordencodeURIComponent(重庆某某贸易有限公司),{headers:{X-API-Key:API_KEY}});const{code,msg,data}awaitresp.json();if(code0){constinForcedata.list.filter((r)!r.outDater.disabled0);console.log(在案经营异常,inForce.length,条);}else{console.warn(查询失败不收费,msg);}五、返回示例5.1 一条已移出、一条仍在案{code:0,msg:success,data:{keyword:重庆某某贸易有限公司,total:2,list:[{name:重庆某某贸易有限公司,regNo:500113014353471,inReason:未依照《企业信息公示暂行条例》第八条规定的期限公示年度报告,inDate:2023-07-14,outReason:列入经营异常名录3年内且依照《经营异常名录管理办法》第十条规定被列入经营异常名录后已经补报了未报年份的年度报告并公示,outDate:2023-11-20,department:重庆市巴南区市场监督管理局,outDepartment:重庆市巴南区市场监督管理局,province:CQ-重庆,disabled:1},{name:重庆某某贸易有限公司,regNo:500113014353471,inReason:通过登记的住所或者经营场所无法联系,inDate:2024-09-03,outReason:,outDate:,department:重庆市巴南区市场监督管理局,outDepartment:,province:CQ-重庆,disabled:0}],apiCode:enterprise.abnormal,apiName:企业经营异常查询,chargeType:PER_CALL,balance:99.9700,costMs:760}}第一条已经补报年报并公示后移出disabled1第二条因地址失联被列入且尚未移出outDate为空、disabled0是真正需要关注的那一条。5.2 无经营异常记录不收费{code:500,msg:未查询到该企业的经营异常记录无记录也是一种结论本次调用不计费,data:null}六、典型应用场景6.1 准入流程的默认检查项由于「无记录不收费」这个接口很适合放在准入流程第一步defadmission_gate(api_key:str,company:str)-dict:准入前置检查经营异常 失信recordsenterprise_abnormal(api_key,company)or[]in_force[rforrinrecordsifnotr.get(outDate)andr.get(disabled)0]ifin_force:return{pass:False,reason:in_force[0][inReason],date:in_force[0][inDate],department:in_force[0][department],}return{pass:True,history:len(records)}6.2 存量客户的定期巡检每半年扫一遍存量客户只看「新列入」的记录publicListJSONObjectfindNewlyAbnormal(JSONArrayrecords,LocalDatelastScan){ListJSONObjecthitsnewArrayList();for(inti0;irecords.size();i){JSONObjectrrecords.getJSONObject(i);if(!0.equals(r.getStr(disabled))){continue;// 历史信息不参与增量判断}LocalDateinDateLocalDate.parse(r.getStr(inDate));if(!inDate.isBefore(lastScan)){hits.add(r);}}returnhits;}6.3 列入原因归因统计inReason虽然偏自然语言但常见的四种列入原因句式固定可以归桶functionbucket(reason){if(reason.includes(年度报告))return年报漏报;if(reason.includes(住所)||reason.includes(经营场所))return地址失联;if(reason.includes(弄虚作假))return公示不实;if(reason.includes(即时公示))return未即时公示;return其他;}conststatsdata.list.reduce((m,r){constkbucket(r.inReason);m[k](m[k]||0)1;returnm;},{});归因结果对存量客户整改很有用——年报漏报可以主动提醒地址失联则需要线下确认。6.4 与年报数据交叉验证「未公示年度报告」这类原因可以直接与年报查询结果比对defcross_check(api_key:str,company:str,expect_year:str)-str:年报缺失 经营异常原因一致性检查reportsenterprise_report(api_key,company)or[]has_yearany(r.get(reportYear)expect_yearforrinreports)recordsenterprise_abnormal(api_key,company)or[]missing_report[rforrinrecordsif年度报告inr.get(inReason,)]ifnothas_yearandmissing_report:return确认确因缺报年报被列入ifhas_yearandmissing_report:return不一致已补年报但未移出名录需人工确认return无相关异常七、提升可用性的几条实践建议判断「在案」要两个条件同时满足outDate为空且disabled 0。只看其中一个都可能误判。历史记录同样有用。曾经被列入但已移出说明该企业有过合规瑕疵可作为轻度负面信号而非直接否决。「查无记录」是正常结论不是错误。接口在查不到时返回code500并明确「本次调用不计费」业务侧应翻译成「未见异常」。优先使用统一社会信用代码。同省同名主体不少名称查询容易串。缓存周期建议 30 天。经营异常名录按月更新太频繁查询意义不大。结论入库要带上查询时间。列入 / 移出随时发生只存布尔值无法回溯。八、错误码与排查codemsg示例处理建议0success调用成功500缺少请求头 X-API-Key在请求头补充X-API-Key500API Key 无效 / API Key 已停用检查 Key 是否正确或在控制台重新启用500客户不存在或已停用联系平台确认账号状态500接口不存在或已停用确认enterprise.abnormal当前是否维护中500余额不足请先充值按次计费接口调用前校验余额余额不足不扣费充值后重试500keyword 不能为空补充keyword参数不计费500keyword 至少需要 2 个字符建议使用企业全称或统一社会信用代码使用更完整的企业名称不计费500keyword 长度不能超过 50 个字符缩短关键词不计费500未查询到该企业的经营异常记录无记录也是一种结论该企业当前无经营异常不计费500数据服务暂时不可用请求上游超时或网络异常稍后重试不计费九、计费与接入项目说明单次费用0.2 元/次计费方式按次计费调用前校验余额查询到经营异常记录后才扣费不计费场景关键词为空 / 超长、服务暂时不可用、无经营异常记录典型成本批量名单里大多数企业无记录实际付费调用占比很低接入流程注册开发者账号 → 控制台创建 API Key → 请求头带上X-API-Key即可调用无需签名或加密。控制台可查看调用量、扣费流水与余额。控制台地址https://api.xujian.tech接口接入、数据与充值相关问题可联系微信xujian_cq。十、总结经营异常是相较失信更轻量、也更普遍的风险信号。它容易被忽略的原因很简单不像失信那样有明确的「一票否决」含义。但对于要参加招投标、接入供应链金融、申请政策扶持的企业来说一条在案的经营异常记录往往就是「经营已经停滞」的前兆。这个接口的价值在于把分散在各登记机关的列入 / 移出记录聚合成结构化数据并且无记录不收费作为准入流程的默认检查项绝大多数调用不产生费用列入 / 移出成对返回既能判断当前是否在案也能看到是否已整改原因字段保留原文便于按四种常见列入原因归因统计指导客户整改不返回 null字段统一空字符串调用方少写判空。
返回列表