본문 바로가기
프로그램/자바

open api 국세청 사업자정보 진위확인

by cbwstar 2021. 12. 14.
728x90
반응형

자바로 post방식 json 타입 파라미터 전송하여 open api 값 가져오기

package egovframework.frmprd.ifh.openapi.web;

import com.nexacro.uiadapter17.spring.core.annotation.ParamDataSet;
import com.nexacro.uiadapter17.spring.core.data.NexacroResult;
import egovframework.com.cmm.util.EgovStringUtil;
import lombok.extern.slf4j.Slf4j;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JSONSerializer;
import org.apache.http.HttpException;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.message.BasicHeader;
import org.apache.http.message.BasicNameValuePair;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;


@Slf4j
@Controller
public class BusinessmanApiController {

    /*
        사업자 상태조회
     */
    @RequestMapping(value = "/openapi/businessmanApiStatus.do")
    public NexacroResult businessmanApiStatus( @ParamDataSet(name = "dsSearch", required = false) Map<String,String> searchInfo) {

        NexacroResult result = new NexacroResult();
        String responseString="";
        List<Map<String,Object>> businessList = new ArrayList<Map<String,Object>>();   //사업자정보
        Map<String,Object> businessMap = new HashMap<String,Object>();

        try {
            responseString = processHTTP(searchInfo);

            if(!responseString.equals("")) {
                JSONObject jsonObject = JSONObject.fromObject(JSONSerializer.toJSON(responseString));
                JSONArray jsonArray = (JSONArray) jsonObject.get("data");   //사업자정보

                //사업자정보 map으로 변환
                for(int i = 0; i< jsonArray.size(); i++) {
                    JSONObject tempJson = jsonArray.getJSONObject(i);
                    //Map Parameter를 추가
                    if(tempJson != null){
                        @SuppressWarnings("unchecked")
                        Iterator<String> keys = tempJson.keySet().iterator();   //사업자정보
                        while( keys.hasNext() ){
                            String key = keys.next();
                            businessMap.put(key, tempJson.get(key));
                        }
                        businessList.add(businessMap);
                        businessMap = new HashMap<String,Object>();
                    }
                }

            }

            log.debug("businessList:" + businessList);

            result.addDataSet("output1", businessList);

        } catch (Exception e) {
            log.debug("api 사업자 상태조회 Exception : " + e.getMessage());

            result.setErrorCode(-1);
            result.setErrorMsg(" ");
        }

        return result;
    }


    /**
     *  open api url 호출
     * @param
     * @return
     */

    public String processHTTP(Map<String,String> params ) throws Exception
    {
        int statusCode = 0;
      // String url = "http://api.odcloud.kr/api/nts-businessman/v1/status?serviceKey=발급받은서비스키";
        //175.106.80.117,175.106.80.194
        String url = "http://175.106.80.117/api/nts-businessman/v1/status?serviceKey=발급받은서비스키";

        CloseableHttpClient httpclient = HttpClientBuilder.create().build();
        HttpPost httpPost = new HttpPost(url);

        String bNo = params.get("bNo");
        String json = "{\"b_no\": [\"" +bNo + "\"]}";

        try {
            StringEntity requestEntity = new StringEntity(json , "utf-8");

            httpPost.addHeader("content-type","application/json");
            httpPost.addHeader("Accept","application/json");
            httpPost.setEntity(requestEntity);

            HttpResponse response = httpclient.execute(httpPost);
            statusCode = response.getStatusLine().getStatusCode();

            if( statusCode == 200){
                // 정상인 경우 메시지를 읽어 들여 그 결과를 리턴한다.
                BufferedReader rd = new BufferedReader( new InputStreamReader(response.getEntity().getContent()));
                StringBuffer result = new StringBuffer();
                String line = "";
                while ((line = rd.readLine()) != null) {
                    result.append(line);
                }
              //  log.debug("result.toString(): " + result.toString() );
                return result.toString();
            }

        } catch (Throwable e) {
            throw new HttpException((new StringBuilder("오류가 발생하였습니다.")).append(statusCode).toString());
        }

        if( statusCode != 200)
        {
            throw new HttpException((new StringBuilder("오류가 발생하였습니다.")).append(statusCode).toString());
        }

        return "";

    }

