企查查開放API測試


1.首先申請企查查賬號和20次免費測試

 

 2.可以下載企查查提供的demo

這里記錄一下我自己的項目

pom.xml

<dependencies>
        <!--Hutool是一個小而全的Java工具類庫-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.4.1</version>
        </dependency>
        <!-- httpclient -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.1</version>
        </dependency>

    </dependencies>

HttpHelper

package org.ld.httpGetDemo;


import java.io.IOException;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.util.EntityUtils;

/**
 * 描述 http請求處理模塊
 */
public class HttpHelper {

    // get 請求
    public static String httpGet(String url, Header[] headers) throws Exception {
        HttpUriRequest uriRequest = new HttpGet(url);
        if (null != headers)
            uriRequest.setHeaders(headers);
        CloseableHttpClient httpClient = null;
        try {
            httpClient = declareHttpClientSSL(url);
            CloseableHttpResponse httpresponse = httpClient.execute(uriRequest);
            HttpEntity httpEntity = httpresponse.getEntity();
            String result = EntityUtils.toString(httpEntity, REQ_ENCODEING_UTF8);
            return result;
        } catch (ClientProtocolException e) {
            System.out.println(String.format("http請求失敗,uri{%s},exception{%s}", new Object[] { url, e }));
        } catch (IOException e) {
            System.out.println(String.format("IO Exception,uri{%s},exception{%s}", new Object[] { url, e }));
        } finally {
            if (null != httpClient)
                httpClient.close();
        }
        return null;
    }

    // post 請求
    public static String httpPost(String url, String params) throws Exception {
        HttpPost post = new HttpPost(url);
        post.addHeader("Content-Type", "application/json;charset=" + REQ_ENCODEING_UTF8);
        // 設置傳輸編碼格式
        StringEntity stringEntity = new StringEntity(params, REQ_ENCODEING_UTF8);
        stringEntity.setContentEncoding(REQ_ENCODEING_UTF8);
        post.setEntity(stringEntity);
        HttpResponse httpresponse = null;
        CloseableHttpClient httpClient = null;
        try {
            httpClient = declareHttpClientSSL(url);
            httpresponse = httpClient.execute(post);
            HttpEntity httpEntity = httpresponse.getEntity();
            String result = EntityUtils.toString(httpEntity, REQ_ENCODEING_UTF8);
            return result;
        } catch (ClientProtocolException e) {
            System.out.println(String.format("http請求失敗,uri{%s},exception{%s}", new Object[] { url, e }));
        } catch (IOException e) {
            System.out.println(String.format("IO Exception,uri{%s},exception{%s}", new Object[] { url, e }));
        } finally {
            if (null != httpClient)
                httpClient.close();
        }
        return null;
    }

    private static CloseableHttpClient declareHttpClientSSL(String url) {
        if (url.startsWith("https://")) {
            return sslClient();
        } else {
            return HttpClientBuilder.create().setConnectionManager(httpClientConnectionManager).build();
        }
    }

    /**
     * 設置SSL請求處理
     */
    private static CloseableHttpClient sslClient() {
        try {
            SSLContext ctx = SSLContext.getInstance("TLS");
            X509TrustManager tm = new X509TrustManager() {
                public X509Certificate[] getAcceptedIssuers() {
                    return null;
                }

                public void checkClientTrusted(X509Certificate[] xcs, String str) {
                }

                public void checkServerTrusted(X509Certificate[] xcs, String str) {
                }
            };
            ctx.init(null, new TrustManager[] { tm }, null);
            SSLConnectionSocketFactory sslConnectionSocketFactory = SSLConnectionSocketFactory.getSocketFactory();
            return HttpClients.custom().setSSLSocketFactory(sslConnectionSocketFactory).build();
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e);
        } catch (KeyManagementException e) {
            throw new RuntimeException(e);
        }
    }

    // this is config
    private static final String REQ_ENCODEING_UTF8 = "utf-8";
    private static PoolingHttpClientConnectionManager httpClientConnectionManager;

    public HttpHelper() {
        httpClientConnectionManager = new PoolingHttpClientConnectionManager();
        httpClientConnectionManager.setMaxTotal(100);
        httpClientConnectionManager.setDefaultMaxPerRoute(20);
    }

    // get 請求
    public static String httpGet(String url) throws Exception {
        return httpGet(url, null);
    }
}

