안녕하세요.
현금영수증 발급/취소 요청 모듈을 개발중입니다.
샘플로 받은 https://drive.google.com/drive/folders/1RCnS5IpI9Y87zZZouaMPPYTMlwOn6pYK 에 있는 XPayClient.jar 를 사용중인데, 혹시 맞는 버전인지요? NullPointerException 가 발생해서요.
79 Replies
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) :
- 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요.
* 주말/공휴일에는 답변이 늦을 수 있어요.
해당 문서 맞습니다.
어디서 NullPointerException 에러가 발생하는지 전체 에러 올려주세요.
아 맞는건가요? 초기화를 못시키는 오류같은데. 오류로는 그냥 NullPointerException 만 발생하고 있습니다.
java.lang.NullPointerException
at org.apache.jsp.common.exception_jsp._jspService(exception_jsp.java:196)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:438)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:421)
at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:342)
at org.apache.catalina.core.StandardHostValve.throwable(StandardHostValve.java:286)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
이런 오류입니다
그리고 인증서는 ssl 인증서 위치를 지정하는걸까요?
코드 중간중간에 try catch 로 exception 을 받아 봐야 할것 같습니다. 정확히 어떤라인에서 NullPointerException 이 나는지 확인가능하신가요/
인증서는 SSL 인증서 설정하시면 될텐데 test 시에는 mall.conf 쪽에 관련 값을 0으로 설정하셔도 될것 같습니다.
XPayClient xpay = new XPayClient();
이 부분에서 NullPointerException 이 발생합니다
그러면 xpayClient.jar 파일이 정상적으로 import 가 안된게 아닐까 싶은데요.
해당 파일을 tomcat classpath 에 추가 하셨나요?
네 추가는 되어 있습니다. 그런데 다시 점검 해 볼께요
java version "1.7.0_07"
저희 java version 이 이건데요..
java.lang.UnsupportedClassVersionError: lgdacom/XPayClient/XPayClient
이렇게 오류가 발생합니다.
java 버전이 안맞는걸까요?
내일 다른 서버에서 해보고 다시 문의드리겠습니다
아 그러네요. 1.7이면 버전이 안맞는게 맞습니다.
해당 class file 이 1.8 이상에서 동작합니다.
jdk 1.7 이면 아래 링크 라이브러리로 교체해주세요
https://drive.google.com/file/d/1H-bhx5JSBKyCofjBoCchxA84EKmg5PEM/view?usp=drive_link
Google Docs
XPayClient1031.jar
그리고 TLS 1.2 이상이 아니면 결제가 안될겁니다. 웹서버 및 was 설정에서 TLS1.2가 기본프로토콜로 설정되도록 해주셔야 합니다.
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.
cacerts 파일 위치를 제대로 등록하니, 전송이 정상적으로 전송되는것이 확인되었습니다.
근데, mall.conf에 보면 market 인증키가 있는데요. 이건 별도로 요청드려야 하는건지요?
머트키는 상점관리자 -> 개발자센터에서 확인 할 수 있습니다.
MID 마다 페어로 부여되어 있는 인증키 값 입니다.
현금영수증 발급용도(1:소득공제, 2:지출증빙)를 정확하게 넘겨주시기 바랍니다. 라고 응답이 오는데요
xpay.Set("LGD_CASHRECEIPTUSE", "1");
이렇게 설정해 주고 있는데, 왜 오류가 나는지요?
요청 특정할수 있는 정보 전달 부탁 드립니다.
mid, 요청 시간 등등
tncomsoft-0120250411110055cc440428d6746f78a11bc2e25cff9afff8a4396b
log 에 찍힌 문자열입니다
2025-04-11 11:00:55 [INFO ] [tncomsoft-0120250411110055cc440428d6746f78a11bc2e25cff9afff8a4396b] m_szResCode = XC01
2025-04-11 11:00:55 [INFO ] [tncomsoft-0120250411110055cc440428d6746f78a11bc2e25cff9afff8a4396b] m_szResMsg = 현금영수증 발급용도(1:소득공제, 2:지출증빙)를 정확하게 넘겨주시기 바랍니다.
네 확인후 회신드리겠습니다.
LGD_CASHRECEIPTUSE 값이 넘어오지 않았는데요.
xpay.Set("LGD_CASHRECEIPTUSE", "1");
이렇게 셋팅되어 있는데 왜 안넘어갈까요?
샘플코드로 실행중이신가요?
아 네. 의심가는 부분이 있어서 수정해 보고 다시 문의드리겠습니다
해당 부분은 코드 문제였구요...
또 다른 오류가 발생했는데요.. 2025-04-11 11:21:32 [INFO ] [tncomsoft-0120250411112132433cebf7e8fbc82728061095c5c2d76183b38fb9] m_szResCode = 1111
2025-04-11 11:21:32 [INFO ] [tncomsoft-0120250411112132433cebf7e8fbc82728061095c5c2d76183b38fb9] m_szResMsg = 사업자번호 변경 기능을 사용하려면 토스페이먼츠로 문의해주세요.
라는 오류가 발생합니다.
타사업자로 보내려고 하시는것일까요?
타사업자 현금영수증 발급 하시나요?
넵
해당 기능은 신청해야만 사용할 수 있습니다.
어떻게 신청하나요?
청약신청 쪽이라서 1544-7772로 연락하시거나 세일즈담당자가 있다면 해당 매니저에 요청하시면 됩니다.
토스페이먼츠 결제연동팀
지금 LGD_CUSTOM_BUSINESSNUM 이 필드로 다른 번호를 보내서 문제가 되는거지요?
네 맞습니다
넵 감사합니다
이거 처리 바로 가능한가요? 신청하면요?
그건 고객센터나 세일즈 담당자님께 여쭈어 보시겠어요?
타사업자 현금영수증 발급을 위해서 청약신청 을 위해 저희 내부 담당자가 위에 연락처로 전화를 드렸는데요
제대로 파악이 안되고 있는것 같습니다.
메일 답변 드렸는데,
테스트 환경에서 말고 라이브 환경에서 확인 해주세요.
아 네
그럼 이거 MID 만 전달하면 되는거지요?
ncomsoft 인것으로 확인 했고,
유선 문의 받으신 분 께서 이해하고 내부 프로세스 진행 중 입니다.
넵 감사합니다
지금 라이브로 해서 몇개 현금영수증 발급 요청을 했는데요
7건을 보냈는데 그중 1건만 제대로 되고, 나머지는 다음과 같은 오류가 발생했어요
2025-04-11 15:15:53 [DEBUG] [ncomsoft-01202504111515480e3c62ddc5574e93b1ca2fd80a95ca62cab1f4f6] LGD_RESPCODE = 1111
2025-04-11 15:15:53 [DEBUG] [ncomsoft-01202504111515480e3c62ddc5574e93b1ca2fd80a95ca62cab1f4f6] LGD_RESPMSG = 동일한 주문번호에 대한 현금영수증 승인요청 내역이 있습니다
그런데.. 토스 관리자의 요청 내역에 보면 해당 주문번호로 동일건이 없는데 왜 해당 오류가 날까요?
보내신 주문번호를 알려주세요.
NTW40461000009214
LGD_OID: [NTW40461000009215, NTW40461000009216, NTW40461000009213, NTW40461000009214]
이렇게 요청을 배열로 해주신게 맞나요/
아 그렇게 들어가나요?
저희가 이게 기존에 rserver 를 썻었는데요.. 배치로 여러개를 요청하거든요.
네 여러건이 들어오고 있습니다. 한건씩 보내주세요.
이번에 바꾸면서 XPayClient xpay = new XPayClient(); 를 초기에 한번 셋팅하고
aPI 는 여러건을 처리하지 않고 있습니다.
이후에 loop 을 돌면서 건건이 돌리는데요
그럼 loop 안에서 XPayClient xpay = new XPayClient(); 를 계속 초기화 해줘야하나요?
네 맞습니다.
저희가 말씀드린것처럼 배치로 돌아가던거라 연속적으로 수백건에서 수천건을 요청할수 있는데 괜찮은지요?
궁금한게 있는데요. 저희가 rserver 로 요청 보낸것중에 Xpayclient 버전에서 취소하려고 하니까
원거래가 없어서 취소를 할수 없음 라고 왔는데요 .
그런 경우 어떻게 해줘야 하나요 ?
그러면 차단되실거라서
중간 중간 딜레이를 주시는게 좋을 것 같습니다.
저희가 rserver 로 요청 보낸것중에 Xpayclient 버전에서 취소하려고 하니까
원거래가 없어서 취소를 할수 없음 라고 왔는데요 .
이것도 주문번호나 TID 알려주시기 바랍니다.
주문번호 체계가 바뀌어서 승인번호로 알려드릴께요.
155001738 / 155014222
이렇게 두건입니다
Xpayclient 에서 취소 요청으로 보내신 LGD_TID, LGD_OID 값을 알려주세요.
NTW40461000009212 / NTW40461000009219
TID 값은 없습니다
근데, 이것이 문제가요.. 기존 rserver 요청했던것들 취소 요청이 종종 올텐데 그때마다 이렇게 연락드려야 하나요?
사용하시는 MID 가 ncomsoft 아닌가요?
맞습니다

