xpay 계좌 인증 연동 문의 드립니다.

요청시 LGD_TXID 필드가 누락되었다는 메시지가 전송됩니다. 연동 가이드에는 없는 필드인데 추가 해야 할까요? 아니면 잘못 설정 된건가요? Logger - 인증요청이 완료되었습니다. Logger - >>> 1 LGD_RESPCODE Logger - >> 2 XC01 Logger - >>> 1 LGD_RESPMSG Logger - >> 2 LGD_TXID 필드가 누락되었습니다.
54 Replies
토스페이먼츠 BOT
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) : - 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요. * 주말/공휴일에는 답변이 늦을 수 있어요.
김차장
김차장3mo ago
보고계신 연동가이드가 아래 문서인지 확인부탁드려요 https://docs.google.com/document/d/1-yOCm80jXOjMEagQtPJ3bUfqlvpFWku-FlAat6Not2g/edit?usp=drive_link
Google Docs
XPAY[API]계좌유효성.1.0.3
Xpay-API-계좌유효성 Protocol and Core Function Specification Version 1.0.3 2022.09 목차 XPay 연동 샘플 파일 구조 3 XPay 결제 서비스 파라미터 3 ▪ 계좌유효성 요청 파라미터 3 ▪ 계좌유효성 결제 응답 파라미터 4 XPay 연동 샘플 파일 구조 TossPayments에서 제공되는 샘플파일은 XPay 결제 모듈 연동에 필요한 라이브러리(설치파일 포함) 및 설정파일과 실제 해당 서비스를 구현한 샘플페이지로 구성됩...
이니스프리몰_고도화
네 맞습니다.
김차장
김차장3mo ago
그러면 코드를 좀 봐주셔야합니다.
이니스프리몰_고도화
어떤 코드요? 샘플 말하시는건가요?
김차장
김차장3mo ago
에러가 발생하는 코드를 먼저 찾아주시구요
김차장
김차장3mo ago
? 통신할때 사용되는 값들은 가맹점에서 세팅하는 값도있고
이니스프리몰_고도화
필드가 누락되었다는건가요?
김차장
김차장3mo ago
코드에서 생성되는 값도 있어요 샘플코드 기준으로는
김차장
김차장3mo ago
대부분의 로직이 payreq, payres 에 있구요 아래 부분이 TXID 생성하는 부분도 봐주세요
이니스프리몰_고도화
샘플에는 txid 를 안나와있어요 가이드 문서에두요
Kimoon Lee
Kimoon Lee3mo ago
사용하신 MID 알려주세요.
이니스프리몰_고도화
추가를 해줘야 하는건가요? "LGD_MID=innisfree2&LGD_TXNAME=AccCert&LGD_GUBUN=2&LGD_BANKCODE=20&LGD_ACCOUNTNO=47740xxxxxx&LGD_NAME=%B0%AD%BF%B5%C8%C6&LGD_PRIVATENO=830925&LGD_BUYERIP=192.0.0.1" innisfree2 innisfree2 입니다
Kimoon Lee
Kimoon Lee3mo ago
호출을 직접 저렇게 하시는 건가요? 아니면 XPAY client 를 사용하시는 건가요?
이니스프리몰_고도화
직접 호출 하였습니다 api 서버를 개발중입니다.
Kimoon Lee
Kimoon Lee3mo ago
그렇게 하시면 안되고 저희가 제공하는 라이브러리를 사용해 주셔야 합니다.
이니스프리몰_고도화
아.. 네 xpay 모듈을 사용해서 호출한겁니다. 샘플에서 재공되는 jar를 사용하였구요
Kimoon Lee
Kimoon Lee3mo ago
XPAY 모듈 호출하는 부분 코드좀 공유해주세요.
이니스프리몰_고도화
잠시만요 코드가 너무 길어서 안올라가나요 가네요 try { XPayClient xpay = new XPayClient(); boolean isInitOK = xpay.Init(xpayConfigPath, xpayPlatform); if (!isInitOK) { throw new PaymentExcetion(XPAY_ERROR); } // 토스 상점 아이디 설정 (테스트 아이디 일 경우 앞에 't' 붙여서 사용) xpay.Init_TX(xpayPlatform.equals("test") ? "t" : "" + tosId); // String LGD_MID = ("test".equals(CST_PLATFORM.trim()) ? "t" : "") + CST_MID; xpay.Set("LGD_MID", tosId); xpay.Set("LGD_TXNAME", "AccCert"); xpay.Set("LGD_GUBUN", "2"); xpay.Set("LGD_BANKCODE", reqDto.getBankCode()); xpay.Set("LGD_ACCOUNTNO", reqDto.getAccountNo()); xpay.Set("LGD_NAME", reqDto.getName()); xpay.Set("LGD_PRIVATENO", reqDto.getPrivateNo()); xpay.Set("LGD_BUYERIP", "192.0.0.1"); if (xpay.TX()) { // 1)인증결과 화면처리(성공,실패 결과 처리를 하시기 바랍니다.) InmLogger.debug("인증요청이 완료되었습니다."); resultDto.setCode(xpay.m_szResCode); resultDto.setMessage(xpay.m_szResMsg); // 아래는 인증 결과 파라미터를 모두 찍어 줍니다. for (int i = 0; i < xpay.ResponseNameCount(); i++) { InmLogger.debug(">>> 1 " + xpay.ResponseName(i)); for (int j = 0; j < xpay.ResponseCount(); j++) { InmLogger.debug(">> 2 " + xpay.Response(xpay.ResponseName(i), j)); } } } else { // 2)API 요청실패 화면처리 throw new PaymentExcetion("xpay 계좌 유효성 검증 실패 ", PaymentResultResDto.builder().code(xpay.m_szResCode).message(xpay.m_szResMsg).build()); } } catch (PaymentExcetion fe) {
Kimoon Lee
Kimoon Lee3mo ago
XPayClient.jar 파일은 최근에 받으신거죠?
이니스프리몰_고도화
네 한달도 안되었습니다. 모듈이 문제가 있나요?
Kimoon Lee
Kimoon Lee3mo ago
근데 좀 이상한데 CST_PLATFORM 값은 안보내시나요? 원래 저희가 드린 샘플코드에 CST_PLATFORM 하고 CST_MID 값을 설정하도록 되어 있을텐데요.
이니스프리몰_고도화
가이드 문서에는 없었는데 누락된걸까요? 추가해보겟습니다. "CST_PLATFORM=test&LGD_MID=innisfree2&LGD_TXNAME=AccCert&LGD_GUBUN=2&LGD_BANKCODE=20&LGD_ACCOUNTNO=4774020xxxxxx&LGD_NAME=%B0%AD%BF%B5%C8%C6&LGD_PRIVATENO=830925&LGD_BUYERIP=192.0.0.1"
Kimoon Lee
Kimoon Lee3mo ago
지금 이슈는 테스트 서버로 라이브 MID 가 들어가고 있습니다.
이니스프리몰_고도화
필드 추가해도 일단 메시지는 동일하네요 CST_PLATFORM은 추가되는게 맞는거면 일단은 적용 해두겟습니다. mid 문제일까요?
Kimoon Lee
Kimoon Lee3mo ago
LGD_MID 를 tinnisfree2 로 설정해 두시구요. mall.conf 에
이니스프리몰_고도화
test일때 t가 붙도록 하면 될까요? 설정파일에? 변경을 해야 할까요?
Kimoon Lee
Kimoon Lee3mo ago
innisfree2 = Mertkey 로 설정해 두시구요. tinnisfree2 = Mertkey 가 설정되어 잇는지 확인부탁드립니다.
이니스프리몰_고도화
바꿔 보긴 했는데 결과는 동일하네요
Kimoon Lee
Kimoon Lee3mo ago
혹시 xPAY 로그파일 확인 가능하신가요?
이니스프리몰_고도화
was 콘솔 로그랑 동일하네요 LGD_TXID 는 어떤 값인가요?
유부장
유부장3mo ago
코드내용이 저희가 전달 드리는 샘플하고 일부 다른것 같은데 XPayClient xpay = new XPayClient(); boolean isInitOK = xpay.Init(configPath, CST_PLATFORM); 이게 샘플에 명시된 CST_PLATFORM 기반으로 테스트, 라이브 MID 분기하는 부분인데 XPayClient xpay = new XPayClient(); boolean isInitOK = xpay.Init(xpayConfigPath, xpayPlatform); 이렇게 되어있는데, xpayPlatform 는 현재 무슨 값을 가져오고 있나요? String CST_PLATFORM = nvl(request.getParameter("CST_PLATFORM")); //토스페이먼츠 결제 서비스 선택(test:테스트, service:서비스) String CST_MID = nvl(request.getParameter("CST_MID")); //상점아이디(토스페이먼츠으로 부터 발급받으신 상점아이디를 입력하세요) String LGD_MID = ("test".equals(CST_PLATFORM.trim())?"t":"")+CST_MID; //테스트 아이디는 't'를 제외하고 입력하세요. 샘플에는 이렇게 CST_PLATFORM 이 test 일때, CST_MID 에 입력값에 알아서 t 를 붙여 주도록 되어 있는데, 이 부분 수정을 하신 걸까요? tosId 가 운영하는 MID 값을 바로 입력해서 사용하고 계시는 게 맞을까요? 값 설정이나 이 부분을 혹시 어떻게 임의로 수정 하셨는지를 알 수 있을까요?
이니스프리몰_고도화
XPayClient xpay = new XPayClient(); boolean isInitOK = xpay.Init(xpayConfigPath, xpayPlatform); if (!isInitOK) { throw new PaymentExcetion(XPAY_ERROR); } // 토스 상점 아이디 설정 (테스트 아이디 일 경우 앞에 't' 붙여서 사용) xpay.Init_TX(xpayPlatform.equals("test") ? "t" : "" + tosId); String lgdMid = (xpayPlatform.equals("test") ? "t" : "") + tosId; xpay.Set("CST_PLATFORM", xpayPlatform); xpay.Set("LGD_MID", lgdMid); xpay.Set("LGD_TXNAME", "AccCert"); xpay.Set("LGD_GUBUN", "2"); xpay.Set("LGD_BANKCODE", reqDto.getBankCode()); xpay.Set("LGD_ACCOUNTNO", reqDto.getAccountNo()); xpay.Set("LGD_NAME", reqDto.getName()); xpay.Set("LGD_PRIVATENO", reqDto.getPrivateNo()); xpay.Set("LGD_BUYERIP", "192.0.0.1");
유부장
유부장3mo ago
1) xpayPlatform 으로 xpay.Init이 들어가고 있는데, 여기에 무슨 값이 들어 가도록 했는지 2) xpayPlatform 값을 기준으로, LGD_MID 가 innisfree2 또는 tinnisfree2 로 들어가도록 해야 하는데, 그 부분 구현은 되셨는지
이니스프리몰_고도화
프라퍼티에 설정된 값을 바로 넣고 있고 올려드린 로그에도 전송 파라메터에 찍혀 있어요
유부장
유부장3mo ago
지금 xpay init 시에 t 라는 값만 들어가는것처럼 보여서 질문 드리는거에요
이니스프리몰_고도화
LGD_MID 로 tinnisfree2 보내지고 있는데 네 위에 스크린샷 로그는 저희측 로그가 아니라 xpay 모듈이 직은 로그에요 was에서
유부장
유부장3mo ago
본래 샘플대로라면 xpay.Init_TX(LGD_MID); 에서 LGD_MID 값으로 들어가도록 되어야 하는데 xpay.Init_TX(xpayPlatform.equals("test") ? "t" : "" + tosId); 지금 이렇게 수정 해두셨는데 전달하신 로그에서 Init_TX Key [t] 가 뭔지 모른다고 나오는 것처럼 보이는데 의미는 tosId 라는 값이 제대로 안들어 가고 있는거 아닌가 이걸 질문 드리는 겁니다
이니스프리몰_고도화
아.. 뭔말인지 이해 했습니다. 성공했습니다 { "statusCode": 200, "data": { "code": "M049", "message": "본인확인 서비스를 지원하는 상점이 아닙니다." } } 테스트도 계약이 되어야만 정상 테스트 가능한걸까요? 그리고 한가지더 질문이 있는데 root ca 인증서는 인증기관에 등록 완료된 인증서만 가능한건가요?
유부장
유부장3mo ago
네, 우선 init_TX 진행하는 부분에서 MID 들어가는 부분 가이드 드려야 해서 정리 드린 것이고 계좌 유효성 검증 API 의 경우, 요청건당 이용료가 있는 기능 이어서, 테스트 환경에서는 제공되지 않는것이 맞습니다. 인증서 관련해서는, 네 맞습니다.
토스페이먼츠 BOT
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.