SmartBill Open API Service REST API Reference - JAVA - [ Digital Tax Invoice ] 2016.09.02 ( 주 ) 비즈니스온커뮤니케이션연구소개발팀 1
개정이력 날짜 내용 2017-01-10 수신업체 SystemID 입력파라미터추가 (DTI_SAVE, ARISSUE, DETAILARISSUE) 삼성전자 2017-05-17 Rvalue 관련주의사항추가 (ARISSUE, DETAILARISSUE, RARISSUE) 2017-05-18 거래명세서관련주석소스수정 2017-07-19 플랫폼코드입력파라미터추가 (ARISSUE, DETAILARISSUE) 허브사업자를분류하기위한코드 2017-11-03 플랫폼코드설명수정 (B2B도입모델 ) 2018-01-12 인증서등록정보조회기능추가 2018-05-10 원본 (XML) 조회기능추가 2018-06-04 건별상세조회 (DTI_STATUS) 함수에조회항목추가 수정세금계산서여부, 수탁자회사명, 수탁자사업자번호, 위수탁여부, 공급받는자회사명, 공급받는자 사업자번호, 공급받는자유형 ( 회원 / 비회원 / 개인 ), 공급자회사명, 공급자사업자번호, 정 / 역구분, 세 금계산서유형 ( 과세 / 면세 ), 거래명세서포함여부, 매출 / 매입여부, 영수 / 청구구분, 공급자이메일, 공 급받는자이메일, 수탁자이메일 2018-06-04 미리보기양식조회에거래명세서추가 ( 과세, 면세, 위수탁과세, 위수탁면세 ) 2
목차 1. RequestModel 정의및설명... 4 1.1 RequestModel... 4 2. 프로세스별예시... 5 2.1 세금계산서발행... 5 2.2 세금계산서저장... 8 2.3 세금계산서역발행요청... 10 2.4 세금계산서역발행... 12 2.5 거래명세서발행... 14 2.6 거래명세서역발행요청... 17 2.7 거래명세서역발행... 19 2.8 세금계산서상태변경... 21 2.9 메일재전송... 23 2.10 국세청전송요청... 25 2.11 세금계산서상태조회... 27 2.12 부가정보조회... 29 2.13 메일수신결과조회... 32 2.14 미리보기양식조회... 34 2.15 보관함조회... 36 2.16 미처리함조회... 38 2.17 건별상세조회... 41 2.18 건별상세이력조회... 44 2.19 회원가입결과조회... 46 2.20 세금계산서발행결과조회... 48 2.21 인증토큰발급... 50 2.22 공인인증서등록정보조회... 52 2.23 원본 (XML) 조회... 54 3
1. RequestModel 정의및설명 1.1 RequestModel Param Name Param ID Description 메시지ID MessageId GUID( 전역고유식별자 ) 생성값 요청시그널 Signal 처리할작업에대한구분값 요청시간 RequestTime 처리할작업의요청시간 ( 포맷 : YYYYMMDDHH24MISS) 송신사업자번호 SendComRegno 요청하는사업장의사업자번호 수신사업자번호 ReceiveComRegno 요청받는사업장의사업자번호 인증토큰 AuthToken 스마트빌의 API를이용하기위한스마트빌에서인증받은코드 서비스코드 ServiceCode 스마트빌의서비스구분값 시스템타입 SystemType 스마트빌의인터페이스시스템구분값 참조번호 ConversationId 스마트빌의전자세금계산서의개별 Id( 문자열배열 ) SMTP이메일 SMTPEmail 유통용이메일주소 ( 옵션 ) RValue RValue 인증서의신원확인값 인증서비밀번호 CertPassword 인증서의비밀번호 서명원본 XML SignedXML 인증서의서명정보가있는세금계산서원본 xml 미서명원본 XML UnSignedXML 세금계산서원본 xml(xml형식은 [4. KEC 표준전자세금계산서 v3.0 항목표.xls] 참조 ) 인증코드 AuthCode 인증토큰발급에필요한사전코드 스마트빌아이디 SbId 스마트빌포탈에서사용되는아이디 유효기간설정코드 ExpirationDateCode 인증토큰의유효기간설정을위한코드 인증토큰만료일 ExpirationDate 인증토큰의유효기간만료일 검색시작일자 SearchFromDate 검색할시작일자 검색종료일자 SearchToDate 검색할종료일자 검색사업자번호 SearchComRegno 검색할사업자번호 이메일 Email 이메일주소 ( 문자열배열 ) 조회타입코드 SearchTypeCode 조회를위한구분코드 보관함종류코드 RepoTypeCode 보관함구분코드 미처리함종류코드 ListTypeCode 미처리함구분코드 상태시그널 StatusSignal 세금계산서상태별구분값 상태변경사유 StatusReason 세금계산서상태변경에대한사유 휴대전화번호 Phone 휴대전화번호 승인번호 IssueId 24자리의승인번호 ( 문자열배열 ) 프로세스코드 ProcessCode 프로세스에필요한코드 ( 타ASP XML업로드시등록 : 0, 삭제 : 1) 수신시스템ID SystemId 수신자의시스템구분값 (ex. 삼성전자 ) 플랫폼코드 PlatformCode B2B 모델일경우 허브업체사업자번호 (OpenAPI 도입모델설명서참고 ) 4
2. 프로세스별예시 2.1 세금계산서발행 매출세금계산서를발행한다. 요청시그널 / 서비스코드 / 시스템타입은고정값을사용한다. 2.1.1 Request 메시지ID MessageId String 트랜잭션식별자 요청시그널 Signal String(30) 고정값 : ARISSUE 요청시간 RequestTime String(14) YYYYMMDDHH24MISS 송신사업자번호 SendComRegno String (13) 공급자사업자번호 수신사업자번호 ReceiveComRegno String (13) 공급받는자사업자번호 인증토큰 AuthToken String(40) 서비스코드 ServiceCode String(10) 고정값 : DTI 시스템타입 SystemType String(10) 고정값 : OAPI 참조번호 ConversationId String[] 스마트빌식별자 (35자리) SMTP이메일 SMTPEmail String(20) 유통용이메일주소 ( 옵션 ) RValue RValue String 신원확인값 ( 서명모듈이용해서발행할경우에만필요 ) 인증서비밀번호 CertPassword String 암호화된인증서의비밀번호 서명원본 XML SignedXML String 서명정보가있는세금계산서원본 xml (xml형식은 [4. KEC 표준전자세금계산서 v3.0 항목표.xls] 참조 ) 수신시스템ID SystemId String 수신업체의 SystemID 입력 (ex. 삼성전자 ) 플랫폼코드 PlatformCode String 허브업체의사업자번호 (B2B모델일경우에만필요 ) 5
2.1.2 Request Sample String[] arrconvid = {"11111111192208758882201504011710003"; JSONObject jsonobj = new JSONObject(); jsonobj.put("messageid", "3267cab1-3ea6-4aa6-b988-7d27d6d5ac89"); jsonobj.put("signal", "ARISSUE"); jsonobj.put("requesttime", "20150401105301"); jsonobj.put("sendcomregno", "1111111119"); jsonobj.put("receivecomregno", "2208758882"); jsonobj.put("authtoken", "dxvcce96zvlxvhbpeklgcithqlercmroyjheedfxyi8rvxjmvmzpqk1ltt0k"); jsonobj.put("servicecode", "DTI"); jsonobj.put("systemtype", "OAPI"); jsonobj.put("conversationid", arrconvid); jsonobj.put("smtpemail", ""); jsonobj.put("rvalue", "lsh2winygvm7lhfusp6ptczlbty="); // 서명모듈이용해서발행할경우에만필요 jsonobj.put("certpassword", "Ygvm7lhfuSp6p"); // 암호화된인증서의비밀번호 jsonobj.put("systemid", ""); jsonobj.put("platformcode", ""); // 허브업체의구분코드 jsonobj.put("signedxml", ""); // 서명정보가있는세금계산서 xml URL url = new URL("http://demoapi.smartbill.co.kr/sb-api/request/"); HttpURLConnection conn = (HttpURLConnection) url.openconnection(); conn.setrequestmethod("post"); conn.setusecaches(false); conn.setdoinput(true); conn.setdooutput(true); conn.setconnecttimeout(10000); conn.setrequestproperty("content-type", "application/json"); conn.setrequestproperty("accept", "application/json"); DataOutputStream os = new DataOutputStream(conn.getOutputStream()); os.write(jsonobj.tostring().getbytes()); os.flush(); os.close(); 6
2.1.3 Response 메시지ID MessageId String 요청한트랜잭션식별자 요청시그널 Signal String(30) 고정값 : ARISSUE 참조번호 ConversationId String(35) 요청한스마트빌식별자 응답시간 ResponseTime String(14) YYYYMMDDHH24MISS 처리코드 ResultCode String(5) 처리결과코드 처리메시지 ResultMessage String(2000) 처리결과상세내역 2.1.4 Response Sample BufferedReader br; String response = ""; if(null!= conn){ br = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line = null; while((line = br.readline())!= null){ response += line + "\n"; JSONObject jsonresponse = new JSONObject(response); if("30000".equalsignorecase(jsonresponse.getstring("resultcode"))){ System.out.println(jsonResponse.getString(" 정상적으로처리되었습니다 ")); else{ System.out.println(jsonResponse.getString("ResultMessage")); 7
2.2 세금계산서저장 발행예정인매출세금계산서를요청한다. 요청시그널 / 서비스코드 / 시스템타입은고정값을사용한다. 2.2.1 Request 메시지ID MessageId String 트랜잭션식별자 요청시그널 Signal String(30) 고정값 : DTI_SAVE 요청시간 RequestTime String(14) YYYYMMDDHH24MISS 송신사업자번호 SendComRegno String (13) 공급자사업자번호 수신사업자번호 ReceiveComRegno String (13) 공급받는자사업자번호 인증토큰 AuthToken String(40) 서비스코드 ServiceCode String(10) 고정값 : DTI 시스템타입 SystemType String(10) 고정값 : OAPI 참조번호 ConversationId String[] 스마트빌식별자 (35자리) 미서명원본 XML UnSignedXML String 서명정보가없는세금계산서원본 xml (xml형식은 [4. KEC 표준전자세금계산서 v3.0 항목표.xls] 참조 ) 수신시스템ID SystemId String 수신업체의 SystemID 입력 (ex. 삼성전자 ) 2.2.2 Request Sample String[] arrconvid = {"11111111192208758882201504011710003"; JSONObject jsonobj = new JSONObject(); jsonobj.put("messageid", "3267cab1-3ea6-4aa6-b988-7d27d6d5ac89"); jsonobj.put("signal", "DTI_SAVE"); jsonobj.put("requesttime", "20150401105301"); jsonobj.put("sendcomregno", "1111111119"); jsonobj.put("receivecomregno", "2208758882"); jsonobj.put("authtoken", "dxvcce96zvlxvhbpeklgcithqlercmroyjheedfxyi8rvxjmvmzpqk1ltt0k"); jsonobj.put("servicecode", "DTI"); jsonobj.put("systemtype", "OAPI"); jsonobj.put("conversationid", arrconvid); jsonobj.put("systemid", ""); jsonobj.put("unsignedxml", ""); // 서명정보가없는세금계산서 xml URL url = new URL("http://demoapi.smartbill.co.kr/sb-api/request/"); HttpURLConnection conn = (HttpURLConnection) url.openconnection(); conn.setrequestmethod("post"); conn.setusecaches(false); conn.setdoinput(true); conn.setdooutput(true); conn.setconnecttimeout(10000); conn.setrequestproperty("content-type", "application/json"); conn.setrequestproperty("accept", "application/json"); DataOutputStream os = new DataOutputStream(conn.getOutputStream()); os.write(jsonobj.tostring().getbytes()); os.flush(); os.close(); 8
2.2.3 Response 메시지ID MessageId String 요청한트랜잭션식별자 요청시그널 Signal String(30) 고정값 : DTI_SAVE 참조번호 ConversationId String(35) 요청한스마트빌식별자 응답시간 ResponseTime String(14) YYYYMMDDHH24MISS 처리코드 ResultCode String(5) 처리결과코드 처리메시지 ResultMessage String(2000) 처리결과상세내역 2.2.4 Response Sample BufferedReader br; String response = ""; if(null!= conn){ br = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line = null; while((line = br.readline())!= null){ response += line + "\n"; JSONObject jsonresponse = new JSONObject(response); if("30000".equalsignorecase(jsonresponse.getstring("resultcode"))){ System.out.println(jsonResponse.getString(" 정상적으로처리되었습니다 ")); else{ System.out.println(jsonResponse.getString("ResultMessage")); 9
2.3 세금계산서역발행요청 매입세금계산서를요청한다. 요청시그널 / 서비스코드 / 시스템타입은고정값을사용한다. 2.3.1 Request 메시지ID MessageId String 트랜잭션식별자 요청시그널 Signal String(30) 고정값 : RARREQUEST 요청시간 RequestTime String(14) YYYYMMDDHH24MISS 송신사업자번호 SendComRegno String (13) 공급받는자사업자번호 수신사업자번호 ReceiveComRegno String (13) 공급자사업자번호 인증토큰 AuthToken String(40) 서비스코드 ServiceCode String(10) 고정값 : DTI 시스템타입 SystemType String(10) 고정값 : OAPI 참조번호 ConversationId String[] 스마트빌식별자 (35자리) 미서명원본 XML UnSignedXML String 서명정보가없는세금계산서원본 xml (xml형식은 [4. KEC 표준전자세금계산서 v3.0 항목표.xls] 참조 ) 2.3.2 Request Sample String[] arrconvid = {"11111111192208758882201504011710003"; JSONObject jsonobj = new JSONObject(); jsonobj.put("messageid", "3267cab1-3ea6-4aa6-b988-7d27d6d5ac89"); jsonobj.put("signal", "RARREQUEST"); jsonobj.put("requesttime", "20150401105301"); jsonobj.put("sendcomregno", "1111111119"); jsonobj.put("receivecomregno", "2208758882"); jsonobj.put("authtoken", "dxvcce96zvlxvhbpeklgcithqlercmroyjheedfxyi8rvxjmvmzpqk1ltt0k"); jsonobj.put("servicecode", "DTI"); jsonobj.put("systemtype", "OAPI"); jsonobj.put("conversationid", arrconvid); jsonobj.put("unsignedxml", ""); // 서명정보가없는세금계산서 xml URL url = new URL("http://demoapi.smartbill.co.kr/sb-api/request/"); HttpURLConnection conn = (HttpURLConnection) url.openconnection(); conn.setrequestmethod("post"); conn.setusecaches(false); conn.setdoinput(true); conn.setdooutput(true); conn.setconnecttimeout(10000); conn.setrequestproperty("content-type", "application/json"); conn.setrequestproperty("accept", "application/json"); DataOutputStream os = new DataOutputStream(conn.getOutputStream()); os.write(jsonobj.tostring().getbytes()); os.flush(); os.close(); 10
2.3.3 Response 메시지ID MessageId String 요청한트랜잭션식별자 요청시그널 Signal String(30) 고정값 : RARREQUEST 참조번호 ConversationId String(35) 요청한스마트빌식별자 응답시간 ResponseTime String(14) YYYYMMDDHH24MISS 처리코드 ResultCode String(5) 처리결과코드 처리메시지 ResultMessage String(2000) 처리결과상세내역 2.3.4 Response Sample BufferedReader br; String response = ""; if(null!= conn){ br = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line = null; while((line = br.readline())!= null){ response += line + "\n"; JSONObject jsonresponse = new JSONObject(response); if("30000".equalsignorecase(jsonresponse.getstring("resultcode"))){ System.out.println(jsonResponse.getString(" 정상적으로처리되었습니다 ")); else{ System.out.println(jsonResponse.getString("ResultMessage")); 11
2.4 세금계산서역발행 발행요청된매출세금계산서를발행한다. 요청시그널 / 서비스코드 / 시스템타입은고정값을사용한다. 2.4.1 Request 메시지ID MessageId String 트랜잭션식별자 요청시그널 Signal String(30) 고정값 : RARISSUE 요청시간 RequestTime String(14) YYYYMMDDHH24MISS 송신사업자번호 SendComRegno String (13) 공급자사업자번호 수신사업자번호 ReceiveComRegno String (13) 공급받는자사업자번호 인증토큰 AuthToken String(40) 서비스코드 ServiceCode String(10) 고정값 : DTI 시스템타입 SystemType String(10) 고정값 : OAPI 참조번호 ConversationId String[] 스마트빌식별자 (35자리) SMTP이메일 SMTPEmail String(20) 유통용이메일주소 ( 옵션 ) RValue RValue String 신원확인값 ( 서명모듈이용해서발행할경우에만필요 ) 인증서비밀번호 CertPassword String 암호화된인증서의비밀번호 서명원본 XML SignedXML String 서명정보가있는세금계산서원본 xml (xml형식은 [4. KEC 표준전자세금계산서 v3.0 항목표.xls] 참조 ) 2.4.2 Request Sample String[] arrconvid = {"11111111192208758882201504011710003"; JSONObject jsonobj = new JSONObject(); jsonobj.put("messageid", "3267cab1-3ea6-4aa6-b988-7d27d6d5ac89"); jsonobj.put("signal", "RARISSUE"); jsonobj.put("requesttime", "20150401105301"); jsonobj.put("sendcomregno", "1111111119"); jsonobj.put("receivecomregno", "2208758882"); jsonobj.put("authtoken", "dxvcce96zvlxvhbpeklgcithqlercmroyjheedfxyi8rvxjmvmzpqk1ltt0k"); jsonobj.put("servicecode", "DTI"); jsonobj.put("systemtype", "OAPI"); jsonobj.put("conversationid", arrconvid); jsonobj.put("smtpemail", ""); jsonobj.put("rvalue", "lsh2winygvm7lhfusp6ptczlbty="); // 서명모듈이용해서발행할경우에만필요 jsonobj.put("certpassword", " sdfsd345fsdf55faadfs "); // 암호화된인증서의비밀번호 jsonobj.put("signedxml", ""); // 서명정보가있는세금계산서 xml URL url = new URL("http://demoapi.smartbill.co.kr/sb-api/request/"); HttpURLConnection conn = (HttpURLConnection) url.openconnection(); conn.setrequestmethod("post"); conn.setusecaches(false); conn.setdoinput(true); conn.setdooutput(true); conn.setconnecttimeout(10000); conn.setrequestproperty("content-type", "application/json"); conn.setrequestproperty("accept", "application/json"); DataOutputStream os = new DataOutputStream(conn.getOutputStream()); os.write(jsonobj.tostring().getbytes()); os.flush(); os.close(); 12
2.4.3 Response 메시지ID MessageId String 요청한트랜잭션식별자 요청시그널 Signal String(30) 고정값 : RARISSUE 참조번호 ConversationId String(35) 요청한스마트빌식별자 응답시간 ResponseTime String(14) YYYYMMDDHH24MISS 처리코드 ResultCode String(5) 처리결과코드 처리메시지 ResultMessage String(2000) 처리결과상세내역 2.4.4 Response Sample BufferedReader br; String response = ""; if(null!= conn){ br = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line = null; while((line = br.readline())!= null){ response += line + "\n"; JSONObject jsonresponse = new JSONObject(response); if("30000".equalsignorecase(jsonresponse.getstring("resultcode"))){ System.out.println(jsonResponse.getString(" 정상적으로처리되었습니다 ")); else{ System.out.println(jsonResponse.getString("ResultMessage")); 13
2.5 거래명세서발행 매출거래명세서 ( 세금계산서 + 거래명세서 ) 를발행한다. 요청시그널 / 서비스코드 / 시스템타입은고정값을사용한다. 2.5.1 Request 메시지ID MessageId String 트랜잭션식별자 요청시그널 Signal String(30) 고정값 : DETAILARISSUE 요청시간 RequestTime String(14) YYYYMMDDHH24MISS 송신사업자번호 SendComRegno String (13) 공급자사업자번호 수신사업자번호 ReceiveComRegno String (13) 공급받는자사업자번호 인증토큰 AuthToken String(40) 서비스코드 ServiceCode String(10) 고정값 : DTI 시스템타입 SystemType String(10) 고정값 : OAPI 참조번호 ConversationId String[] 스마트빌식별자 (35자리) SMTP이메일 SMTPEmail String(20) 유통용이메일주소 ( 옵션 ) RValue RValue String 신원확인값 ( 서명모듈이용해서발행할경우에만필요 ) 인증서비밀번호 CertPassword String 암호화된인증서의비밀번호 서명원본 XML SignedXML String 서명정보가있는세금계산서원본 xml 미서명원본 XML UnSignedXML String 서명정보가없는거래명세서원본 xml 수신시스템ID SystemId String 수신업체의 SystemID 입력 (ex. 삼성전자 ) 플랫폼코드 PlatformCode String 허브업체의사업자번호 (B2B모델일경우에만필요 ) 14
2.5.2 Request Sample String[] arrconvid = {"11111111192208758882201504011710003"; JSONObject jsonobj = new JSONObject(); jsonobj.put("messageid", "3267cab1-3ea6-4aa6-b988-7d27d6d5ac89"); jsonobj.put("signal", "DETAILARISSUE"); jsonobj.put("requesttime", "20150401105301"); jsonobj.put("sendcomregno", "1111111119"); jsonobj.put("receivecomregno", "2208758882"); jsonobj.put("authtoken", "dxvcce96zvlxvhbpeklgcithqlercmroyjheedfxyi8rvxjmvmzpqk1ltt0k"); jsonobj.put("servicecode", "DTI"); jsonobj.put("systemtype", "OAPI"); jsonobj.put("conversationid", arrconvid); jsonobj.put("smtpemail", ""); jsonobj.put("rvalue", "lsh2winygvm7lhfusp6ptczlbty="); // 서명모듈이용해서발행할경우에만필요 jsonobj.put("certpassword", "sdfsd345fsdf55faadfs"); // 암호화된인증서의비밀번호 jsonobj.put("systemid", ""); jsonobj.put("platformcode", ""); // 허브업체의구분코드 jsonobj.put("signedxml", ""); // 서명정보가있는세금계산서 xml jsonobj.put("unsignedxml", ""); // 서명정보가없는거래명세서 xml URL url = new URL("http://demoapi.smartbill.co.kr/sb-api/request/"); HttpURLConnection conn = (HttpURLConnection) url.openconnection(); conn.setrequestmethod("post"); conn.setusecaches(false); conn.setdoinput(true); conn.setdooutput(true); conn.setconnecttimeout(10000); conn.setrequestproperty("content-type", "application/json"); conn.setrequestproperty("accept", "application/json"); DataOutputStream os = new DataOutputStream(conn.getOutputStream()); os.write(jsonobj.tostring().getbytes()); os.flush(); os.close(); 15
2.5.3 Response 메시지ID MessageId String 요청한트랜잭션식별자 요청시그널 Signal String(30) 고정값 : DETAILARISSUE 참조번호 ConversationId String(35) 요청한스마트빌식별자 응답시간 ResponseTime String(14) YYYYMMDDHH24MISS 처리코드 ResultCode String(5) 처리결과코드 처리메시지 ResultMessage String(2000) 처리결과상세내역 2.5.4 Response Sample BufferedReader br; String response = ""; if(null!= conn){ br = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line = null; while((line = br.readline())!= null){ response += line + "\n"; JSONObject jsonresponse = new JSONObject(response); if("30000".equalsignorecase(jsonresponse.getstring("resultcode"))){ System.out.println(jsonResponse.getString(" 정상적으로처리되었습니다 ")); else{ System.out.println(jsonResponse.getString("ResultMessage")); 16
2.6 거래명세서역발행요청 매입거래명세서 ( 세금계산서 + 거래명세서 ) 를요청한다. 요청시그널 / 서비스코드 / 시스템타입은고정값을사용한다. 2.6.1 Request 메시지ID MessageId String 트랜잭션식별자 요청시그널 Signal String(30) 고정값 : RDETAILREQUEST 요청시간 RequestTime String(14) YYYYMMDDHH24MISS 송신사업자번호 SendComRegno String (13) 공급받는자사업자번호 수신사업자번호 ReceiveComRegno String (13) 공급자사업자번호 인증토큰 AuthToken String(40) 서비스코드 ServiceCode String(10) 고정값 : DTI 시스템타입 SystemType String(10) 고정값 : OAPI 참조번호 ConversationId String[] 스마트빌식별자 (35자리) 서명원본 XML SignedXML String 서명정보가있는세금계산서원본 xml 미서명원본 XML UnSignedXML String 서명정보가없는거래명세서원본 xml 2.6.2 Request Sample String[] arrconvid = {"11111111192208758882201504011710003"; JSONObject jsonobj = new JSONObject(); jsonobj.put("messageid", "3267cab1-3ea6-4aa6-b988-7d27d6d5ac89"); jsonobj.put("signal", "RDETAILREQUEST"); jsonobj.put("requesttime", "20150401105301"); jsonobj.put("sendcomregno", "1111111119"); jsonobj.put("receivecomregno", "2208758882"); jsonobj.put("authtoken", "dxvcce96zvlxvhbpeklgcithqlercmroyjheedfxyi8rvxjmvmzpqk1ltt0k"); jsonobj.put("servicecode", "DTI"); jsonobj.put("systemtype", "OAPI"); jsonobj.put("conversationid", arrconvid); jsonobj.put("signedxml", ""); // 서명정보가있는세금계산서 xml jsonobj.put("unsignedxml", ""); // 서명정보가없는거래명세서 xml URL url = new URL("http://demoapi.smartbill.co.kr/sb-api/request/"); HttpURLConnection conn = (HttpURLConnection) url.openconnection(); conn.setrequestmethod("post"); conn.setusecaches(false); conn.setdoinput(true); conn.setdooutput(true); conn.setconnecttimeout(10000); conn.setrequestproperty("content-type", "application/json"); conn.setrequestproperty("accept", "application/json"); DataOutputStream os = new DataOutputStream(conn.getOutputStream()); os.write(jsonobj.tostring().getbytes()); os.flush(); os.close(); 17
2.6.3 Response 메시지ID MessageId String 요청한트랜잭션식별자 요청시그널 Signal String(30) 고정값 : RDETAILREQUEST 참조번호 ConversationId String(35) 요청한스마트빌식별자 응답시간 ResponseTime String(14) YYYYMMDDHH24MISS 처리코드 ResultCode String(5) 처리결과코드 처리메시지 ResultMessage String(2000) 처리결과상세내역 2.6.4 Response Sample BufferedReader br; String response = ""; if(null!= conn){ br = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line = null; while((line = br.readline())!= null){ response += line + "\n"; JSONObject jsonresponse = new JSONObject(response); if("30000".equalsignorecase(jsonresponse.getstring("resultcode"))){ System.out.println(jsonResponse.getString(" 정상적으로처리되었습니다 ")); else{ System.out.println(jsonResponse.getString("ResultMessage")); 18
2.7 거래명세서역발행 발행요청된매출거래명세서 ( 세금계산서 + 거래명세서 ) 를발행한다. 요청시그널 / 서비스코드 / 시스템타입은고정값을사용한다. 2.7.1 Request 메시지ID MessageId String 트랜잭션식별자 요청시그널 Signal String(30) 고정값 : RDETAILISSUE 요청시간 RequestTime String(14) YYYYMMDDHH24MISS 송신사업자번호 SendComRegno String (13) 공급자사업자번호 수신사업자번호 ReceiveComRegno String (13) 공급받는자사업자번호 인증토큰 AuthToken String(40) 서비스코드 ServiceCode String(10) 고정값 : DTI 시스템타입 SystemType String(10) 고정값 : OAPI 참조번호 ConversationId String[] 스마트빌식별자 (35자리) SMTP이메일 SMTPEmail String(20) 유통용이메일주소 ( 옵션 ) RValue RValue String 신원확인값 ( 서명모듈이용해서발행할경우에만필요 ) 인증서비밀번호 CertPassword String 암호화된인증서의비밀번호 서명원본 XML SignedXML String 서명정보가있는세금계산서원본 xml (xml형식은 [4. KEC 표준전자세금계산서 v3.0 항목표.xls] 참조 ) 2.7.2 Request Sample String[] arrconvid = {"11111111192208758882201504011710003"; JSONObject jsonobj = new JSONObject(); jsonobj.put("messageid", "3267cab1-3ea6-4aa6-b988-7d27d6d5ac89"); jsonobj.put("signal", "RDETAILISSUE"); jsonobj.put("requesttime", "20150401105301"); jsonobj.put("sendcomregno", "1111111119"); jsonobj.put("receivecomregno", "2208758882"); jsonobj.put("authtoken", "dxvcce96zvlxvhbpeklgcithqlercmroyjheedfxyi8rvxjmvmzpqk1ltt0k"); jsonobj.put("servicecode", "DTI"); jsonobj.put("systemtype", "OAPI"); jsonobj.put("conversationid", arrconvid); jsonobj.put("smtpemail", ""); jsonobj.put("rvalue", "lsh2winygvm7lhfusp6ptczlbty="); // 서명모듈이용해서발행할경우에만필요 jsonobj.put("certpassword", "sdfsd345fsdf55faadfs"); // 암호화된인증서의비밀번호 jsonobj.put("signedxml", ""); // 서명정보가있는세금계산서 xml URL url = new URL("http://demoapi.smartbill.co.kr/sb-api/request/"); HttpURLConnection conn = (HttpURLConnection) url.openconnection(); conn.setrequestmethod("post"); conn.setusecaches(false); conn.setdoinput(true); conn.setdooutput(true); conn.setconnecttimeout(10000); conn.setrequestproperty("content-type", "application/json"); conn.setrequestproperty("accept", "application/json"); DataOutputStream os = new DataOutputStream(conn.getOutputStream()); os.write(jsonobj.tostring().getbytes()); os.flush(); os.close(); 19
2.7.3 Response 메시지ID MessageId String 요청한트랜잭션식별자 요청시그널 Signal String(30) 고정값 : RDETAILISSUE 참조번호 ConversationId String(35) 요청한스마트빌식별자 응답시간 ResponseTime String(14) YYYYMMDDHH24MISS 처리코드 ResultCode String(5) 처리결과코드 처리메시지 ResultMessage String(2000) 처리결과상세내역 2.7.4 Response Sample BufferedReader br; String response = ""; if(null!= conn){ br = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line = null; while((line = br.readline())!= null){ response += line + "\n"; JSONObject jsonresponse = new JSONObject(response); if("30000".equalsignorecase(jsonresponse.getstring("resultcode"))){ System.out.println(jsonResponse.getString(" 정상적으로처리되었습니다 ")); else{ System.out.println(jsonResponse.getString("ResultMessage")); 20
2.8 세금계산서상태변경 세금계산서의상태를변경한다. 요청시그널 / 서비스코드 / 시스템타입은고정값을사용한다. 2.8.1 Request 메시지ID MessageId String 트랜잭션식별자 요청시그널 Signal String(30) 고정값 : CHGSTATUS 요청시간 RequestTime String(14) YYYYMMDDHH24MISS 송신사업자번호 SendComRegno String (13) 공급자사업자번호 수신사업자번호 ReceiveComRegno String (13) 공급받는자사업자번호 인증토큰 AuthToken String(40) 서비스코드 ServiceCode String(10) 고정값 : DTI 시스템타입 SystemType String(10) 고정값 : OAPI 참조번호 ConversationId String[] 스마트빌식별자 (35자리) 상태시그널 StatusSignal String 변경할상태의시그널값 ( 하단의상태시그널참조 ) 상태변경사유 StatusReason String 취소, 거부사유 2.8.2 Request Sample String[] arrconvid = {"11111111192208758882201504011710003"; JSONObject jsonobj = new JSONObject(); jsonobj.put("messageid", "3267cab1-3ea6-4aa6-b988-7d27d6d5ac89"); jsonobj.put("signal", "CHGSTATUS"); jsonobj.put("requesttime", "20150401105301"); jsonobj.put("sendcomregno", "1111111119"); jsonobj.put("receivecomregno", "2208758882"); jsonobj.put("authtoken", "dxvcce96zvlxvhbpeklgcithqlercmroyjheedfxyi8rvxjmvmzpqk1ltt0k"); jsonobj.put("servicecode", "DTI"); jsonobj.put("systemtype", "OAPI"); jsonobj.put("conversationid", arrconvid); jsonobj.put("statussignal", "REJECT"); jsonobj.put("statusreason", " 공급가액상이. 확인요망 "); URL url = new URL("http://demoapi.smartbill.co.kr/sb-api/request/"); HttpURLConnection conn = (HttpURLConnection) url.openconnection(); conn.setrequestmethod("post"); conn.setusecaches(false); conn.setdoinput(true); conn.setdooutput(true); conn.setconnecttimeout(10000); conn.setrequestproperty("content-type", "application/json"); conn.setrequestproperty("accept", "application/json"); DataOutputStream os = new DataOutputStream(conn.getOutputStream()); os.write(jsonobj.tostring().getbytes()); os.flush(); os.close(); 21
2.8.3 Response 메시지ID MessageId String 요청한트랜잭션식별자 요청시그널 Signal String(30) 고정값 : CHGSTATUS 참조번호 ConversationId String(35) 요청한스마트빌식별자 응답시간 ResponseTime String(14) YYYYMMDDHH24MISS 처리코드 ResultCode String(5) 처리결과코드 처리메시지 ResultMessage String(2000) 처리결과상세내역 2.8.4 Response Sample BufferedReader br; String response = ""; if(null!= conn){ br = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line = null; while((line = br.readline())!= null){ response += line + "\n"; JSONObject jsonresponse = new JSONObject(response); if("30000".equalsignorecase(jsonresponse.getstring("resultcode"))){ System.out.println(jsonResponse.getString(" 정상적으로처리되었습니다 ")); else{ System.out.println(jsonResponse.getString("ResultMessage")); 2.8.5 상태시그널표 상태 Signal 취소 / 거부사유필요여부 변경전상태 수신승인 APPROVE 수신미승인 수신거부 REJECT 필요 수신미승인 역발행요청취소 CANCELRREQUEST 필요 역발행요청 역발행요청거부 RIREJECT 필요 역발행요청 발행취소 CANCELALL 필요 수신미승인 발행예정승인 WAPPROVE 발행예정요청 발행예정거부 WREJECT 필요 발행예정요청 발행예정취소 WCANCELALL 필요 발행예정요청 22
2.9 메일재전송 메일을재전송한다. 요청시그널 / 서비스코드 / 시스템타입은고정값을사용한다. 2.9.1 Request 메시지ID MessageId String 트랜잭션식별자 요청시그널 Signal String(30) 고정값 : SENDMAIL 요청시간 RequestTime String(14) YYYYMMDDHH24MISS 송신사업자번호 SendComRegno String (13) 공급자사업자번호 인증토큰 AuthToken String(40) 서비스코드 ServiceCode String(10) 고정값 : DTI 시스템타입 SystemType String(10) 고정값 : OAPI 참조번호 ConversationId String[] 스마트빌식별자 (35자리) 상태시그널 StatusSignal String 재전송할상태의시그널값 ( 하단의상태시그널참조 ) 이메일 Email String[] 재전송할이메일주소 ( 이메일주소가공백일경우, 최초요청시저장된수신메일로전송됨 ) 2.9.2 Request Sample String[] arrconvid = {"11111111192208758882201504011710003"; String[] arremail = {"test@test.com "; JSONObject jsonobj = new JSONObject(); jsonobj.put("messageid", "3267cab1-3ea6-4aa6-b988-7d27d6d5ac89"); jsonobj.put("signal", "SENDMAIL"); jsonobj.put("requesttime", "20150401105301"); jsonobj.put("sendcomregno", "1111111119"); jsonobj.put("authtoken", "dxvcce96zvlxvhbpeklgcithqlercmroyjheedfxyi8rvxjmvmzpqk1ltt0k"); jsonobj.put("servicecode", "DTI"); jsonobj.put("systemtype", "OAPI"); jsonobj.put("conversationid", arrconvid); jsonobj.put("statussignal", "ARISSUE"); jsonobj.put("email", arremail); URL url = new URL("http://demoapi.smartbill.co.kr/sb-api/request/"); HttpURLConnection conn = (HttpURLConnection) url.openconnection(); conn.setrequestmethod("post"); conn.setusecaches(false); conn.setdoinput(true); conn.setdooutput(true); conn.setconnecttimeout(10000); conn.setrequestproperty("content-type", "application/json"); conn.setrequestproperty("accept", "application/json"); DataOutputStream os = new DataOutputStream(conn.getOutputStream()); os.write(jsonobj.tostring().getbytes()); os.flush(); os.close(); 23
2.9.3 Response 메시지ID MessageId String 요청한트랜잭션식별자 요청시그널 Signal String(30) 고정값 : SENDMAIL 참조번호 ConversationId String(35) 요청한스마트빌식별자 응답시간 ResponseTime String(14) YYYYMMDDHH24MISS 처리코드 ResultCode String(5) 처리결과코드 처리메시지 ResultMessage String(2000) 처리결과상세내역 2.9.4 Response Sample BufferedReader br; String response = ""; if(null!= conn){ br = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line = null; while((line = br.readline())!= null){ response += line + "\n"; JSONObject jsonresponse = new JSONObject(response); if("30000".equalsignorecase(jsonresponse.getstring("resultcode"))){ System.out.println(jsonResponse.getString(" 정상적으로처리되었습니다 ")); else{ System.out.println(jsonResponse.getString("ResultMessage")); 2.9.5 상태시그널표 상태정발행역발행요청역발행 Signal ARISSUE RARREQUEST RARISSUE 24
2.10 국세청전송요청 세금계산서를즉시국세청에전송하도록요청한다. 요청시그널 / 서비스코드 / 시스템타입은고정값을사용한다. 2.10.1 Request 메시지ID MessageId String 트랜잭션식별자 요청시그널 Signal String(30) 고정값 : NTS_REQUEST 요청시간 RequestTime String(14) YYYYMMDDHH24MISS 송신사업자번호 SendComRegno String (13) 공급자사업자번호 인증토큰 AuthToken String(40) 서비스코드 ServiceCode String(10) 고정값 : DTI 시스템타입 SystemType String(10) 고정값 : OAPI 참조번호 ConversationId String[] 스마트빌식별자 (35자리, 다중건가능 ) 2.10.2 Request Sample String[] arrconvid = {"11111111192208758882201504011710003", "11111111192208758882201504011710013"; JSONObject jsonobj = new JSONObject(); jsonobj.put("messageid", "3267cab1-3ea6-4aa6-b988-7d27d6d5ac89"); jsonobj.put("signal", "NTS_REQUEST"); jsonobj.put("requesttime", "20150401105301"); jsonobj.put("sendcomregno", "1111111119"); jsonobj.put("authtoken", "dxvcce96zvlxvhbpeklgcithqlercmroyjheedfxyi8rvxjmvmzpqk1ltt0k"); jsonobj.put("servicecode", "DTI"); jsonobj.put("systemtype", "OAPI"); jsonobj.put("conversationid", arrconvid); URL url = new URL("http://demoapi.smartbill.co.kr/sb-api/request/"); HttpURLConnection conn = (HttpURLConnection) url.openconnection(); conn.setrequestmethod("post"); conn.setusecaches(false); conn.setdoinput(true); conn.setdooutput(true); conn.setconnecttimeout(10000); conn.setrequestproperty("content-type", "application/json"); conn.setrequestproperty("accept", "application/json"); DataOutputStream os = new DataOutputStream(conn.getOutputStream()); os.write(jsonobj.tostring().getbytes()); os.flush(); os.close(); 25
2.10.3 Response 메시지ID MessageId String 요청한트랜잭션식별자 요청시그널 Signal String(30) 고정값 : NTS_REQUEST 참조번호 ConversationId String(35) 요청한스마트빌식별자 응답시간 ResponseTime String(14) YYYYMMDDHH24MISS 처리코드 ResultCode String(5) 처리결과코드 처리메시지 ResultMessage String(2000) 처리결과상세내역 2.10.4 Response Sample BufferedReader br; String response = ""; if(null!= conn){ br = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line = null; while((line = br.readline())!= null){ response += line + "\n"; JSONObject jsonresponse = new JSONObject(response); if("30000".equalsignorecase(jsonresponse.getstring("resultcode"))){ System.out.println(jsonResponse.getString(" 정상적으로처리되었습니다 ")); else{ System.out.println(jsonResponse.getString("ResultMessage")); 26
2.11 세금계산서상태조회 세금계산서의상태조회를요청한다. 요청시그널 / 서비스코드는고정값을사용한다. 성능이슈와네트워크트래픽관리목적상, 동일한검색조건의함수호출을 1 회 / 1 분으로제한합니다. 2.11.1 Request 메시지ID MessageId String 트랜잭션식별자 요청시그널 Signal String(30) 고정값 : DTI_STATUS_LIST 요청시간 RequestTime String(14) YYYYMMDDHH24MISS 송신사업자번호 SendComRegno String (13) 송신자사업자번호 인증토큰 AuthToken String(40) 서비스코드 ServiceCode String(10) 고정값 : DTI 검색시작일자 SearchFromDate String(10) YYYY-MM-DD 검색종료일자 SearchToDate String(10) YYYY-MM-DD( 최대 1주일간의데이터조회가능 ) 검색사업자번호 SearchComRegno String(13) 검색할사업자번호입력매출건조회일경우매입자의사업자번호매입건조회일경우매출자의사업자번호 매출매입구분 RepoTypeCode String(2) 매출 (AR) 매입 (AP) 선택입력 2.11.2 Request Sample JSONObject jsonobj = new JSONObject(); jsonobj.put("messageid", "3267cab1-3ea6-4aa6-b988-7d27d6d5ac89"); jsonobj.put("signal", "DTI_STATUS_LIST"); jsonobj.put("requesttime", "20150401105301"); jsonobj.put("sendcomregno", "1111111119"); jsonobj.put("authtoken", "dxvcce96zvlxvhbpeklgcithqlercmroyjheedfxyi8rvxjmvmzpqk1ltt0k"); jsonobj.put("servicecode", "DTI"); jsonobj.put("searchfromdate", "2015-04-01"); jsonobj.put("searchtodate", "2015-04-07"); jsonobj.put("searchcomregno", "2208758882"); jsonobj.put("repotypecode", "AR"); URL url = new URL("http://demoapi.smartbill.co.kr/sb-api/request/"); HttpURLConnection conn = (HttpURLConnection) url.openconnection(); conn.setrequestmethod("post"); conn.setusecaches(false); conn.setdoinput(true); conn.setdooutput(true); conn.setconnecttimeout(10000); conn.setrequestproperty("content-type", "application/json"); conn.setrequestproperty("accept", "application/json"); DataOutputStream os = new DataOutputStream(conn.getOutputStream()); os.write(jsonobj.tostring().getbytes()); os.flush(); os.close(); 27
2.11.3 Response 메시지ID MessageId String 요청한트랜잭션식별자 요청시그널 Signal String(30) 고정값 : DTI_STATUS_LIST 응답시간 ResponseTime String(14) YYYYMMDDHH24MISS 처리코드 ResultCode String(5) 처리결과코드 처리메시지 ResultMessage String(2000) 처리결과상세내역 처리결과 ResultDataSet DataSet 2.11.4 Response Sample BufferedReader br; String response = ""; if(null!= conn){ br = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line = null; while((line = br.readline())!= null){ response += line + "\n"; JSONObject jsonresponse = new JSONObject(response); if("30000".equalsignorecase(jsonresponse.getstring("resultcode"))){ JSONObject jsonresultdataset = (JSONObject) jsonresponse.get("resultdataset"); JSONArray jsonarray = (JSONArray) jsonresultdataset.get("table"); int totalcount = jsonarray.length(); if (0 < totalcount) { for (int i = 0; i < totalcount; i++) { JSONObject jsontable = (JSONObject) jsonarray.get(i); System.out.println(jsonTable.get("ETC_PCS_NO").toString()); // 세금계산서참조번호 System.out.println(jsonTable.get("DTI_STATUS").toString()); // 세금계산서상태값 System.out.println(jsonTable.get("NTS_RESULT_CODE").toString()); // 세금계산서국세청전송결과 System.out.println(jsonTable.get("NTS_SEND_STATUS").toString()); // 세금계산서국세청전송상태 System.out.println(jsonTable.get("NTS_SEND_DATE").toString()); // 세금계산서국세청전송일자 System.out.println(jsonTable.get("SUP_EMAIL ").tostring()); // 담당자이메일 ( 매출조회일경우 ) System.out.println(jsonTable.get("BYR_EMAIL ").tostring()); // 담당자이메일 ( 매입조회일경우 ) else { System.out.println(" 데이터가존재하지않습니다."); else{ System.out.println(jsonResponse.getString("ResultMessage")); 28
2.12 부가정보조회 스마트빌을사용하기위한부가정보를조회한다. 요청시그널 / 서비스코드는고정값을사용한다. 2.12.1 Request 메시지ID MessageId String 트랜잭션식별자 요청시그널 Signal String(30) 고정값 : ADD_INFO 요청시간 RequestTime String(14) YYYYMMDDHH24MISS 송신사업자번호 SendComRegno String (13) 송신사업자번호 인증토큰 AuthToken String(40) 서비스코드 ServiceCode String(10) 고정값 : DTI 검색사업자번호 SearchComRegno String(10) 검색할사업자번호입력 담당자이메일 Email String[] 담당자이메일입력 조회타입코드 SearchTypeCode String 하단의조회타입코드참조 2.12.2 Request Sample String[] arremail = {"test@test.com "; JSONObject jsonobj = new JSONObject(); jsonobj.put("messageid", "3267cab1-3ea6-4aa6-b988-7d27d6d5ac89"); jsonobj.put("signal", "ADD_INFO"); jsonobj.put("requesttime", "20150401105301"); jsonobj.put("sendcomregno", "1111111119"); jsonobj.put("authtoken", "dxvcce96zvlxvhbpeklgcithqlercmroyjheedfxyi8rvxjmvmzpqk1ltt0k"); jsonobj.put("servicecode", "DTI"); jsonobj.put("searchcomregno", "2208758882"); jsonobj.put("email", arremail); jsonobj.put("searchtypecode", "NOTICE"); URL url = new URL("http://demoapi.smartbill.co.kr/sb-api/request/"); HttpURLConnection conn = (HttpURLConnection) url.openconnection(); conn.setrequestmethod("post"); conn.setusecaches(false); conn.setdoinput(true); conn.setdooutput(true); conn.setconnecttimeout(10000); conn.setrequestproperty("content-type", "application/json"); conn.setrequestproperty("accept", "application/json"); DataOutputStream os = new DataOutputStream(conn.getOutputStream()); os.write(jsonobj.tostring().getbytes()); os.flush(); 29
2.12.3 조회타입코드 조회타입코드 조회타입종류 사용예 필수입력파라미터 NOTICE 공지사항 스마트빌사이트에서공지된사항을알고자할때 BIZPLACE 종사업장코드 거래처의종사업장코드를알고자할때 검색사업자번호 (SearchComRegno) AUTH 담당자권한 거래처의담당자의스마트빌권한을알고자할때 검색사업자번호 (SearchComRegno) 담당자이메일 (Email) CLOSE 휴폐업여부 거래처의휴폐업여부를알고자할때 검색사업자번호 (SearchComRegno) COMPANY 회사정보조회 거래처의사업장정보를알고자할때 검색사업자번호 (SearchComRegno) 2.12.4 Response 메시지ID MessageId String 요청한트랜잭션식별자 요청시그널 Signal String(30) 고정값 : ADD_INFO 응답시간 ResponseTime String(14) YYYYMMDDHH24MISS 처리코드 ResultCode String(5) 처리결과코드 처리메시지 ResultMessage String(2000) 처리결과상세내역 처리결과 ResultDataSet DataSet 2.12.5 Response Sample 30
BufferedReader br; String response = ""; if(null!= conn){ br = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line = null; while((line = br.readline())!= null){ response += line + "\n"; JSONObject jsonresponse = new JSONObject(response); if("30000".equalsignorecase(jsonresponse.getstring("resultcode"))){ JSONObject jsonresultdataset = (JSONObject) jsonresponse.get("resultdataset"); JSONArray jsonarray = (JSONArray) jsonresultdataset.get("table"); String strsearchtypecode = jsonobj.get("searchtypecode").tostring(); int totalcount = jsonarray.length(); if (0 < totalcount) { if ("NOTICE" == strsearchtypecode) { // 공지사항 for (int i = 0; i < totalcount; i++) { JSONObject jsontable = (JSONObject) jsonarray.get(i); System.out.println(jsonTable.get("CDATE").toString()); // 공지사항등록일 System.out.println(jsonTable.get("NOTICE_CONTENTS").toString()); // 공지사항내용 System.out.println(jsonTable.get("NOTICE_NO").toString()); // 공지사항번호 System.out.println(jsonTable.get("NOTICE_TITLE").toString()); // 공지사항제목 else if ("BIZPLACE" == strsearchtypecode) { // 종사업장코드 for (int i = 0; i < totalcount; i++) { JSONObject jsontable = (JSONObject) jsonarray.get(i); System.out.println(jsonTable.get("BIZPLACE_ADDRESS").toString()); // 종사업장주소 System.out.println(jsonTable.get("BIZPLACE_CODE").toString()); // 종사업장코드 System.out.println(jsonTable.get("BIZPLACE_NAME").toString()); // 종사업장명 else if ("AUTH" == strsearchtypecode) { // 담당자권한 for (int i = 0; i < totalcount; i++) { JSONObject jsontable = (JSONObject) jsonarray.get(i); System.out.println(jsonTable.get("ISSUE_YN").toString()); // 세금계산서발행권한 System.out.println(jsonTable.get("RCV_YN").toString()); // 세금계산서수신권한 System.out.println(jsonTable.get("REQUEST_YN").toString()); // 세금계산서역발행요청권한 else if ("CLOSE" == strsearchtypecode) { // 휴폐업여부 for (int i = 0; i < totalcount; i++) { JSONObject jsontable = (JSONObject) jsonarray.get(i); System.out.println(jsonTable.get("TYPE_CODE").toString()); // 휴폐업코드 System.out.println(jsonTable.get("TYPE_DESC").toString()); // 휴폐업코드상세 else if ("COMPANY" == strsearchtypecode) { // 회사정보조회 for (int i = 0; i < totalcount; i++) { JSONObject jsontable = (JSONObject) jsonarray.get(i); System.out.println(jsonTable.get("COM_ADDRESS").toString()); // 주송 System.out.println(jsonTable.get("COM_NAME").toString()); // 회사명 System.out.println(jsonTable.get("COM_BIZSTATUS").toString()); // 업태 System.out.println(jsonTable.get("COM_BIZCLASS").toString()); // 업종 System.out.println(jsonTable.get("COM_PRESIDENT").toString()); // 대표자명 else { System.out.println(" 데이터가존재하지않습니다."); else{system.out.println(jsonresponse.getstring("resultmessage")); 31
2.13 메일수신결과조회 세금계산서와관련하여발송된메일의담당자수신여부를조회한다. 요청시그널 / 서비스코드는고정값을사용한다. 2.13.1 Request 메시지ID MessageId String 트랜잭션식별자 요청시그널 Signal String(30) 고정값 : MAIL_RESULT 요청시간 RequestTime String(14) YYYYMMDDHH24MISS 송신사업자번호 SendComRegno String (13) 송신사업자번호 인증토큰 AuthToken String(40) 서비스코드 ServiceCode String(10) 고정값 : DTI 참조번호 ConversationId String[] 스마트빌식별자 (35자리) 2.13.2 Request Sample String[] arrconvid = {"11111111192208758882201504011710003"; JSONObject jsonobj = new JSONObject(); jsonobj.put("messageid", "3267cab1-3ea6-4aa6-b988-7d27d6d5ac89"); jsonobj.put("signal", "MAIL_RESULT"); jsonobj.put("requesttime", "20150401105301"); jsonobj.put("sendcomregno", "1111111119"); jsonobj.put("authtoken", "dxvcce96zvlxvhbpeklgcithqlercmroyjheedfxyi8rvxjmvmzpqk1ltt0k"); jsonobj.put("servicecode", "DTI"); jsonobj.put("conversationid", arrconvid); URL url = new URL("http://demoapi.smartbill.co.kr/sb-api/request/"); HttpURLConnection conn = (HttpURLConnection) url.openconnection(); conn.setrequestmethod("post"); conn.setusecaches(false); conn.setdoinput(true); conn.setdooutput(true); conn.setconnecttimeout(10000); conn.setrequestproperty("content-type", "application/json"); conn.setrequestproperty("accept", "application/json"); DataOutputStream os = new DataOutputStream(conn.getOutputStream()); os.write(jsonobj.tostring().getbytes()); os.flush(); os.close(); 32
2.13.3 Response 메시지ID MessageId String 요청한트랜잭션식별자 요청시그널 Signal String(30) 고정값 : MAIL_RESULT 응답시간 ResponseTime String(14) YYYYMMDDHH24MISS 처리코드 ResultCode String(5) 처리결과코드 처리메시지 ResultMessage String(2000) 처리결과상세내역 처리결과 ResultDataSet DataSet 2.13.4 Response Sample BufferedReader br; String response = ""; if(null!= conn){ br = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line = null; while((line = br.readline())!= null){ response += line + "\n"; JSONObject jsonresponse = new JSONObject(response); if("30000".equalsignorecase(jsonresponse.getstring("resultcode"))){ JSONObject jsonresultdataset = (JSONObject) jsonresponse.get("resultdataset"); JSONArray jsonarray = (JSONArray) jsonresultdataset.get("table"); int totalcount = jsonarray.length(); if (0 < totalcount) { for (int i = 0; i < totalcount; i++) { JSONObject jsontable = (JSONObject) jsonarray.get(i); System.out.println(jsonTable.get("OPEN_DATE").toString()); // 메일열람일자 System.out.println(jsonTable.get("OPEN_YN").toString()); // 메일열람여부 System.out.println(jsonTable.get("SUCCESS_YN").toString()); // 메일전송여부 else { System.out.println(" 데이터가존재하지않습니다."); else{ System.out.println(jsonResponse.getString("ResultMessage")); 33
2.14 미리보기양식조회 세금계산서를보이기위한 UI 템플릿을요청한다. 요청시그널 / 서비스코드는고정값을사용한다. 2.14.1 Request 메시지ID MessageId String 트랜잭션식별자 요청시그널 Signal String(30) 고정값 : PREVIEW_FORM 요청시간 RequestTime String(14) YYYYMMDDHH24MISS 송신사업자번호 SendComRegno String (13) 송신사업자번호 인증토큰 AuthToken String(40) 서비스코드 ServiceCode String(10) 고정값 : DTI 2.14.2 Request Sample JSONObject jsonobj = new JSONObject(); jsonobj.put("messageid", "3267cab1-3ea6-4aa6-b988-7d27d6d5ac89"); jsonobj.put("signal", "PREVIEW_FORM"); jsonobj.put("requesttime", "20150401105301"); jsonobj.put("sendcomregno", "1111111119"); jsonobj.put("authtoken", "dxvcce96zvlxvhbpeklgcithqlercmroyjheedfxyi8rvxjmvmzpqk1ltt0k"); jsonobj.put("servicecode", "DTI"); URL url = new URL("http://demoapi.smartbill.co.kr/sb-api/request/"); HttpURLConnection conn = (HttpURLConnection) url.openconnection(); conn.setrequestmethod("post"); conn.setusecaches(false); conn.setdoinput(true); conn.setdooutput(true); conn.setconnecttimeout(10000); conn.setrequestproperty("content-type", "application/json"); conn.setrequestproperty("accept", "application/json"); DataOutputStream os = new DataOutputStream(conn.getOutputStream()); os.write(jsonobj.tostring().getbytes()); os.flush(); os.close(); 34
2.14.3 Response 메시지ID MessageId String 요청한트랜잭션식별자 요청시그널 Signal String(30) 고정값 : PREVIEW_FORM 응답시간 ResponseTime String(14) YYYYMMDDHH24MISS 처리코드 ResultCode String(5) 처리결과코드 처리메시지 ResultMessage String(2000) 처리결과상세내역 처리결과 ResultDataSet DataSet 2.14.4 Response Sample BufferedReader br; String response = ""; if(null!= conn){ br = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line = null; while((line = br.readline())!= null){ response += line + "\n"; JSONObject jsonresponse = new JSONObject(response); if("30000".equalsignorecase(jsonresponse.getstring("resultcode"))){ JSONObject jsonresultdataset = (JSONObject) jsonresponse.get("resultdataset"); JSONArray jsonarray = (JSONArray) jsonresultdataset.get("table1"); int totalcount = jsonarray.length(); if (0 < totalcount) { JSONObject jsontable1 = (JSONObject) jsonarray.get(0); // 공급받는자용매입세금계산서 System.out.println(jsonTable1.get("CONTENT").toString()); JSONObject jsontable2 = (JSONObject) jsonarray.get(1); // 공급받는자용매입계산서 System.out.println(jsonTable2.get("CONTENT").toString()); JSONObject jsontable3 = (JSONObject) jsonarray.get(2); // 공급받는자용위수탁매입세금계산서 System.out.println(jsonTable3.get("CONTENT").toString()); JSONObject jsontable4 = (JSONObject) jsonarray.get(3); // 공급받는자용위수탁매입계산서 System.out.println(jsonTable4.get("CONTENT").toString()); JSONObject jsontable5 = (JSONObject) jsonarray.get(4); // 공급자용매출세금계산서 System.out.println(jsonTable5.get("CONTENT").toString()); JSONObject jsontable6 = (JSONObject) jsonarray.get(5); // 공급자용매출계산서 System.out.println(jsonTable6.get("CONTENT").toString()); JSONObject jsontable7 = (JSONObject) jsonarray.get(6); // 공급자용위수탁매출세금계산서 System.out.println(jsonTable7.get("CONTENT").toString()); JSONObject jsontable8 = (JSONObject) jsonarray.get(7); // 공급자용위수탁매출계산서 System.out.println(jsonTable8.get("CONTENT").toString()); JSONObject jsontable9 = (JSONObject) jsonarray.get(8); // 거래명세서 ( 과세 ) System.out.println(jsonTable8.get("CONTENT").toString()); JSONObject jsontable10 = (JSONObject) jsonarray.get(9); // 거래명세서 ( 면세 ) System.out.println(jsonTable8.get("CONTENT").toString()); JSONObject jsontable11 = (JSONObject) jsonarray.get(10); // 위수탁거래명세서 ( 과세 ) System.out.println(jsonTable8.get("CONTENT").toString()); JSONObject jsontable12 = (JSONObject) jsonarray.get(11); // 위수탁거래명세서 ( 면세 ) System.out.println(jsonTable8.get("CONTENT").toString()); else { System.out.println(" 데이터가존재하지않습니다."); else{ System.out.println(jsonResponse.getString("ResultMessage")); 35
2.15 보관함조회 보관함조회를요청한다. 요청시그널 / 서비스코드는고정값을사용한다. 성능이슈와네트워크트래픽관리목적상, 동일한검색조건의함수호출을 1 회 / 1 분으로제한합니다. 2.15.1 Request 메시지ID MessageId String 트랜잭션식별자 요청시그널 Signal String(30) 고정값 : ARAP_REPO 요청시간 RequestTime String(14) YYYYMMDDHH24MISS 송신사업자번호 SendComRegno String (13) 송신사업자번호 인증토큰 AuthToken String(40) 서비스코드 ServiceCode String(10) 고정값 : DTI 검색시작일자 SearchFromDate String(10) YYYY-MM-DD 검색종료일자 SearchToDate String(10) YYYY-MM-DD( 최대 1개월간의데이터조회가능 ) 검색사업자번호 SearchComRegno String(13) 검색할사업자번호입력 ( 매출보관함일경우검색할매입자의사업자번호, 매입보관함일경우검색할매출자의사업자번호 보관함종류코드 RepoTypeCode String 매출 (AR), 매입 (AP) 를선택해서입력 2.15.2 Request Sample JSONObject jsonobj = new JSONObject(); jsonobj.put("messageid", "3267cab1-3ea6-4aa6-b988-7d27d6d5ac89"); jsonobj.put("signal", "ARAP_REPO"); jsonobj.put("requesttime", "20150401105301"); jsonobj.put("sendcomregno", "1111111119"); jsonobj.put("authtoken", "dxvcce96zvlxvhbpeklgcithqlercmroyjheedfxyi8rvxjmvmzpqk1ltt0k"); jsonobj.put("servicecode", "DTI"); jsonobj.put("searchfromdate", "2015-04-01"); jsonobj.put("searchtodate", "2015-04-07"); jsonobj.put("searchcomregno", "2208758882"); jsonobj.put("repotypecode", "AR"); URL url = new URL("http://demoapi.smartbill.co.kr/sb-api/request/"); HttpURLConnection conn = (HttpURLConnection) url.openconnection(); conn.setrequestmethod("post"); conn.setusecaches(false); conn.setdoinput(true); conn.setdooutput(true); conn.setconnecttimeout(10000); conn.setrequestproperty("content-type", "application/json"); conn.setrequestproperty("accept", "application/json"); DataOutputStream os = new DataOutputStream(conn.getOutputStream()); os.write(jsonobj.tostring().getbytes()); os.flush(); os.close(); 36
2.15.3 Response 메시지 ID MessageId String 요청한트랜잭션식별자 요청시그널 Signal String(30) 고정값 : ARAP_REPO 응답시간 ResponseTime String(14) YYYYMMDDHH24MISS 처리코드 ResultCode String(5) 처리결과코드 처리메시지 ResultMessage String(2000) 처리결과상세내역 처리결과 ResultDataSet DataSet 2.15.4 Response Sample BufferedReader br; String response = ""; if(null!= conn){ br = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line = null; while((line = br.readline())!= null){ response += line + "\n"; JSONObject jsonresponse = new JSONObject(response); if("30000".equalsignorecase(jsonresponse.getstring("resultcode"))){ JSONObject jsonresultdataset = (JSONObject) jsonresponse.get("resultdataset"); JSONArray jsonarray = (JSONArray) jsonresultdataset.get("table"); String strrepotypecode = jsonobj.get("repotypecode").tostring(); int totalcount = jsonarray.length(); if (0 < totalcount) { if ("AR" == strrepotypecode) { // 매출보관함 for (int i = 0; i < totalcount; i++) { JSONObject jsontable = (JSONObject) jsonarray.get(i); System.out.println(jsonTable.get("BYR_COM_NAME").toString()); // 공급받는자회사명 System.out.println(jsonTable.get("BYR_COM_REGNO").toString()); // 공급받는자사업자번호 System.out.println(jsonTable.get("DIRECTION").toString()); // 세금계산서정 / 역구분 System.out.println(jsonTable.get("DTI_STATUS").toString()); // 세금계산서상태 System.out.println(jsonTable.get("DTI_TYPE").toString()); // 세금계산서종류 System.out.println(jsonTable.get("DTI_WDAY").toString()); // 세금계산서작성일자 System.out.println(jsonTable.get("ETC_PCS_NO").toString()); // 세금계산서참조번호 System.out.println(jsonTable.get("ISSUE_ID").toString()); // 세금계산서승인번호 System.out.println(jsonTable.get("NTS_SEND_STATUS").toString()); // 세금계산서국세청전송상태 System.out.println(jsonTable.get("SUP_AMT").toString()); // 세금계산서공급가액 System.out.println(jsonTable.get("SUP_EMAIL").toString()); // 담당자이메일 else if ("AP" == strrepotypecode) { // 매입보관함 for (int i = 0; i < totalcount; i++) { JSONObject jsontable = (JSONObject) jsonarray.get(i); System.out.println(jsonTable.get("DIRECTION").toString()); // 세금계산서정 / 역구분 System.out.println(jsonTable.get("DTI_STATUS").toString()); // 세금계산서상태 System.out.println(jsonTable.get("DTI_TYPE").toString()); // 세금계산서종류 System.out.println(jsonTable.get("DTI_WDAY").toString()); // 세금계산서작성일자 System.out.println(jsonTable.get("ETC_PCS_NO").toString()); // 세금계산서참조번호 System.out.println(jsonTable.get("ISSUE_ID").toString()); // 세금계산서승인번호 System.out.println(jsonTable.get("NTS_SEND_STATUS").toString()); // 세금계산서국세청전송상태 System.out.println(jsonTable.get("SUP_AMT").toString()); // 세금계산서공급가액 System.out.println(jsonTable.get("SUP_COM_NAME").toString()); // 공급자회사명 System.out.println(jsonTable.get("SUP_COM_REGNO").toString()); // 공급자사업자번호 System.out.println(jsonTable.get("BYR_EMAIL").toString()); // 담당자이메일 37
2.16 미처리함조회 미처리함내역을요청한다. 요청시그널 / 서비스코드는고정값을사용한다. 성능이슈와네트워크트래픽관리목적상, 동일한검색조건의함수호출을 1 회 / 1 분으로제한합니다. 2.16.1 Request 메시지ID MessageId String 트랜잭션식별자 요청시그널 Signal String(30) 고정값 : MY_LIST 요청시간 RequestTime String(14) YYYYMMDDHH24MISS 송신사업자번호 SendComRegno String (13) 송신사업자번호 인증토큰 AuthToken String(40) 서비스코드 ServiceCode String(10) 고정값 : DTI 검색시작일자 SearchFromDate String(10) YYYY-MM-DD 검색종료일자 SearchToDate String(10) YYYY-MM-DD( 최대 1주일간의데이터조회가능 ) 미처리함종류코드 ListTypeCode String 회사미처리함 (C), 거래처미처리함 (T) 를선택해서입력 2.16.2 Request Sample JSONObject jsonobj = new JSONObject(); jsonobj.put("messageid", "3267cab1-3ea6-4aa6-b988-7d27d6d5ac89"); jsonobj.put("signal", "MY_LIST"); jsonobj.put("requesttime", "20150401105301"); jsonobj.put("sendcomregno", "1111111119"); jsonobj.put("authtoken", "dxvcce96zvlxvhbpeklgcithqlercmroyjheedfxyi8rvxjmvmzpqk1ltt0k"); jsonobj.put("servicecode", "DTI"); jsonobj.put("searchfromdate", "2015-04-01"); jsonobj.put("searchtodate", "2015-04-07"); jsonobj.put("listtypecode", "C"); URL url = new URL("http://demoapi.smartbill.co.kr/sb-api/request/"); HttpURLConnection conn = (HttpURLConnection) url.openconnection(); conn.setrequestmethod("post"); conn.setusecaches(false); conn.setdoinput(true); conn.setdooutput(true); conn.setconnecttimeout(10000); conn.setrequestproperty("content-type", "application/json"); conn.setrequestproperty("accept", "application/json"); DataOutputStream os = new DataOutputStream(conn.getOutputStream()); os.write(jsonobj.tostring().getbytes()); os.flush(); os.close(); 38
2.16.3 Response 메시지ID MessageId String 요청한트랜잭션식별자 요청시그널 Signal String(30) 고정값 : MY_LIST 응답시간 ResponseTime String(14) YYYYMMDDHH24MISS 처리코드 ResultCode String(5) 처리결과코드 처리메시지 ResultMessage String(2000) 처리결과상세내역 처리결과 ResultDataSet DataSet 2.16.4 Response Sample BufferedReader br; String response = ""; if(null!= conn){ br = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line = null; while((line = br.readline())!= null){ response += line + "\n"; JSONObject jsonresponse = new JSONObject(response); if("30000".equalsignorecase(jsonresponse.getstring("resultcode"))){ JSONObject jsonresultdataset = (JSONObject) jsonresponse.get("resultdataset"); JSONArray jsonarray = (JSONArray) jsonresultdataset.get("table"); String strlisttypecode = jsonobj.get("listtypecode").tostring(); int totalcount = jsonarray.length(); if (0 < totalcount) { if ("C" == strlisttypecode) { // 회사미처리함 for (int i = 0; i < totalcount; i++) { JSONObject jsontable = (JSONObject) jsonarray.get(i); System.out.println(jsonTable.get("AMEND_CODE").toString()); // 수정코드 System.out.println(jsonTable.get("AMEND_DTI_YN").toString()); // 수정세금계산서여부 System.out.println(jsonTable.get("BRK_COM_NAME").toString()); // 수탁자회사명 System.out.println(jsonTable.get("BRK_COM_REGNO").toString()); // 수탁자사업자번호 System.out.println(jsonTable.get("BRK_DTI_YN").toString()); // 위수탁세금계산서여부 System.out.println(jsonTable.get("BYR_COM_NAME").toString()); // 공급받는자회사명 System.out.println(jsonTable.get("BYR_COM_REGNO").toString()); // 공급받는자사업자번호 System.out.println(jsonTable.get("BYR_TYPE").toString()); // 공급받는자타입 ( 개인 / 회사 ) System.out.println(jsonTable.get("CUSTOMER_COM_NAME").toString()); // 거래처회사명 System.out.println(jsonTable.get("CUSTOMER_COM_REGNO").toString());// 거래처사업자번호 System.out.println(jsonTable.get("DIRECTION").toString()); // 세금계산서정 / 역구분 System.out.println(jsonTable.get("DTI_STATUS").toString()); // 세금계산서상태 System.out.println(jsonTable.get("DTI_TYPE").toString()); // 세금계산서종류 System.out.println(jsonTable.get("DTI_WDAY").toString()); // 세금계산서작성일자 System.out.println(jsonTable.get("DTT_LINK_TYPE").toString()); // 거래명세서첨부여부 System.out.println(jsonTable.get("ETC_PCS_NO").toString()); // 세금계산서참조번호 System.out.println(jsonTable.get("IS_ARAP").toString()); // 매출매입구분 System.out.println(jsonTable.get("SEQ_NO").toString()); // System.out.println(jsonTable.get("SUP_AMT").toString()); // 세금계산서공급가액 System.out.println(jsonTable.get("SUP_COM_NAME").toString()); // 공급자회사명 System.out.println(jsonTable.get("SUP_COM_REGNO").toString()); // 공급자사업자번호 System.out.println(jsonTable.get("TAX_DEMAND").toString()); // 영수청구구분 System.out.println(jsonTable.get("EMAIL").toString()); // 담당자이메일 System.out.println(jsonTable.get("DATAXML").toString()); // 원본XML else if ("T" == strlisttypecode) { // 거래처미처리함 39