기존엔 NTW4046 로 알고 있어요
그럼 발급된게 없는것 같은데요.
rserver 에서는 주문번호가 없었어요
NTW4046 는 저희 MID 에는 없습니다.
rserver 에서 봐야 할텐데요
NTW40461000009212 는 언제 발급하신건가요?
그건 이번에 Xpayclient 로 바꾸면서 신규로 만든거여요
저희가 rserver 로 요청 보낸것중에 Xpayclient 버전에서 취소하려고 하니까
원거래가 없어서 취소를 할수 없음 라고 왔는데요 .
라고 하셨는데요.
네 맞아요. rserver 로 보낸거는 OID 개념이 없었잖아요?
저희가 LGU+ 인수할때 RSERVER 는 fade out 된것으로 이관받아서 정보가 부족한데요.
rserver 에서는 어떤 정보를 넣어서 현금영수증을 발급하셨나요?
그럼 rserver 에서 발급받은 현금영수증 취소는 어떻게 해야할까요?
여기 merchant_ID 에는 NTW4046 를 넣으셨던 거죠?
네 맞아요
저희가 기존에는 mercaht_ID 도 여러개입니다. 서비스별로 발급받아서요
rserver 발급건은 내부적으로 확인해 보고 공유 드리도록 하겠습니다.
현금영수증 정보를 찾아볼 수 있게 발급일자 정보라도 남겨주시면 확인하는데 도움이 될 것 같습니다.
rserver 에서 발급한 현금영수증은 상점관리자에서 확인은 가능 하신가요?
이 부분은 기존 rserer 로 다시 연동해서 처리하려고 하는데요...
문제는 차주 월요일부터 이와 같은 케이스 발생시 어떻게 해야 하나 해서 여쭤보는거거든요
rserver 는 더이상 사용 불가 해서요
rserver 통해서 발급한 건에대해서, 상점관리자 확인 되시면
그건 상점관리자에서 처리 하셔야 할것 같습니다.
2016년 서비스 종료 된다고 공지된 너무 오래된 제품이라,
이것까지 저희가 지원은 어려울것 같습니다.
혹시 지금 rserver 내렸나요? 이번주 일요일까지는 운영할거라고 들었는데.. 지금 구동이 안되서요
아직입니다.
RServer가 기동하지 못했습니다. java.lang.Exception: Configuration XML file /home/ncomsoft/rserver/conf/config.xml
Error in building: 연결이 거부됨
Exception in thread "main" java.lang.NullPointerException
at net.dacom.taxsave.deamon.Server.writeLog(Server.java:313)
at net.dacom.taxsave.deamon.Server.writeLog(Server.java:309)
at net.dacom.taxsave.tr.rserver.RServer.main(RServer.java:333)
라는 오류가 발생하는데요
저희 내부에서 관련 해서 작업한 것은 없습니다
@hey2023 님 저희 시스템 통해서 취소 가능한 방법을 찾고 있습니다만 시간이 좀 걸릴것 같습니다.
일단 국세청에서 직접 취소하는 방법이 있어서 안내드립니다.
국세청 홈택스에서 현금영수증 취소하는 방법 (사업자용)
- 홈택스 접속
- 국세청 홈택스 접속
- 공인인증서 또는 공동인증서로 로그인
- 현금영수증 메뉴로 이동
- 상단 메뉴에서 [현금영수증] 클릭
- 좌측 메뉴에서 [발급내역조회] 또는 [자진발급분 수정] 선택
- 취소할 영수증 선택
- 발급한 영수증 중 취소하려는 거래 내역 조회
- 해당 거래를 선택하여 [취소] 또는 [수정발급] 클릭
- 취소 사유 입력 및 처리
- 취소 사유 입력 후 확인
- 정상적으로 처리되면, 국세청에 해당 현금영수증이 취소됨