xpay 테스트 관련 문의
테스트 환경에서 테스트 중 결제를 했을때
// TX: lgdacom.conf에 설정된 URL로 소켓 통신하여 최종 인증요청, 결과값으로 true, false 리턴
xpay.TX() 이부분에서 에러가 나고 있습니다.
js는 <script language="javascript" src="https://xpay-sandbox.tosspayments.com/xpay/js/xpay_crossplatform.js" type="text/javascript"></script> 이걸로 사용중이고
lgdacom.conf 내 설정은 이렇습니다.
url = https://xpay-gateway.tosspayments.com/xpay/Gateway.do
test_url = https://xpay-gateway-sandbox.tosspayments.com/xpay/Gateway.do
콘솔창 에러메세지는 이렇습니다.
결제요청이 실패하였습니다. <br>TX 결제요청 Response_code = 20010<br>TX 결제요청 Response_msg = IO error; javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure<p>최종결제요청 결과 실패 DB처리하시기 바랍니다.<br>payres.do
결제요청에 실패했습니다.3 payres.do
jdk17버전입니다.
최근에 알려주신 모바일결제나,환불 기능은 적용하지 않았고 기존에서 잘되고있는 상태에서 테스트환경의 결제기능을 해보고 있는 중입니다.

35 Replies
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) :
- 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요.
* 주말/공휴일에는 답변이 늦을 수 있어요.
mall.conf 파일에 default_secure_protocols = 2048 을 추가해서 다시 확인부탁드립니다.
default_secure_protocols = 2048 설정해도 에러가 나면, 결제올린 MID 정보를 회신주시기 바랍니다.
일단 위 에러는 TLS1.2 가 미지원되서 발생하는 에러입니다.
default_secure_protocols = 2048 이 설정이 되어있어서
MID는 tgnewfc입니다.
참고로 XPayClient1031.jar를 XPayClient.jar로 이름 변경후 사용중입니다.
예 지금 테스트하는 서버 IP 가 211.x.x.23 , 24 번 서버가 아닌 다른 서버인가요?
위 두 서버는 운영쪽에서 변경된 라이브러리 + 도메인 TLS 1.2 로 잘 올라오고 있습니다.
지금 테스트 MID로 확인중이신듯 한데, 혹시 lgdacom.conf 의
test_url = https://xpay-gateway-sandbox.tosspayments.com/xpay/Gateway.do 로 되어 있나요?
음 완전 로컬호스트에서 테스트중입니다.
여기서는 안되고 운영에 테스트 샘플 jsp를 올려서 테스트해보는것 밖에는 없나요?

로컬이시군요..톰캣으로 테스트중인가요?
넵
jdk1.7이신거죠?
네~
일단 mall.conf 의 아래 설정값을 변경해서 테스트 해보시겠어요?
;verify_cert 1: 인증서 검증; 0: 인증서 검증하지 않음
verify_cert = 0
;verify_host 1: 인증서 내의 domain name 확인; 0: 확인하지 않음 (test 시만 사용)
verify_host = 0

설정되어있습니다.
여기가 1로 되어 있을경우, 운영이 아닌 테스트 (특히 로컬) 에서 handshake 에러가 발생할수 있습니다
네 여기도 정상이네요
톰캣 설정을 바꿔야 할것 같은데 잠시만요
로컬에 톰캣 설치 디렉토리를 보시면 bin/catalina.bat 가 있을겁니다
이걸 메모장이나 에디터로 여시면 아래와 같은 구문이 확인될건데요
rem Do this here so custom URL handles (specifically 'war:...') can be used in the security policy
set "JAVA_OPTS=%JAVA_OPTS% -Djava.protocol.handler.pkgs=org.apache.catalina.webresources"
rem Check for the deprecated LOGGING_CONFIG
네 파일찾아서 보고있습니다
여기를 이렇게 수정해보시겠어요?
rem Do this here so custom URL handles (specifically 'war:...') can be used in the security policy
set "JAVA_OPTS=%JAVA_OPTS% -Djava.protocol.handler.pkgs=org.apache.catalina.webresources"
set "JAVA_OPTS=%JAVA_OPTS% -Dhttps.protocols=TLSv1.2 -Djdk.tls.client.protocols=TLSv1.2"
rem Check for the deprecated LOGGING_CONFIG
세번째 줄 추가입니다. 이렇게 수정후 톰캣 재시작한 다음에 다시 확인해보시기 바랍니다. 만일 톰캣재기동이 안되거나 에러가나면, 수정한것을 원상복구해주시고
rem Do this here나 catalina.webresources 로 서치해봤는데 TLSv1.2 이부분이 없는것같습니다