測試類

package org.ld.httpGetDemo;

import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.bejson.pojo.JsonRootBean;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.http.client.methods.HttpHead;


/**
 * @author 陸賽賽
 * 企查查API測試
 * 測試結果:
 *1.keyword必填,可以是公司名、注冊號或社會統一信用代碼
 * 2.pageIndex頁碼,默認第一頁
 * 3.pageSize每頁條數,默認為10,最大不超過20條
 * 4.keyword不能用城市名,會顯示傳入參數有誤,請檢查
 * 5.一般數據量較大,常以千/萬條為單位,分頁查找較為麻煩
 * 6.若要精確查找,需要填注冊號或社會統一信用代碼
 */
public class MainApp {

    // 查看我的秘鑰 我的Key
    private static final String appkey = "e003ad0571ec4623bde67753d81a6267";
    private static final String seckey = "46432E9F056594D6DC10A712205FC2C3";

    //公司名、注冊號或社會統一信用代碼
    private static String keyword="恆信";
    private static Integer pageIndex=null;//頁碼,默認第一頁
    private static Integer pageSize=null;//每頁條數,默認為10,最大不超過20條

    public static void main(String[] args) throws Exception {
        String jsonStr = createUrlForQiChaCha(keyword, pageIndex, pageSize);
        //1.使用工具類轉換為JSONObject
        JSONObject jsonObject = JSONUtil.parseObj(jsonStr);
        //2.JSONObject對象轉換為JavaBean
        JsonRootBean jsonRootBean = JSONUtil.toBean(jsonObject, JsonRootBean.class);
        System.out.println(jsonRootBean);
    }

    // 請求頭配置
    public static final String[] RandomAuthentHeader() {
        String timeSpan = String.valueOf(System.currentTimeMillis() / 1000);
        String[] authentHeaders = new String[] { DigestUtils.md5Hex(appkey.concat(timeSpan).concat(seckey)).toUpperCase(), timeSpan };
        return authentHeaders;
    }

    //發送http請求,返回企查查開放接口的json字符串
    public static String createUrlForQiChaCha(String keyword,Integer pageIndex,Integer pageSize) throws Exception {
        //默認
        String reqInterNme = "http://api.qichacha.com/ECIV4/Search";
        String paramStr = "keyword="+keyword;
        //請求頭配置
        HttpHead reqHeader = new HttpHead();
        String[] autherHeader = RandomAuthentHeader();
        reqHeader.setHeader("Token", autherHeader[0]);
        reqHeader.setHeader("Timespan", autherHeader[1]);
        //配置url
        String reqUri = reqInterNme.concat("?key=").concat(appkey).concat("&").concat(paramStr);
        //如果配置了頁碼和每頁條數,url后加上下列參數
        if(pageIndex!=null && pageSize!=null){
            reqUri=reqUri+"&pageIndex="+pageIndex+"&pageSize="+pageSize;
        }
        //Get請求訪問企查查開放接口
        String tokenJson = HttpHelper.httpGet(reqUri, reqHeader.getAllHeaders());
        return tokenJson;
    }



}

api返回值封裝成Javabean

package com.bejson.pojo;
import java.util.List;

public class JsonRootBean {

    private Paging Paging;//頁碼相關對象
    private List<Result> Result;//返回數據
    /*
     101當前的KEY無效或者還未生效中
     102當前KEY已欠費
     103當前Key被暫停使用
     104接口正在維護中
     105接口已下線停用
     107被禁止的IP或者簽名錯誤
     108請求格式錯誤,請重試
     109請求超過系統限制
     110當前相同查詢連續出錯,請等2小時后重試
     111接口權限未開通
     112您的賬號剩余使用量已不足
     113當前接口已被刪除,請重新申請
     114當前接口已被禁用,請聯系管理員
     115身份驗證錯誤或者已過期
     199系統未知錯誤,請聯系技術客服
     200查詢成功
     201查詢無結果
     202查詢參數錯誤,請檢查
     203系統查詢有異常,請聯系技術人員
     204請至少輸入一個參數
     205等待處理中
     206無效的省份代碼
     207請求數據的條目數超過上限(5000)
     208此接口不支持此公司類型查詢
     213參數長度不能小於2
     214您還未購買過該接口,請先購買
     215不支持的查詢關鍵字
     216國家代碼不正確
     221發票校驗失敗(參數與發票號碼不對應)
     222超過發票當日查驗次數,請次日再試
     299無效的請求
     */
    private String Status;//返回碼
    private String Message;//返回信息
    private String OrderNumber;//訂單號

