package com.yifu.cloud.plus.v1.check.utils;

import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.yifu.cloud.plus.v1.check.constant.ChecksConstants;
import com.yifu.cloud.plus.v1.check.entity.TCheckBankNo;
import com.yifu.cloud.plus.v1.check.entity.TCheckIdCard;
import com.yifu.cloud.plus.v1.check.entity.TCheckMobile;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants;
import com.yifu.cloud.plus.v1.yifu.common.core.util.Common;
import com.yifu.cloud.plus.v1.yifu.common.core.util.DateUtil;
import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import com.yifu.cloud.plus.v1.yifu.common.core.util.RandomUtil;

import java.util.*;

/**
 * @author hgw2
 * @description 测试身份证
 * @date 2022/5/7
 */

public class ChecksUtil {


     private static final String APP_ID = "oi0mucL4";

     private static final String APP_KEY_IDCARD = "s4lW5JRA";
	 private static final String API_URL = "https://api.253.com/open/idcard/id-card-auth";
	 private static final String API_URL_MOBILE = "https://api.253.com/open/unn/batch-ucheck";

	private static final String API_URL_MOBILE_NEW = "https://api.253.com/open/mobstatus/mobstatus-query-basic";

	 private static final String API_URL_BANK_NO ="https://api.253.com/open/bankcard/card-auth";
	 private static final String API_URL_BANK_NO_TWO ="https://api.253.com/open/bankcard/card-two-auth";
	 private static final String API_URL_BANK_NO_THREE ="https://api.253.com/open/bankcard/card-three-auth";
	 private static JsonParser jsonParser = new JsonParser();

     public static void checkIdCard(TCheckIdCard checkIdCard, boolean canCheck) {

          if (canCheck) {
               // 1.调用身份信息校验api
               checkIdCardMethod(checkIdCard);
          } else {
               //checkIdCard.setIsTrue(CommonConstants.ZERO_INT);
               //checkIdCard.setReason(ChecksConstants.NACOS_CHECK_CONFIG_ERROR);
			   checkIdCard.setIsTrue(CommonConstants.ONE_INT);
			   checkIdCard.setReason(ChecksConstants.CHECK_CONFIG_ACCESS);
          }
     }
	/**
	 * @Author fxj
	 * @Description 手机号码状态检测
	 * @Date 17:50 2022/6/20
	 * @param  mobiles  检测手机号，多个手机号码用英文半角逗号隔开，仅支持国内号码   一次请求最多五十个号码
	 **/
	public static R<Map<String,TCheckMobile>> checkMobile(String mobiles, boolean canCheck) {
		Map<String,TCheckMobile>  checkMobiles = new HashMap<>();
		if (canCheck) {
			// 1.调用手机信息校验api
			return checkMobileMethod(mobiles,checkMobiles);
		} else {
			TCheckMobile checkMobile;
			List<String> mobileList = Common.initStrToList(mobiles,CommonConstants.COMMA_STRING);
			Map<String,TCheckMobile> resMap = new HashMap<>();
			if (Common.isNotNull(mobileList)){
				for (String m:mobileList){
					checkMobile = new TCheckMobile();
					checkMobile.setMobile(m);
					checkMobile.setStatus(CommonConstants.ONE_STRING);
					checkMobile.setType(CommonConstants.ONE_STRING);
					checkMobile.setMessage(ChecksConstants.CHECK_CONFIG_ACCESS);
					resMap.put(m,checkMobile);
				}
			}
			return R.ok(resMap);
		}
	}