네 위 구문을 추가해야 jdk1.7 에서 TLS 1.2 통신이 될겁니다
저게 안되면
System.setProperty("https.protocols","TLSv1,TLSv1.1,TLSv1.2");
이걸 결제요청페이지에 적용해보시겠어요?
네
해보고 안되서 되돌렸고 저 .setproperty 문구보고 톰캣에서 ssl적용후에 테스트 하니 결제후에 하얗게되서 멈춥니다. 콘솔에선 이렇게 뜹니다.
http는 8080이고 ssl은 8444로 설정했습니다.

내일 오전에 다시 문의드리겠습니다.
캡쳐하신 부분은 TLS 설정과 관련없을것 같고, 로컬 PC 크롬의 CORS 이슈같습니다.
https://choijying21.tistory.com/entry/Nginx-CORS-%ED%95%B4%EA%B2%B0-Chrome-CORS-%ED%95%B4%EC%A0%9C-%EB%B0%A9%EB%B2%95%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%90%EC%84%9C-%EC%B2%98%EB%A6%AC
여기의 3. CORS 에러 해결(Chrome CORS 허용) 부분을 참고하여, 테스트하시는 로컬 PC의 크롬설정을 변경후 다시 체크 해보시겠어요?
JDevelog
Nginx CORS 해결, Chrome CORS 해제 방법(프론트에서 처리)
프론트엔드와 백엔드가 협업을 하다보면 CORS 에러를 정말 많이 만나게 되는 것 같다.프론트엔드에서 백엔드 서버로 api 요청을 보낼 때 흔히 볼 수 있는 에러이다. CORS는 Cross Origin Resource Sharing의 약자로 한국어로 직역하면 교차 출처 리소스 공유라고 할 수 있는데 CORS가 무엇인지부터 다시 리마인드해보려고 한다. 1. Origin 이란? 보통 우리가 사용하는 주소와 같은 URL은 마치 하나의 문자열같이 보여도, 여러개의 구성요소로 구성되어있다는게 사실이다. 아래의 그림과 같은 주소가 있다고 가정해보면 5가지 정도의 구성요소가 모여있다는 것을 확인해볼 수 있다. CORS에서의 Or...
해당 cors로 결제해도 같은 에러가 뜹니다
http나 https를 각각 80이나 8080이나 여러가지로 변경해봤는데 바뀐건 없고 그대로입니다.

결제창은 8444 로 띄우셨으니 returnURL 도 8444 번 포트로 실행되게 해주시기 바랍니다.
저번에 확인해봤었는데 이부분이 저희쪽에서 설정하는 부분이 아닌것 같아서요. 그리고 결제창은 https 8444이고 콘솔쪽에서는 http 8080으로 설정한 부분에러가 뜹니다.
참고로 http 7999 https를 8080으로 해보긴했는데 두번째 이미지처럼 뜹니다.


8080에 올라가 있는 코드가 잘못되어 있는것 같습니다.
8444 에 returnURL 파일이 없나요?
톰캣 포트만 다릅니다 http인지 https인지에 따라서, 8080 8444는 같은 소스입니다.

지금 보시면 8444에서는 정상적으로 결제창이 뜨고 8080에서는 결제창이 안뜨는 거라
8444에서호출하신후 returnurl 포트로 8444로 하시면 될것 같습니다.
네 설정하는곳이 따로 존재했어서 returl수정하고 ssl로 하면 될줄알았는데
log를 보니 어제처럼 handshake_failure와
at sun.security.ssl.Alerts.getSSLException(Unknown Source)은 여전히 보이는것 같습니다.


로컬호스트 테스트때 방화벽이나 이런건 관계없겠죠?
handshake_failure 는 TLS 버전 문제입니다. TLS1.2 이상을 사용해서 저희 서버를 접속하는지 확인부탁드립니다.
죄송합니다!!!~ 해보다가 안되서 svn히스토리를봤는데 당연히 되어있는줄 알았는데 작년 12월에 주신 jar를 저희 개발소스에서는 커밋을 안해놧네요 전임자분이.... XPayClient1031.jar 이름변경 후 덮어쓰니까 잘됩니다...
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.