|
@@ -0,0 +1,255 @@
|
|
|
+package com.jeeplus.common.utils;
|
|
|
+
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.jeeplus.common.config.Global;
|
|
|
+
|
|
|
+import javax.net.ssl.HostnameVerifier;
|
|
|
+import javax.net.ssl.HttpsURLConnection;
|
|
|
+import javax.net.ssl.SSLSession;
|
|
|
+import java.io.*;
|
|
|
+import java.net.HttpURLConnection;
|
|
|
+import java.net.URL;
|
|
|
+import java.net.URLEncoder;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
+/**
|
|
|
+名称:企业开票税号查询
|
|
|
+ * 功能:
|
|
|
+ * 1、根据关键字查询相关企业,或者根据企业信息的id查询企业的详细信息;
|
|
|
+ * 2、可以查到企业的名称、联系方式等基本信息;
|
|
|
+ * 3、可以查到公司纳税人识别号、注册地址等开发票需要的详细信息。
|
|
|
+ *
|
|
|
+ * 状态:
|
|
|
+ * 错误码 说明
|
|
|
+ * 300001 请求header中没有设置apikey
|
|
|
+ * 300002 api不存在或url无法解析
|
|
|
+ * 300003 apikey不存在,请输入正确的apikey
|
|
|
+ * 300004 服务剩余次数不足,请再次购买
|
|
|
+ * 300005 未设置ip白名单
|
|
|
+ * 300006 IP白名单中不包含您的IP
|
|
|
+ * 300007 系统繁忙稍候再试
|
|
|
+ * 300008 访问次数超载
|
|
|
+ * 300009 未找到节流信息
|
|
|
+ * 300010 header参数中缺少需签名的参数值
|
|
|
+ * 300011 缺少需验证的参数列表
|
|
|
+ * 300012 签名信息不匹配
|
|
|
+ * 300013 header中缺少参数appkey
|
|
|
+ * 300014 header中缺少参数appsecret
|
|
|
+ * 300015 api已过期,请另行购买
|
|
|
+ * 300017 要求必填参数为不能为空
|
|
|
+ * 300018 api没有授权
|
|
|
+ */
|
|
|
+public class TicketQueryUtils {
|
|
|
+ private static final String ApiCode = Global.getYyApiCode();
|
|
|
+ private static final String searchByNameUrl = Global.getYyMhUrl();
|
|
|
+ private static final String ticketInfoQueryUrl = Global.getYyShUrl();
|
|
|
+
|
|
|
+ private static final String DEF_CHATSET = "UTF-8";
|
|
|
+ private static final int DEF_CONN_TIMEOUT = 30000;
|
|
|
+ private static final int DEF_READ_TIMEOUT = 30000;
|
|
|
+ private static String userAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36";
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据关键字查询相关企业
|
|
|
+ * @param keyword
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String enterpriseSearchByName(String keyword){
|
|
|
+ String result =null;
|
|
|
+ String method = "GET";
|
|
|
+ String paramFormat = "form";
|
|
|
+ Map<String, Object> params = new HashMap<String, Object>();//请求参数
|
|
|
+ params.put("keyword", keyword);
|
|
|
+
|
|
|
+ Map<String, Object> headerParams = new HashMap<String, Object>();//请求头参数
|
|
|
+ headerParams.put("apicode", ApiCode);//APICODE
|
|
|
+ try {
|
|
|
+ result = net(searchByNameUrl, params, headerParams, method, paramFormat);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据id查询企业税号
|
|
|
+ * @param id
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String enterpriseTicketInfoQueryById(String id){
|
|
|
+ String result =null;
|
|
|
+ String method = "GET";
|
|
|
+ String paramFormat = "form";
|
|
|
+ Map<String, Object> params = new HashMap<String, Object>();//请求参数
|
|
|
+ params.put("id", id);
|
|
|
+
|
|
|
+ Map<String, Object> headerParams = new HashMap<String, Object>();//请求头参数
|
|
|
+ headerParams.put("apicode", ApiCode);//APICODE
|
|
|
+
|
|
|
+ try {
|
|
|
+ result = net(ticketInfoQueryUrl, params, headerParams, method, paramFormat);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ private static final HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() {
|
|
|
+ public boolean verify(String hostname, SSLSession session) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ /**
|
|
|
+ *
|
|
|
+ * @param strUrl 请求地址
|
|
|
+ * @param params 请求参数
|
|
|
+ * @param method 请求方法
|
|
|
+ * @return 网络请求字符串
|
|
|
+ * @throws Exception
|
|
|
+ */
|
|
|
+ public static String net(String strUrl, Map<String,Object> params, Map<String,Object> headerParams, String method, String paramFormat) throws Exception {
|
|
|
+ HttpURLConnection conn = null;
|
|
|
+ BufferedReader reader = null;
|
|
|
+ String rs = null;
|
|
|
+ try {
|
|
|
+ String contentType = null;
|
|
|
+ if(headerParams.containsKey("Content-Type"))
|
|
|
+ contentType = headerParams.get("Content-Type").toString();
|
|
|
+
|
|
|
+ StringBuffer sb = new StringBuffer();
|
|
|
+ if(method==null || method.equals("GET")){
|
|
|
+ strUrl = strUrl+"?"+urlencode(params);
|
|
|
+ }
|
|
|
+
|
|
|
+ trustAllHttpsCertificates();
|
|
|
+ HttpsURLConnection.setDefaultHostnameVerifier(DO_NOT_VERIFY);
|
|
|
+
|
|
|
+ URL url = new URL(strUrl);
|
|
|
+ conn = (HttpURLConnection) url.openConnection();
|
|
|
+ if(method==null || method.equals("GET")){
|
|
|
+ conn.setRequestMethod("GET");
|
|
|
+ }else{
|
|
|
+ conn.setRequestMethod("POST");
|
|
|
+ conn.setDoOutput(true);
|
|
|
+ }
|
|
|
+ conn.setRequestProperty("User-agent", userAgent);
|
|
|
+ for (String i : headerParams.keySet()) {
|
|
|
+ conn.setRequestProperty(i, headerParams.get(i).toString());
|
|
|
+ }
|
|
|
+ if("form".equals(paramFormat) && !"application/x-www-form-urlencoded".equals(contentType) && !"application/xml".equals(contentType)) {
|
|
|
+ conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");
|
|
|
+ }
|
|
|
+ conn.setUseCaches(false);
|
|
|
+ conn.setConnectTimeout(DEF_CONN_TIMEOUT);
|
|
|
+ conn.setReadTimeout(DEF_READ_TIMEOUT);
|
|
|
+ conn.setInstanceFollowRedirects(false);
|
|
|
+ conn.connect();
|
|
|
+ if (params!= null && method.equals("POST")) {
|
|
|
+ try {
|
|
|
+ OutputStream out = conn.getOutputStream();
|
|
|
+ if("form".equals(paramFormat)) {
|
|
|
+ if("application/x-www-form-urlencoded".equals(contentType))
|
|
|
+ out.write(urlencode(params).getBytes("utf-8"));
|
|
|
+ else if("application/xml".equals(contentType))
|
|
|
+ out.write(xmlencode(params).getBytes("utf-8"));
|
|
|
+ else
|
|
|
+ out.write(jsonencode(params).getBytes("utf-8"));
|
|
|
+ } else
|
|
|
+ out.write(params.toString().getBytes("utf-8"));
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ InputStream is = conn.getInputStream();
|
|
|
+ reader = new BufferedReader(new InputStreamReader(is, DEF_CHATSET));
|
|
|
+ String strRead = null;
|
|
|
+ while ((strRead = reader.readLine()) != null) {
|
|
|
+ sb.append(strRead);
|
|
|
+ }
|
|
|
+ rs = sb.toString();
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ } finally {
|
|
|
+ if (reader != null) {
|
|
|
+ reader.close();
|
|
|
+ }
|
|
|
+ if (conn != null) {
|
|
|
+ conn.disconnect();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return rs;
|
|
|
+ }
|
|
|
+
|
|
|
+ //将map型转为请求参数型
|
|
|
+ public static String urlencode(Map<String,Object>data) {
|
|
|
+ StringBuilder sb = new StringBuilder();
|
|
|
+ for (Map.Entry i : data.entrySet()) {
|
|
|
+ try {
|
|
|
+ if(("").equals(i.getKey())) {
|
|
|
+ sb.append(URLEncoder.encode(i.getValue()+"","UTF-8"));
|
|
|
+ } else {
|
|
|
+ sb.append(i.getKey()).append("=").append(URLEncoder.encode(i.getValue()+"","UTF-8")).append("&");
|
|
|
+ }
|
|
|
+ } catch (UnsupportedEncodingException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return sb.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ //将map型转为请求参数型
|
|
|
+ public static String jsonencode(Map<String,Object>data) {
|
|
|
+ JSONObject jparam = new JSONObject();
|
|
|
+ for (Map.Entry i : data.entrySet())
|
|
|
+ jparam.put((String) i.getKey(), i.getValue());
|
|
|
+
|
|
|
+ return jparam.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ //将map型转为请求参数型
|
|
|
+ public static String xmlencode(Map<String,Object>data) {
|
|
|
+ StringBuffer xmlData = new StringBuffer();
|
|
|
+ xmlData.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
|
|
|
+ for (Map.Entry i : data.entrySet())
|
|
|
+ xmlData.append("<" + i.getKey() + ">" + i.getValue() + "</" + i.getKey() + ">");
|
|
|
+
|
|
|
+ return xmlData.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ static class miTM implements javax.net.ssl.TrustManager, javax.net.ssl.X509TrustManager {
|
|
|
+ public java.security.cert.X509Certificate[] getAcceptedIssuers() {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ public boolean isServerTrusted(java.security.cert.X509Certificate[] certs) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ public boolean isClientTrusted(java.security.cert.X509Certificate[] certs) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType)
|
|
|
+ throws java.security.cert.CertificateException {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType)
|
|
|
+ throws java.security.cert.CertificateException {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private static void trustAllHttpsCertificates() throws Exception {
|
|
|
+ javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1];
|
|
|
+ javax.net.ssl.TrustManager tm = new miTM();
|
|
|
+ trustAllCerts[0] = tm;
|
|
|
+ javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext.getInstance("SSL");
|
|
|
+ sc.init(null, trustAllCerts, null);
|
|
|
+ javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
|
|
|
+ }
|
|
|
+}
|