	/**
	 * @Author fxj
	 * @Description 手机号码状态检测--号码实时基础版
	 * @Date 17:50 2022/6/20
	 * @param  mobiles  检测手机号，多个手机号码用英文半角逗号隔开，仅支持国内号码   一次请求最多五十个号码
	 **/
	public static R<Map<String,TCheckMobile>> checkMobileBasic(String mobiles, boolean canCheck) {
		Map<String,TCheckMobile>  checkMobiles = new HashMap<>();
		if (canCheck) {
			// 1.调用手机信息校验api
			return checkMobileBasicMethod(mobiles,checkMobiles);
		} else {
			TCheckMobile checkMobile;
			List<String> mobileList = Common.initStrToList(mobiles,CommonConstants.COMMA_STRING);
			Map<String,TCheckMobile> resMap = new HashMap<>();
			if (Common.isNotNull(mobileList)){
				for (String m:mobileList){
					checkMobile = new TCheckMobile();
					checkMobile.setMobile(m);
					checkMobile.setStatus(CommonConstants.ONE_STRING);
					checkMobile.setType(CommonConstants.ONE_STRING);
					checkMobile.setMessage(ChecksConstants.CHECK_CONFIG_ACCESS);
					resMap.put(m,checkMobile);
				}
			}
			return R.ok(resMap);
		}
	}
	/**
	 * @Author fxj
	 * @Description 银行卡四要素标准版 校验
	 * @Date 17:50 2022/6/20
	 * @param  name	姓名	是	[string]
	 * @param  cardNo	银行卡号，限单个	是	[string]
	 **/
	public static R<TCheckBankNo> checkBankNoTwo(String name, String cardNo, boolean canCheck) {
		if (canCheck) {
			// 1.调用银行卡信息校验api
			return checkBankNoTwoMethod(name,cardNo);
		} else {
			TCheckBankNo checkBankNo = new TCheckBankNo();
			checkBankNo.setBankNo(cardNo);
			checkBankNo.setName(name);
			checkBankNo.setMessage(ChecksConstants.CHECK_CONFIG_ACCESS);
			checkBankNo.setResult("01");
			checkBankNo.setType(CommonConstants.ONE_STRING);
			checkBankNo.setRemark(ChecksConstants.CHECK_CONFIG_ACCESS);
			return R.ok(checkBankNo);
		}
	}
	/**
	 * @Author fxj
	 * @Description 银行卡四要素标准版 校验
	 * @Date 17:50 2022/6/20
	 * @param  name	姓名	是	[string]
	 * @param  cardNo	银行卡号，限单个	是	[string]
	 **/
	public static R<TCheckBankNo> checkBankNoThree(String name, String cardNo, String idNum, boolean canCheck) {
		if (canCheck) {
			// 1.调用银行卡信息校验api
			return checkBankNoThreeMethod(name,cardNo,idNum);
		} else {
			TCheckBankNo checkBankNo = new TCheckBankNo();
			checkBankNo.setBankNo(cardNo);
			checkBankNo.setName(name);
			checkBankNo.setIdNum(idNum);
			checkBankNo.setMessage(ChecksConstants.CHECK_CONFIG_ACCESS);
			checkBankNo.setResult("01");
			checkBankNo.setType(CommonConstants.ONE_STRING);
			checkBankNo.setRemark(ChecksConstants.CHECK_CONFIG_ACCESS);
			return R.ok(checkBankNo);
		}
	}
	public static R<TCheckBankNo> checkBankNoTwoMethod(String name, String cardNo) {
		final JsonObject jsonObject = ChecksUtil.invokeBankNoTwoAuth(name,cardNo);
		TCheckBankNo checkBankNo = new TCheckBankNo();
		// 2.处理返回结果
		if (jsonObject != null) {
			//响应code码。200000：成功，其他失败
			String code = jsonObject.get(ChecksConstants.CODE).getAsString();
			if (ChecksConstants.CODE_200000.equals(code) && jsonObject.get(ChecksConstants.DATA) != null) {
				// 调用身份信息校验成功
				// 解析结果数据，进行业务处理
				// 校验状态码  200000：成功，其他失败
				JsonObject resJson = jsonObject.get(ChecksConstants.DATA).getAsJsonObject();
				String message = jsonObject.get(ChecksConstants.MESSAGE).getAsString();
				if (Common.isNotNull(resJson)){
					checkBankNo.setBankNo(cardNo);
					checkBankNo.setBankName(getJsonElementValue(resJson.getAsJsonObject().get("bankName")));
					checkBankNo.setCardCategory(getJsonElementValue(resJson.getAsJsonObject().get("cardCategory")));
					checkBankNo.setCardType(getJsonElementValue(resJson.getAsJsonObject().get("cardType")));
					checkBankNo.setResult(getJsonElementValue(resJson.getAsJsonObject().get(ChecksConstants.RESULT)));
					checkBankNo.setMessage(message);
					checkBankNo.setRemark(getJsonElementValue(resJson.getAsJsonObject().get(ChecksConstants.REMARK)));
					checkBankNo.setType(CommonConstants.ONE_STRING);
					checkBankNo.setName(name);
				}
			} else {
				// 记录错误日志，正式项目中请换成log打印
				return R.failed("银行卡号校验失败:"+jsonObject.get(ChecksConstants.MESSAGE).getAsString());
			}
		} else {
			return R.failed(ChecksConstants.NO_DATA_RESULT);
		}
		return R.ok(checkBankNo);
	}

