728x90
반응형

화면 구성

 

1. JQuery

ajax로 node 서버에 CNU값을 보낸다.

$.ajax({
		type: 'POST',
		url: '/company/checkCNU',
		dataType: 'json',
		data: {
			CNU : CNU
		}
	})
}

 

2. Node.js

사업자 휴폐업 조회 오픈 API를 사용했다.

JQuery에서 받아온 데이터를 가져와 직접 만든 postCRN이란 함수에 인자로 넣어서 실행해준다.

사업자 번호가 올바르면 "부가가치세 일반과세자 입니다."로 뜨기에, 올바른 사업자번호일 경우 true값을 보내도록

하였다. 이후에 res.send를 이용하여 클라이언트쪽에서 판별하기로 하였다.

// 사업자등록번호 검증
router.post('/checkCNU', async (req, res, next) => {
  const CNU = req.body.CNU;
  const CNU_CK = await postCRN(CNU);
  
  // Company Number check
  async function postCRN(crn){
    const postUrl = "https://teht.hometax.go.kr/wqAction.do?actionId=ATTABZAA001R08&screenId=UTEABAAA13&popupYn=false&realScreenId=";
    const xmlRaw = "<map id=\"ATTABZAA001R08\"><pubcUserNo/><mobYn>N</mobYn><inqrTrgtClCd>1</inqrTrgtClCd><txprDscmNo>{CRN}</txprDscmNo><dongCode>15</dongCode><psbSearch>Y</psbSearch><map id=\"userReqInfoVO\"/></map>";
      try {
        const result  = await axios.post(postUrl,xmlRaw.replace(/\{CRN\}/, crn),
          { headers: { 'Content-Type': 'text/xml' } });
        let CRNumber = await getCRNresultFromXml(result.data);
        
        if (CRNumber ==='부가가치세 일반과세자 입니다.') {
          CRNumber = true;
        } else {
          CRNumber = false;
        }
        
        return res.send({ CRNumber : CRNumber });
        
      } catch(err){
        console.error(err);
        next(err);
      }
          
  }
  
  function getCRNresultFromXml(dataString) {
    return new Promise((resolve, reject) => {
      xml2js.parseString(dataString, // API 응답의 'data' 에 지정된 xml 값 추출, 파싱
        (err, res) => {
          if (err) reject(err);
          else resolve(res.map.trtCntn[0]); // trtCntn 이라는 TAG 의 값을 get
        });
    });
  }
});

 

 

3. JQuery

 

따라서 결과값이 true일 경우, false일 경우에 각각 원하는 작업이 이루어지도록 구현했다.

// 사업자 번호 조회 및 정보 가져오기 기능
function checkCNU(companyNumber) {
	var CNU = document.getElementsByName(companyNumber)[0].value;
	$.ajax({
		type: 'POST',
		url: '/company/checkCNU',
		dataType: 'json',
		data: {
			CNU : CNU
		}
	}).done(function(data) {
		if(data.CRNumber) {
		    alert(i18nconvert('register_business_right'));
		    document.getElementsByName('hideCNU')[0].value = 'true';
		    document.getElementById('err-msg-cnu').innerHTML = i18nconvert('register_company_cer_success');
		    $("input[name='CNU']").prop('readonly', true);
		    $('.agent-select').removeClass('d-none');
		}
		else {
			alert(i18nconvert('register_business_noexist'));
			document.getElementsByName("CNA").value = null;
			document.getElementsByName("NA").value = null;
			document.getElementsByName("MN").value = null;
			document.getElementsByName("PN").value = null;
			document.getElementsByName("addr1").value = null;
			document.getElementsByName("addr2").value = null;
			document.getElementsByName('hideCNU')[0].value = null;
			document.getElementById('err-msg-cnu').innerHTML = i18nconvert('register_company_need_cer');
			$("input[name='CNU']").prop('readonly', false);
		    $('.agent-select').addClass('d-none');
		}
	});
}

 

728x90
반응형

+ Recent posts