    /*
        사업자 진위확인조회
     */
    @RequestMapping(value = "/openapi/businessmanApiValidate.do")
    public NexacroResult businessmanApiValidate( @ParamDataSet(name = "dsSearch", required = false) Map<String,String> searchInfo) {

        NexacroResult result = new NexacroResult();
        String responseString="";
        List<Map<String,Object>> businessList = new ArrayList<Map<String,Object>>();   //사업자정보
        List<Map<String,Object>> requestParamList = new ArrayList<Map<String,Object>>();   //requestParamList
        List<Map<String,Object>> statusList = new ArrayList<Map<String,Object>>();   //statusList

        Map<String,Object> businessMap = new HashMap<String,Object>();
        Map<String,Object> requestParamMap = new HashMap<String,Object>();
        Map<String,Object> statusMap = new HashMap<String,Object>();

        try {
            responseString = processHTTP2(searchInfo);

            if(!responseString.equals("")) {
                JSONObject jsonObject = JSONObject.fromObject(JSONSerializer.toJSON(responseString));
                JSONArray jsonArray = (JSONArray) jsonObject.get("data");   //사업자정보

                //사업자정보 map으로 변환
                if(jsonArray.size() > 0) {
                    JSONObject tempJson = jsonArray.getJSONObject(0);
                    //Map Parameter를 추가
                    if(tempJson != null){
                        @SuppressWarnings("unchecked")
                        Iterator<String> keys = tempJson.keySet().iterator();   //사업자정보
                        while( keys.hasNext() ){
                            String key = keys.next();
                            if(!key.equals("request_param") && !key.equals("status") ) {
                                businessMap.put(key, tempJson.get(key));
                            }
                        }
                        //request_param
                        JSONObject requestParam = (JSONObject) tempJson.get("request_param");
                        if(requestParam != null) {
                            @SuppressWarnings("unchecked")
                            Iterator<String> keys2 = requestParam.keySet().iterator();
                            while (keys2.hasNext()) {
                                String key = keys2.next();
                                requestParamMap.put(key, requestParam.get(key));
                            }
                        }

                        //request_param
                        JSONObject status = (JSONObject) tempJson.get("status");
                        if(status != null) {
                            @SuppressWarnings("unchecked")
                            Iterator<String> keys3 = status.keySet().iterator();
                            while (keys3.hasNext()) {
                                String key = keys3.next();
                                statusMap.put(key, status.get(key));
                            }
                        }


                    }
                }

            }

            businessList.add(businessMap);
            requestParamList.add(requestParamMap);
            statusList.add(statusMap);

            log.debug("businessList:" + businessList);
            log.debug("requestParamList:" + requestParamList);
            log.debug("statusList:" + statusList);

            result.addDataSet("output1", businessList);
            result.addDataSet("output2", requestParamList);
            result.addDataSet("output3", statusList);

        } catch (Exception e) {
            log.debug("api 사업자 진위확인 Exception : " + e.getMessage());

            result.setErrorCode(-1);
            result.setErrorMsg(" ");
        }

        return result;
    }

    /**
     *  open api url 호출
     * @param
     * @return
     */

    public String processHTTP2(Map<String,String> params ) throws Exception
    {
        int statusCode = 0;
        String url = "http://api.odcloud.kr/api/nts-businessman/v1/validate?serviceKey=발급받은서비스키";

        CloseableHttpClient httpclient = HttpClientBuilder.create().build();
        HttpPost httpPost = new HttpPost(url);

        String bNo = EgovStringUtil.nvl(params.get("b_no"));  //사업자등록번호(필수)
        String pNm = EgovStringUtil.nvl(params.get("p_nm"));  //대표자성명(필수)
        String startDt = EgovStringUtil.nvl(params.get("start_dt"));  //개업일자(필수)
        String pNm2 = EgovStringUtil.nvl(params.get("p_nm2"));  //대표자성명2
        String bNm = EgovStringUtil.nvl(params.get("b_nm"));  //상호
        String corpNo = EgovStringUtil.nvl(params.get("corp_no"));  //법인등록번호
        String bSector = EgovStringUtil.nvl(params.get("b_sector"));  //주업태명
        String bType = EgovStringUtil.nvl(params.get("b_type"));  //주종목명

        String json = "{\"businesses\": [ { \"b_no\":\"" +bNo + "\","; //사업자등록번호(필수)
               json += "\"start_dt\":\"" +startDt + "\","; //개업일자(필수)
               json += "\"p_nm\":\"" +pNm + "\","; //대표자성명(필수)
               json += "\"p_nm2\":\"" + pNm2 + "\","; //대표자성명2
               json += "\"b_nm\":\"" + bNm + "\","; //상호
               json += "\"corp_no\":\"" + corpNo + "\","; //법인등록번호
               json += "\"b_sector\":\"" + bSector + "\","; //주업태명
               json += "\"b_type\":\"" + bType + "\""; //주종목명
               json += "}]}";

            //   log.debug("json" + json);

        try {
            StringEntity requestEntity = new StringEntity(json , "utf-8");

            httpPost.addHeader("content-type","application/json");
            httpPost.addHeader("Accept","application/json");
            httpPost.setEntity(requestEntity);

            HttpResponse response = httpclient.execute(httpPost);
            statusCode = response.getStatusLine().getStatusCode();

            if( statusCode == 200){
                // 정상인 경우 메시지를 읽어 들여 그 결과를 리턴한다.
                BufferedReader rd = new BufferedReader( new InputStreamReader(response.getEntity().getContent()));
                StringBuffer result = new StringBuffer();
                String line = "";
                while ((line = rd.readLine()) != null) {
                    result.append(line);
                }
                 log.debug("result.toString(): " + result.toString() );
                return result.toString();
            }

        } catch (Throwable e) {
            throw new HttpException((new StringBuilder("오류가 발생하였습니다.")).append(statusCode).toString());
        }

        if( statusCode != 200)
        {
            throw new HttpException((new StringBuilder("오류가 발생하였습니다.")).append(statusCode).toString());
        }

        return "";

    }

}
728x90
반응형

댓글



"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

loading