	private static R<TCheckBankNo> checkBankNoThreeMethod(String name, String cardNo, String idNum) {
		final JsonObject jsonObject = ChecksUtil.invokeBankNoThreeAuth(name,cardNo,idNum);
		TCheckBankNo checkBankNo = new TCheckBankNo();
		// 2.处理返回结果
		if (jsonObject != null) {
			//响应code码。200000：成功，其他失败
			String code = jsonObject.get(ChecksConstants.CODE).getAsString();
			if (ChecksConstants.CODE_200000.equals(code) && jsonObject.get(ChecksConstants.DATA) != null) {
				// 调用身份信息校验成功
				// 解析结果数据，进行业务处理
				// 校验状态码  200000：成功，其他失败
				JsonObject resJson = jsonObject.get(ChecksConstants.DATA).getAsJsonObject();
				String message = jsonObject.get(ChecksConstants.MESSAGE).getAsString();
				if (Common.isNotNull(resJson)){
					checkBankNo.setBankNo(cardNo);
					checkBankNo.setBankName(getJsonElementValue(resJson.getAsJsonObject().get("bankName")));
					checkBankNo.setCardCategory(getJsonElementValue(resJson.getAsJsonObject().get("cardCategory")));
					checkBankNo.setCardType(getJsonElementValue(resJson.getAsJsonObject().get("cardType")));
					checkBankNo.setResult(getJsonElementValue(resJson.getAsJsonObject().get(ChecksConstants.RESULT)));
					checkBankNo.setMessage(message);
					checkBankNo.setIdNum(idNum);
					checkBankNo.setRemark(getJsonElementValue(resJson.getAsJsonObject().get(ChecksConstants.REMARK)));
					checkBankNo.setType(CommonConstants.ONE_STRING);
					checkBankNo.setName(name);
				}
			} else {
				// 记录错误日志，正式项目中请换成log打印
				return R.failed("银行卡号校验失败:"+jsonObject.get(ChecksConstants.MESSAGE).getAsString());
			}
		} else {
			return R.failed(ChecksConstants.NO_DATA_RESULT);
		}
		return R.ok(checkBankNo);
	}

	private static String getJsonElementValue(JsonElement temp) {
		String msg = "";
		if (Common.isNotNull(temp) && !temp.isJsonNull()) {
			try {
				return temp.getAsString();
			} catch (Exception e) {
				msg = temp.toString();
				if (msg.length() > 10) {
					msg = msg.substring(0, 10);
				}
				return "创蓝云智返回异常：" + msg;
			}
		} else {
			return CommonConstants.EMPTY_STRING;
		}
	}

