ソースを参照

사업자등록번호로 사업자 정보 조회 API 추가

gagamel 5 年 前
コミット
9ffc9249e1

+ 209 - 0
style24.core/src/main/java/com/style24/core/biz/thirdparty/DataGoKrApi.java

@@ -0,0 +1,209 @@
+package com.style24.core.biz.thirdparty;
+
+import java.io.StringReader;
+import java.net.URI;
+
+import javax.annotation.PostConstruct;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.RestTemplate;
+import org.w3c.dom.Document;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
+
+import com.style24.persistence.domain.DataGoKr;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 공공데이터포털을 이용한 통신판매사업자정보 조회
+ * 
+ * @author gagamel
+ * @since 2020. 11. 9
+ */
+@Component
+@Slf4j
+public class DataGoKrApi {
+
+	// 공공데이터포털 URL
+	private String apiUrl = "http://apis.data.go.kr/1130000/openapi/service/MllInfoService";
+
+	// 서비스키
+	private String serviceKey = "";
+
+	@Autowired
+	private RestTemplate restTemplate;
+
+	@PostConstruct
+	public void init() {
+		log.debug("\n\n---- DataGoKrApi initialization started ----");
+		log.debug("apiUrl: [{}]", apiUrl);
+		log.debug("serviceKey: [{}]", serviceKey);
+		log.debug("\n--- DataGoKrApi initialization completed ----\n");
+	}
+
+	/**
+	 * 사업자등록번호로 통신판매사업자 정보 조회
+	 * @param bizNo - 사업자등록번호
+	 * @return 통신판매사업자 정보
+	 * @throws Exception
+	 * @author gagamel
+	 * @since 2020. 11. 18
+	 */
+	public DataGoKr getMllBizRNoInfo(String bizNo) throws Exception {
+		DataGoKr dataGoKr = new DataGoKr();
+
+		// Parameter
+		MultiValueMap<String, String> params = new LinkedMultiValueMap<String, String>();
+		params.add("ServiceKey", serviceKey);
+		params.add("wrkrNo", bizNo);
+		log.info("params: {}", params);
+
+		// Header
+		HttpHeaders headers = new HttpHeaders();
+		headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+
+		HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(params, headers);
+		URI url = URI.create(apiUrl + "/" + "getMllBizRNoInfo");
+
+		// POST방식으로 호출
+		ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, request, String.class);
+		log.info("responseEntity.getStatusCode(): {} ", responseEntity.getStatusCode());
+
+		String responseXml = responseEntity.getBody();
+		log.info("responseEntity.getBody(): {}", responseXml);
+
+//		<response>
+//			<header>
+//				<resultCode>00</resultCode>
+//				<resultMsg>NORMAL SERVICE.</resultMsg>
+//			</header>
+//			<body>
+//				<items>
+//					<item>
+//						<bupNm>(유)아이에스피</bupNm>
+//						<dmnNm>www.cjlion.kr</dmnNm>
+//						<mngStateCode>01</mngStateCode>
+//						<permYmd>20111228</permYmd>
+//						<repsntNm>김은령</repsntNm>
+//						<seq>26</seq>
+//					</item>
+//				</items>
+//				<numOfRows>10</numOfRows>
+//				<pageNo>1</pageNo>
+//				<totalCount>1</totalCount>
+//			</body>
+//		</response>
+
+		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+		DocumentBuilder builder = factory.newDocumentBuilder();
+		Document document = builder.parse(new InputSource(new StringReader(responseXml)));
+		NodeList nodeList = document.getElementsByTagName("items");
+
+		if (nodeList.getLength() > 0) {
+			NamedNodeMap nodeMap = nodeList.item(0).getAttributes();
+
+			dataGoKr.setSeq(nodeMap.getNamedItem("seq").getTextContent());
+			dataGoKr.setBupNm(nodeMap.getNamedItem("bupNm").getTextContent());
+			dataGoKr.setRepsntNm(nodeMap.getNamedItem("repsntNm").getTextContent());
+			dataGoKr.setSidoNm(nodeMap.getNamedItem("sidoNm").getTextContent());
+			dataGoKr.setDmnNm(nodeMap.getNamedItem("dmnNm").getTextContent());
+			dataGoKr.setMngStateCode(nodeMap.getNamedItem("mngStateCode").getTextContent());
+			dataGoKr.setPermYmd(nodeMap.getNamedItem("permYmd").getTextContent());
+
+			this.getMllInfoDetail(dataGoKr);
+		}
+
+		return dataGoKr;
+	}
+
+	/**
+	 * 통신판매사업자 상세 정보 조회
+	 * @param dataGoKr - 통신판매사업자 정보
+	 * @return 통신판매사업자 상세 정보
+	 * @throws Exception
+	 * @author gagamel
+	 * @since 2020. 11. 18
+	 */
+	private void getMllInfoDetail(DataGoKr dataGoKr) throws Exception {
+		// Parameter
+		MultiValueMap<String, String> params = new LinkedMultiValueMap<String, String>();
+		params.add("ServiceKey", serviceKey);
+		params.add("seq", dataGoKr.getSeq());
+		log.info("params: {}", params);
+
+		// Header
+		HttpHeaders headers = new HttpHeaders();
+		headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+
+		HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(params, headers);
+		URI url = URI.create(apiUrl + "/" + "getMllInfoDetail");
+
+		// POST방식으로 호출
+		ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, request, String.class);
+		log.info("responseEntity.getStatusCode(): {} ", responseEntity.getStatusCode());
+
+		String responseXml = responseEntity.getBody();
+		log.info("responseEntity.getBody(): {}", responseXml);
+
+//		<response>
+//			<header>
+//				<resultCode>00</resultCode>
+//				<resultMsg>NORMAL SERVICE.</resultMsg>
+//			</header>
+//			<body>
+//				<items>
+//					<item>
+//						<addr>광주광역시 서구 동천동 235번지 **********</addr>
+//						<apvPermMgtNo>2011-광주서구-00485</apvPermMgtNo>
+//						<bupNm>(유)아이에스피</bupNm>
+//						<bupYn>0</bupYn>
+//						<dmnNm>www.cjlion.kr</dmnNm>
+//						<mngStateCode>01</mngStateCode>
+//						<permYmd>20111228</permYmd>
+//						<repsntNm>김은령</repsntNm>
+//						<seq>26</seq>
+//						<silMet>02</silMet>
+//						<treArtcl>0608</treArtcl>
+//						<wrkrNo>4108654518</wrkrNo>
+//					</item>
+//				</items>
+//				<numOfRows>10</numOfRows>
+//				<pageNo>1</pageNo>
+//				<totalCount>1</totalCount>
+//			</body>
+//		</response>
+
+		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+		DocumentBuilder builder = factory.newDocumentBuilder();
+		Document document = builder.parse(new InputSource(new StringReader(responseXml)));
+		NodeList nodeList = document.getElementsByTagName("items");
+
+		if (nodeList.getLength() > 0) {
+			NamedNodeMap nodeMap = nodeList.item(0).getAttributes();
+			log.info("{}", nodeMap);
+
+			dataGoKr.setNewaddr(nodeMap.getNamedItem("newaddr").getTextContent());
+			dataGoKr.setBupRegNo(nodeMap.getNamedItem("bup_reg_no").getTextContent());
+			dataGoKr.setWrkrNo(nodeMap.getNamedItem("wrkr_no").getTextContent());
+			dataGoKr.setOrgAndTeamNm(nodeMap.getNamedItem("org_and_team_nm").getTextContent());
+			dataGoKr.setRepTelno(nodeMap.getNamedItem("rep_telno").getTextContent());
+			dataGoKr.setTreArtcl(nodeMap.getNamedItem("tre_artcl").getTextContent());
+			dataGoKr.setSilMet(nodeMap.getNamedItem("sil_met").getTextContent());
+			dataGoKr.setBupYn(nodeMap.getNamedItem("bup_yn").getTextContent());
+			dataGoKr.setApvPermMgtNo(nodeMap.getNamedItem("apv_perm_mgt_no").getTextContent());
+			dataGoKr.setHostSrvAddr(nodeMap.getNamedItem("host_srv_addr").getTextContent());
+		}
+	}
+
+}

