1、首先需要设置token,API中要求token的格式为key+Timespan+SecretKey组成的32位md5加密的大写字符串,可以调用hutool里的SecureUtil工具类,但是生成的是小写,我们转下大写就好。token要放在http的header 头中,hutool里的get方法没有办法把信息写进header里面,所以在网上找了一个带参数的get的方法
权限验证所提到的key,SecretKey都可以在“我的接口”中查询到
下面直接上代码!
/** * 获取精确到秒的时间戳 * * @return */ public static int getSecondTimestamp(Date date) { if (null == date) { return 0; } String timestamp = String.valueOf(date.getTime()); int length = timestamp.length(); if (length > 3) { return Integer.valueOf(timestamp.substring(0, length - 3)); } else { return 0; } }
下面是带着header的get请求方法
/** * 带参数的get请求 * * @param url * @param * @return String */ public static String doGet(String url, String token, String timeSpan, Object o) { // 创建Httpclient对象 CloseableHttpClient httpclient = HttpClients.createDefault(); String resultString = ""; CloseableHttpResponse response = null; try { // 创建uri URIBuilder builder = new URIBuilder(url); URI uri = builder.build(); // 创建http GET请求 HttpGet httpGet = new HttpGet(uri); //添加header 头 httpGet.setHeader("Token", token); httpGet.setHeader("Timespan", timeSpan); // 执行请求 response = httpclient.execute(httpGet); // 判断返回状态是否为200 if (response.getStatusLine().getStatusCode() == 200) { resultString = EntityUtils.toString(response.getEntity(), "UTF-8"); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (response != null) { response.close(); } httpclient.close(); } catch (IOException e) { e.printStackTrace(); } } return resultString; } public static String doGet(String url, String token, String timeSpan) { return doGet(url, token, timeSpan, null); }
接着就是调用第三方接口了
public List<***> identityCheck(String token, String timeStamp, String name) { String keyword = name; System.out.println("-----------------开始调用--------------->"); //企业关键字模糊查询 String url = qichachaUrl + qichachaKey + "&dtype=json" + "&searchKey=" + keyword; boolean match = false; //是否匹配 String result = ""; List<CorporateCreditVo> list = new ArrayList<>(); try { result = doGet(url, token, timeStamp); System.out.println("请求结果:" + result); JSONObject jsonObject = JSONObject.parseObject(result); //这里加个判断,避免报空指针异常 if (Objects.isNull(jsonObject) || Objects.isNull(jsonObject.get("Result"))){ return new ArrayList<>(); }else { //将查询的数据转换实体类对象 String result1 = jsonObject.get("Result").toString(); list = JSONArray.parseArray(result1, ***.class); } } catch (Exception e) { e.printStackTrace(); } return list; }
List<?>是你查询的实体类,name是你要查询的企业名称 ,qichachaUrl 就是你调用的url,就是http://api.qichacha.com/FuzzySearch/GetList,qichachaKey是自己的key,这里没有是因为写在配置文件里面了,可以先使用main方法试试能不能调用成功
public static void main(String[] args) throws Exception{
int secondTimestamp = getSecondTimestamp(new Date()); //精确到秒的时间戳 String time=String.valueOf(secondTimestamp); String token = SecureUtil.md5(qichachaKey+time+qichachaSecretKey).toUpperCase(); //token:验证加密值(key+Timespan+SecretKey组成的32位md5加密的大写字符串)
System.out.println(token);name="";//你想要查询的企业名称
identityCheck(token,secondTimestamp+"",name);
}
返回实体类方法
public List<****> selectList(String name) { int secondTimestamp = getSecondTimestamp(new Date()); //精确到秒的时间戳 String time=String.valueOf(secondTimestamp); String token = SecureUtil.md5(qichachaKey+time+qichachaSecretKey).toUpperCase(); //token:验证加密值(key+Timespan+SecretKey组成的32位md5加密的大写字符串) List<****> list = identityCheck(token, secondTimestamp + "", name); return list; }
最后打个写好的包,记录一下,方便自己也方便大家。嘿嘿~