	/**
	 * @Author fxj
	 * @Description 手机号码状态检测
	 * @Date 17:50 2022/6/20
	 * @param  mobiles  检测手机号，多个手机号码用英文半角逗号隔开，仅支持国内号码
	 **/
	private static R<Map<String,TCheckMobile>> checkMobileMethod(String mobiles, Map<String,TCheckMobile>  checkMobileMap) {
		final JsonObject jsonObject = ChecksUtil.invokeMobile(mobiles);
		// 2.处理返回结果
		if (jsonObject != null) {
			//响应code码。200000：成功，其他失败
			String code = jsonObject.get(ChecksConstants.CODE).getAsString();
			if (ChecksConstants.CODE_200000.equals(code) && jsonObject.get(ChecksConstants.DATA) != null) {
				// 调用身份信息校验成功
				// 解析结果数据，进行业务处理
				// 校验状态码  200000：成功，其他失败
				JsonArray mobileArray = jsonObject.get(ChecksConstants.DATA).getAsJsonArray();
				String message = jsonObject.get(ChecksConstants.MESSAGE).getAsString();
				if (Common.isNotNull(mobileArray) && mobileArray.size() > CommonConstants.ZERO_INT){
					TCheckMobile mobile = null;
					for (int i = 0;i < mobileArray.size(); i++){
						mobile = new TCheckMobile();
						mobile.setMobile(getJsonElementValue(mobileArray.get(i).getAsJsonObject().get(ChecksConstants.MOBILE)));
						mobile.setArea(getJsonElementValue(mobileArray.get(i).getAsJsonObject().get(ChecksConstants.AREA)));
						mobile.setNumbertype(getJsonElementValue(mobileArray.get(i).getAsJsonObject().get(ChecksConstants.NUMBER_TYPE)));
						mobile.setChargesstatus(getJsonElementValue(mobileArray.get(i).getAsJsonObject().get(ChecksConstants.CHARGES_STATUS)));
						mobile.setStatus(getJsonElementValue(mobileArray.get(i).getAsJsonObject().get(ChecksConstants.STATUS)));
						mobile.setMessage(message);
						mobile.setType(CommonConstants.ONE_STRING);
						checkMobileMap.put(mobile.getMobile(),mobile);
					}
				}
			} else {
				// 记录错误日志，正式项目中请换成log打印
				return R.failed("手机号校验失败:" + jsonObject.get(ChecksConstants.MESSAGE).getAsString());
			}
		} else {
			return R.failed(ChecksConstants.NO_DATA_RESULT);
		}
		return R.ok(checkMobileMap);
	}
	/**
	 * @Author fxj
	 * @Description 手机号码状态检测--号码实时基础版
	 * 倩倩确定：非2、4、12的都可以进
	 * 开发api :https://rkzav3pcv4.feishu.cn/wiki/SCt3wBxhEig772kzQxecMGtjnig
	 * @Date 11:50 2026/1/12
	 * @Param
	 * @return
	**/
	private static R<Map<String,TCheckMobile>> checkMobileBasicMethod(String mobiles, Map<String,TCheckMobile>  checkMobileMap) {
		if (Common.isEmpty(mobiles)){
			return R.failed("手机号码不能为空");
		}
		List<String> mobileList = new ArrayList<>();
		mobileList.addAll(Arrays.asList(mobiles.split(",")));
		JsonObject jsonObject;
		if (mobileList.size() > CommonConstants.ZERO_INT){
			TCheckMobile mobile = null;
			for (String mb : mobileList){
				//广电号码放行，硬编码 后续要优化
				if (mb.indexOf("192") == 0){
					mobile = new TCheckMobile();
					mobile.setMobile(mb);
					mobile.setStatus(CommonConstants.ONE_STRING);
					mobile.setMessage("广电号码放行");
					checkMobileMap.put(mb,mobile);
					continue;
				}
				jsonObject = ChecksUtil.invokeMobileBasic(mb);
				// 2.处理返回结果
				if (jsonObject != null) {
					//响应code码。200000：成功，其他失败
					String code = jsonObject.get(ChecksConstants.CODE).getAsString();
					if (ChecksConstants.CODE_200000.equals(code) && jsonObject.get(ChecksConstants.DATA) != null) {
						// 调用身份信息校验成功
						// 解析结果数据，进行业务处理
						// 校验状态码  200000：成功，其他失败
						JsonObject mobileJson = jsonObject.get(ChecksConstants.DATA).getAsJsonObject();
						String message = jsonObject.get(ChecksConstants.MESSAGE).getAsString();
						if (Common.isNotNull(mobileJson)){
							mobile = new TCheckMobile();
							mobile.setMobile(getJsonElementValue(mobileJson.get(ChecksConstants.MOBILE)));
							mobile.setArea(getJsonElementValue(mobileJson.get(ChecksConstants.AREA)));
							mobile.setNumbertype(getJsonElementValue(mobileJson.get(ChecksConstants.NUMBER_TYPE)));
							mobile.setChargesstatus(getJsonElementValue(mobileJson.get(ChecksConstants.CHARGES_STATUS)));
							mobile.setStatus(getJsonElementValue(mobileJson.get(ChecksConstants.STATUS)));
							//老检测结果，枚举值：0：空号 1：实号 2：停机 3：库无 4：沉默号 5：风险号  10：配置异常 （1、4、5为号码正常放行）
							//新号码状态，1 正常 2 空号 3 通话中(此状态失效,不返回) 4 不在网(即空号,可以和状态2合并) 5 关机 7 在网但不可用 13 停机 10 未知 9 服务器异常 12 不存在的号码
							//倩倩确定：新号码状态非2、4、12的都可以进
							//转换好旧状态
							if ( !CommonConstants.TWO_STRING.equals(mobile.getStatus())
									&& !CommonConstants.FOUR_STRING.equals(mobile.getStatus())
									&& !CommonConstants.TWELVE_STRING.equals(mobile.getStatus())){
								mobile.setStatus(CommonConstants.ONE_STRING);
							}else {
								if (CommonConstants.TWO_STRING.equals(mobile.getStatus())
										|| CommonConstants.FOUR_STRING.equals(mobile.getStatus())){
									mobile.setStatus(CommonConstants.ZERO_STRING);
								}
								if (CommonConstants.TWELVE_STRING.equals(mobile.getStatus())){
									mobile.setStatus(CommonConstants.THREE_STRING);
								}
							}
							//保存新状态
							mobile.setStatusNew(getJsonElementValue(mobileJson.get(ChecksConstants.STATUS)));
							//转换成老的状态
							mobile.setMessage(message);
							mobile.setType(CommonConstants.ONE_STRING);
							checkMobileMap.put(mb,mobile);
						}
					} else {
						// 记录错误日志，正式项目中请换成log打印
						//return R.failed("手机号校验失败:" + jsonObject.get(ChecksConstants.MESSAGE).getAsString());
						mobile = new TCheckMobile();
						mobile.setMobile(mb);
						mobile.setStatus(CommonConstants.TEN_STRING);
						mobile.setMessage(getJsonElementValue(jsonObject.get(ChecksConstants.MESSAGE))+getJsonElementValue(jsonObject.get(ChecksConstants.REMARK)));
						checkMobileMap.put(mb,mobile);
					}
				} else {
					mobile = new TCheckMobile();
					mobile.setMobile(mb);
					mobile.setStatus(CommonConstants.TEN_STRING);
					mobile.setMessage("调用第三方服务失败！");
					checkMobileMap.put(mb,mobile);
				}
			}
		}
		return R.ok(checkMobileMap);
	}
	// 核心调用
     private static void checkIdCardMethod(TCheckIdCard checkIdCard) {
          final JsonObject jsonObject = ChecksUtil.invokeIdCard(checkIdCard.getName(), checkIdCard.getIdCard());
          // 2.处理返回结果
          if (jsonObject != null) {
               //响应code码。200000：成功，其他失败
               String code = jsonObject.get(ChecksConstants.CODE).getAsString();
               if (ChecksConstants.CODE_200000.equals(code) && jsonObject.get(ChecksConstants.DATA) != null) {
                    // 调用身份信息校验成功
                    // 解析结果数据，进行业务处理
                    // 校验状态码  200000：成功，其他失败
				   JsonObject resultJson = jsonObject.get(ChecksConstants.DATA).getAsJsonObject();
				   String  resultStr = getJsonElementValue(resultJson.getAsJsonObject().get(ChecksConstants.RESULT));
                    if ("01".equals(resultStr)) {
                         checkIdCard.setIsTrue(CommonConstants.ONE_INT);
                         checkIdCard.setReason("正确");
                    } else {
                         checkIdCard.setIsTrue(CommonConstants.ZERO_INT);
                         String remark = getJsonElementValue(resultJson.get(ChecksConstants.REMARK));
                         checkIdCard.setReason("调用身份信息校验失败:" + remark);
                    }
               } else {
                    // 记录错误日志，正式项目中请换成log打印
                    checkIdCard.setIsTrue(CommonConstants.ZERO_INT);
                    checkIdCard.setReason("调用身份信息校验失败:" + jsonObject.get(ChecksConstants.MESSAGE).getAsString());
               }
          } else {
               checkIdCard.setIsTrue(CommonConstants.ZERO_INT);
               checkIdCard.setReason(ChecksConstants.NO_DATA_RESULT);
          }
     }