+ 36 - 0
style24.core/src/main/java/com/style24/persistence/domain/DataGoKr.java

@@ -0,0 +1,36 @@
+package com.style24.persistence.domain;
+
+import com.style24.persistence.TscBaseDomain;
+
+import lombok.Data;
+
+/**
+ * 공공데이터포털을 이용한 통신판매사업자정보
+ * 
+ * @author gagamel
+ * @since 2020. 11. 18
+ */
+@SuppressWarnings("serial")
+@Data
+public class DataGoKr extends TscBaseDomain {
+
+	private String seq;				// 번호
+	private String bupNm;			// 상호명
+	private String repsntNm;		// 대표자명
+	private String sidoNm;			// 시도명
+	private String dmnNm;			// 도메인
+	private String mngStateCode;	// 영업상태코드(01:통신판매업신고, 02:통신판매업휴업, 03:통신판매업폐업, 04:직권취소, 05:타시군구이관, 06:타시군구전입, 07:직권말소, 08:영업재개)
+	private String permYmd;			// 신고일자
+
+	private String newaddr;			// 도로명주소
+	private String bupRegNo;		// 법인등록번호
+	private String wrkrNo;			// 사업자등록번호
+	private String orgAndTeamNm;	// 신고기관명
+	private String repTelno;		// 신고기관대표연락처
+	private String treArtcl;		// 취급품목(01:종합몰, 02:교육/도서/완구/오락, 03:가전, 04:컴퓨터/사무용품, 05:가구/수납용품, 06:의류/패션/잡화/뷰티, 07:레저/여행/공연, 08:건강/식품, 09:성인/성인용품, 10:자동차/자동차용품, 11:상품권, 12:기타)
+	private String silMet;			// 판매방식(01:TV홈쇼핑, 02:인터넷, 03:카탈로그, 04:신문잡지, 05:기타)
+	private String bupYn;			// 법인여부(0:개인, 1:법인)
+	private String apvPermMgtNo;	// 통신판매번호
+	private String hostSrvAddr;		// 호스트서버소재지
+
+}