package com.jkcredit.invoice.util;

import net.sf.json.JSONObject;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;

import java.io.*;
import java.util.Iterator;

/**
 * Created by zhangqingxin Date : 16/11/6 Time : 10:41
 * <p/>
 * 参考一(HttpClient):http://mvnrepository.com/artifact/commons-httpclient/commons-
 * httpclient/3.1
 * 参考一(json-lib):http://mvnrepository.com/artifact/net.sf.json-lib/json-lib/2.4
 */
public class QueryDemo_Test {

	/**
	 * 测试地址
	 */
          private static final String URL = "http://etc.jkcredit.com:9999/api/rest";

	 	//private static final String URL = "http://110.88.150.74:80/credit?api=credit.sec.data_test";
	  	//private static final String URL = "http://110.88.150.74/credit?api=credit.sec.data";
		//private static final String URL = "http://123.57.186.204/gateway?api=credit.sec.data_test";
		//private static final String URL = "http://123.57.186.204/gateway?api=credit.sec.data";
	//	private static final String URL = "http://www1.h11.site/gateway?api=credit.sec.data";
	//	private static final String URL = "http://110.88.150.68:8000/gateway?api=credit.sec.data";
		//private static final String URL = "http://60.205.114.163:8000/gateway?api=credit.sec.data";
	 	//private static final String URL = " http://45.126.120.88/gateway?api=credit.sec.data";
		//private static final String URL = "http://119.18.195.163/gateway?api=credit.sec.data";

	/**
	 * 分配的appKey
	 */
	 	//private static final String appKey = "junxin_test";
	
		private static final String appKey = "jkxy";
	 	//private static final String appKey = "ccx";

	/**
	 * 方法入口
	 *
	 * @param args
	 */
	public static void main(String args[]) throws Exception {
		   QueryDemo_Test demo = new QueryDemo_Test();
		demo.runMainService();
	}

	/**
	 * 调用主接口
	 */
	public void runMainService() {
		try {
			/**
			 * 实名demo
			 */
			JSONObject paramJsonObj = initParamJsonObj_Realname();
			String ret = postClient(URL, paramJsonObj);
			System.out.println(ret);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 整合参数(实名认证)
	 *
	 * @return
	 */
	public JSONObject initParamJsonObj_Realname() {
		/**
		 * 基本参数
		 */
		JSONObject paramJsonObj = new JSONObject();
		paramJsonObj.put("api", "RED_INK_INVOICE_QUERY");//CTCC_3RD_DETAIL_V11//CTCC_STATUS_CHECK_V11//CUCC_STATUS_CHECK_V11//CMCC_3RD_DETAIL_V15//CMCC_3RD_V2//CTCC_3RD_DETAIL_V11//
		 //paramJsonObj.put("api", "MSISDNMD5TOIMEI");//MOBILE_CHECK_V1//CMCC_3RD_VERIFY_V4//CTCC_CHECK_V1
		paramJsonObj.put("appKey", appKey);
	    paramJsonObj.put("appSecret",
		"7697CE9BB9D5A856CFDDE738320AD34EA53E483C");
		//"84C1CE24EDF361F28072E313BD87EAB24CC727CF");

	   

		/**
		 * 业务参数
		 */
		JSONObject dataJson = initMainServiceParamJsonObj_Realname();
		paramJsonObj.put("data", dataJson);
		return paramJsonObj;
	}

	/*
	 * 初始化业务参数(实名认证)
	 *
	 * 姓名,身份证,手机号
	 *
	 * @return
	 */
	public JSONObject initMainServiceParamJsonObj_Realname() {
		/**
		 * 具体业务参数放在data中
		 */
		  JSONObject dataJson = new JSONObject();
        	/*   dataJson.put("name", "王同");
	      dataJson.put("id_number","371081198911276112");
	      dataJson.put("mobile","15562139518");*/
		   dataJson.put("taxplayerCode", "91149900MA0LBCKM6F");
	       dataJson.put("month", "2022-04");
		  dataJson.put("pageNo", 4);
		  dataJson.put("pageSize",10); //没有就默认1000

		 /* List<String> list = new ArrayList<>();
			list.add("13752639577");
	        dataJson.put("msisdnmd5list",list);*/
		  return dataJson;
	}

	/**
	 * 实现http post请求 注意编码 UTF-8
	 *
	 * @param url
	 * @param paramObj
	 * @return
	 */
	public String postClient(String url, JSONObject paramObj) {
		String str = "";
		HttpClient client = null;
		PostMethod method = null;
		try {
			client = new HttpClient();
			method = new PostMethod(url);
			method.setRequestHeader("Content-Type", "application/json;charset=utf-8");
			NameValuePair[] param = new NameValuePair[paramObj.size()];
			@SuppressWarnings("unchecked")
			Iterator<String> keys = paramObj.keys();
			int i = 0;
			while (keys.hasNext()) {
				String key = (String) keys.next();
				String value = paramObj.getString(key);
				param[i] = new NameValuePair(key, value);
				i++;
			}
			method.setRequestBody(param);
			client.executeMethod(method);
			str = convertStreamToString(method.getResponseBodyAsStream());
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (method != null) {
				method.releaseConnection();
			}
		}
		return str;
	}

	/**
	 * 流转字符串
	 *
	 * @param is
	 * @return
	 */
	public static String convertStreamToString(InputStream is) {
		BufferedReader reader = new BufferedReader(new InputStreamReader(is));
		StringBuilder builder = new StringBuilder();
		String line = null;
		try {
			while ((line = reader.readLine()) != null) {
				builder.append(line + "\n");
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				is.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return builder.toString();
	}

}