     private static JsonObject invokeIdCard(String name, String idNum) {
          Map<String, String> params = new HashMap<>();
          params.put(ChecksConstants.APP_ID, APP_ID);
          params.put(ChecksConstants.APP_KEY, APP_KEY_IDCARD);
          params.put(ChecksConstants.NAME, name);
          params.put(ChecksConstants.ID_NUM, idNum);
          String result = HttpUtils.post(API_URL, params);
          // 解析json,并返回结果
		 if (Common.isNotNull(result)){
			 return jsonParser.parse(result).getAsJsonObject();
		 }
		 return null;
     }

	 /**
	  * @Author fxj
	  * @Description 手机号码状态检测
	  * @Date 17:50 2022/6/20
	  * @param  mobiles  检测手机号，多个手机号码用英文半角逗号隔开，仅支持国内号码
	 **/
	private static JsonObject invokeMobile(String mobiles) {
		Map<String, String> params = new HashMap<>();
		params.put(ChecksConstants.APP_ID, APP_ID);
		params.put(ChecksConstants.APP_KEY, APP_KEY_IDCARD);
		params.put(ChecksConstants.MOBILES, mobiles);
		String result = HttpUtils.post(API_URL_MOBILE, params);
		// 解析json,并返回结果
		if (Common.isNotNull(result)){
			return jsonParser.parse(result).getAsJsonObject();
		}
		return null;
	}
	/**
	 * @Author fxj
	 * @Description 手机号码状态检测--实时基础版
	 * 号码实时基础版status解释
	 * 1-正常 ----(通话中、正常号码、响应慢 (静音)、忙音) 可以正常打通的号码
	 * 13-停机--- 停机号码
	 * 7-在网但不可用 ---、号码小号呼转、手机号码繁忙，无法接听，不在服务区等。
	 * 4-不在网(空号)--- 空号销号的号码
	 * 3-通话中 ---号码在通话中、可以放在正常状态里面
	 * 5-关机-- 当时该手机处于关机或者没电来电提醒的状态
	 * 2-空号 ---空号、未激活使用的号码
	 * 9-服务器异常 --运营商异常或系统内部异常，也包含特殊号码无法查询
	 * 10-未知 ---号码失败次数超频，请隔天再试/运营商返回其他的错误信息、号码管控、号段不支持
	 * 12-号码不存在--- 号码不支持/运营商返回其他的错误信息
	 * 倩倩确定：非2、4、12的都可以进
	 * @Date 11:32 2026/1/12
	 * @Param
	 * @return
	**/
	private static JsonObject invokeMobileBasic(String mobiles) {
		Map<String, String> params = new HashMap<>();
		params.put(ChecksConstants.APP_ID, APP_ID);
		params.put(ChecksConstants.APP_KEY, APP_KEY_IDCARD);
		params.put(ChecksConstants.MOBILE, mobiles);
		params.put(ChecksConstants.ORDER_NO, new Date().getTime()+ RandomUtil.getSix());
		//请求参数 Body 以 multipart/form-data 方式提交
		String result = HttpUtils.postMultipart(API_URL_MOBILE_NEW, params);
		// 解析json,并返回结果
		if (Common.isNotNull(result)){
			return jsonParser.parse(result).getAsJsonObject();
		}
		return null;
	}