    public void setPaging(Paging Paging) {
         this.Paging = Paging;
     }
     public Paging getPaging() {
         return Paging;
     }

    public void setResult(List<Result> Result) {
         this.Result = Result;
     }
     public List<Result> getResult() {
         return Result;
     }

    public void setStatus(String Status) {
         this.Status = Status;
     }
     public String getStatus() {
         return Status;
     }

    public void setMessage(String Message) {
         this.Message = Message;
     }
     public String getMessage() {
         return Message;
     }

    public void setOrderNumber(String OrderNumber) {
         this.OrderNumber = OrderNumber;
     }
     public String getOrderNumber() {
         return OrderNumber;
     }

    @Override
    public String toString() {
        return "JsonRootBean{" +
                "Paging=" + Paging +
                ", Result=" + Result +
                ", Status='" + Status + '\'' +
                ", Message='" + Message + '\'' +
                ", OrderNumber='" + OrderNumber + '\'' +
                '}';
    }
}

 

package com.bejson.pojo;

public class Paging {

    private int PageSize;//每頁顯示條數,默認為10,最多20
    private int PageIndex;//頁數,默認為1
    private int TotalRecords;//總數量

    public void setPageSize(int PageSize) {
         this.PageSize = PageSize;
     }

     public int getPageSize() {
         return PageSize;
     }

    public void setPageIndex(int PageIndex) {
         this.PageIndex = PageIndex;
     }
     public int getPageIndex() {
         return PageIndex;
     }

    public void setTotalRecords(int TotalRecords) {
         this.TotalRecords = TotalRecords;
     }
     public int getTotalRecords() {
         return TotalRecords;
     }

    @Override
    public String toString() {
        return "Paging{" +
                "PageSize=" + PageSize +
                ", PageIndex=" + PageIndex +
                ", TotalRecords=" + TotalRecords +
                '}';
    }
}

 

package com.bejson.pojo;

import java.util.Date;

public class Result {

    private String KeyNo;//內部KeyNo
    private String Name;//公司名稱
    private String OperName;//法人名稱
    private Date StartDate;//成立日期
    private String Status;//企業狀態
    private String No;//注冊號
    private String CreditCode;//社會統一信用代碼

    public void setKeyNo(String KeyNo) {
         this.KeyNo = KeyNo;
     }
     public String getKeyNo() {
         return KeyNo;
     }

    public void setName(String Name) {
         this.Name = Name;
     }
     public String getName() {
         return Name;
     }

    public void setOperName(String OperName) {
         this.OperName = OperName;
     }
     public String getOperName() {
         return OperName;
     }

    public void setStartDate(Date StartDate) {
         this.StartDate = StartDate;
     }
     public Date getStartDate() {
         return StartDate;
     }

    public void setStatus(String Status) {
         this.Status = Status;
     }
     public String getStatus() {
         return Status;
     }

    public void setNo(String No) {
         this.No = No;
     }
     public String getNo() {
         return No;
     }

    public void setCreditCode(String CreditCode) {
         this.CreditCode = CreditCode;
     }
     public String getCreditCode() {
         return CreditCode;
     }

    @Override
    public String toString() {
        return "Result{" +
                "KeyNo='" + KeyNo + '\'' +
                ", Name='" + Name + '\'' +
                ", OperName='" + OperName + '\'' +
                ", StartDate=" + StartDate +
                ", Status='" + Status + '\'' +
                ", No='" + No + '\'' +
                ", CreditCode='" + CreditCode + '\'' +
                '}';
    }

}

執行main方法就可以了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM