对接企查查Api接口-税号开票信息
对接企查查Api接口-税号开票信息
1. 背景
公司最近上了一款小程序,提供了一个功能:开票服务。为了提高后台员工的审核效率,需要提供一键校验客户提交的记录和api返回的税务开票信息一致。如果发现不一致,需要立即告知用户信息填写有误,提高用户使用的便利性。
2.调研
百度搜了税务开票的关键字,一堆广告有相关方面的介绍。随便点了几个,花里胡哨的感觉就很麻烦。这个时候同事说,你搜下专门做企业信息查询的那些公司呢。我百度单独搜了启信宝、天眼查以及企查查。
想立即使用并看效果的可以直接使用企查查的开放平台,价格也不贵,调取一次收费0.2元。我一开始以为可以用免费赠送的20次调取看了下返回结果,结果发现需要先企业认证。
3.对接开发
先来到企查查官网,企查查的官网可以从数据服务的数据接口中找到该产品,也可以直接访问地址企查查数据接口服务。
进入到后台界面后,如果想要大量使用的话,需要企业实名认证一下,我还看到有个高级实名认证,对于现在的常见普通认证也够了。认证没有先下来,但我可以先开发。等认证成功了可以用免费赠送的20次调试使用。
4. 使用postMan测试
审核被告成功后,可以直接从后台管理系统中我的接口菜单栏查询到用户的key和secret
教大家一个快速使用postman调取api的方法,加密的脚本可以直接在postman中生成,调试时减少一开始的开发量。
如图:
脚本加密
相关脚本代码:
var key = "xxxxxxx"; var SecretKey = "xxxxxxx"; postman.setGlobalVariable("key",key); var timestamp = Math.round(new Date().getTime()); var result = timestamp.toString().substring(0,10); postman.setGlobalVariable("timestamp",result); var str = key+result+SecretKey; var strmd5 = CryptoJS.MD5(str).toString().toUpperCase().toString(); postman.setGlobalVariable("strmd5",strmd5) console.log(strmd5)
key和secret传入自己的后台管理系统显示的。
header处如图展示:
如果是完全按照我说的教程来调试的话,调用就能得到税号开票信息。
5. 测试本地接口
本身业务逻辑不复杂,这个是单独提供了一个接口,在后台调用api返回结果给前端。
具体实现就是使用hultool.http的包下的HttpRequest.get(url + params).header("Timespan", time.toString() ).header("Token", md5Str.toUpperCase()).execute().body()来实现,需要对结果进行200处理和无返回数据的业务处理。
具体核心代码如下:
` public String taxIdqueryInfo(@RequestParam String name) {
//AppKey
String appKey = "xxxxxx";
String secret = "xxxxxx";
String url = " https://api.qichacha.com/ECICreditCode/GetCreditCodeNew";
//header params
//Token 验证加密值 Md5(key+Timespan+SecretKey) 加密的32位大写字符串)
//Timespan 精确到秒的Unix时间戳
Long time = LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().getEpochSecond();
String md5Str = DigestUtil.md5Hex(String.format("%s%s%s", appKey, time, secret));
//query params
String params = String.format("?key=%s&keyWord=%s", appKey, name);
String data = HttpRequest.get(url + params).header("Timespan", time.toString() ).header("Token", md5Str.toUpperCase()).execute().body();
if (StringUtils.isEmpty(data)) {
return "接口无数据!";
}
JSONObject jsonObject = JSONObject.parseObject(data);
String code = jsonObject.getString("Status");
if ("200".equals(code)) {
String result = jsonObject.getString("Result");
TaxIdInfo taxIdInfo = JSONArray.parseObject(result, TaxIdInfo.class);
if (taxIdInfo == null) {
return "接口无数据!";
}
return JSON.toJSONString(taxIdInfo);
}
else {
return "接口无数据!";
}
}`
接口调试结果:
5. 总结
为什么留在后台审核人员来触发调用api呢,因为这个我们能可控的。如果放在小程序端直接让客户调取,可能会导致无用的请求,浪费api余额或者调用次数。另外企查查是企业信息查询的头部公司,提供的客服服务也很到位。如果您也是和我一样的场景,可以参考我的流程。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义