	private static JsonObject invokeBankNo(String name, String idNum, String cardNo, String mobile) {
		Map<String, String> params = new HashMap<>();
		params.put(ChecksConstants.APP_ID, APP_ID);
		params.put(ChecksConstants.APP_KEY, APP_KEY_IDCARD);
		params.put(ChecksConstants.NAME, name);
		params.put(ChecksConstants.ID_NUM, idNum);
		params.put(ChecksConstants.CARD_NO, cardNo);
		if (Common.isNotNull(mobile)){
			params.put(ChecksConstants.MOBILE, mobile);
		}
		String result = HttpUtils.post(API_URL_BANK_NO, params);
		// 解析json,并返回结果
		if (Common.isNotNull(result)){
			return jsonParser.parse(result).getAsJsonObject();
		}
		return null;
	}

	private static JsonObject invokeBankNoTwoAuth(String name,String cardNo) {
		Map<String, String> params = new HashMap<>();
		params.put(ChecksConstants.APP_ID, APP_ID);
		params.put(ChecksConstants.APP_KEY, APP_KEY_IDCARD);
		params.put(ChecksConstants.NAME, name);
		params.put(ChecksConstants.CARD_NO, cardNo);
		String result = HttpUtils.post(API_URL_BANK_NO_TWO, params);
		// 解析json,并返回结果
		if (Common.isNotNull(result)){
			return jsonParser.parse(result).getAsJsonObject();
		}
		return null;
	}
	private static JsonObject invokeBankNoThreeAuth(String name,String cardNo,String idNum) {
		Map<String, String> params = new HashMap<>();
		params.put(ChecksConstants.APP_ID, APP_ID);
		params.put(ChecksConstants.APP_KEY, APP_KEY_IDCARD);
		params.put(ChecksConstants.NAME, name);
		params.put(ChecksConstants.CARD_NO, cardNo);
		params.put(ChecksConstants.ID_NUM, idNum);
		String result = HttpUtils.post(API_URL_BANK_NO_THREE, params);
		// 解析json,并返回结果
		if (Common.isNotNull(result)){
			return jsonParser.parse(result).getAsJsonObject();
		}
		return null;
	}
}
