test123
test1236mo ago

iOS 결제 모듈에 대해 문의합니다.

어제부터 오후 15시 부터 iOS결제 모듈 사용시 결제 UI를 불러오지 못하는 문제가 발생되고 있습니다. 사용된 코드는 PaymentWidget를 이용 하였으며 renderPaymentMethods가 작동되지 않는것 같아 보였습니다. 해당 부분에 대해 답변 요청합니다.
35 Replies
토스페이먼츠 BOT
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) : - 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요. * 주말/공휴일에는 답변이 늦을 수 있어요.
Kimoon Lee
Kimoon Lee6mo ago
저희쪽에서 재현해 볼수 있는 방법이 있을까요? 그리고 사용중인 MID 를 알려주시기 바랍니다. 마지막으로 콘솔쪽에 별다른 에러는 없으실까요?
test123
test123OP6mo ago
재현 방법에 대해선 잘 모르겠습니다. 지금 다시 테스트해보니 테스트키로는 잘되는데 라이브키로 하면 동일한 증상이 나옵니다. MID는 cjsmarsh2q 입니다. 사용된 코드 일부 공유드립니다. """ <!DOCTYPE html> <html> <head> <title>결제하기</title> <meta charSet="utf-8"/> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <script src="https://js.tosspayments.com/\(TossPaymentsEnvironment.stage)/payment-widget"></script> <style> #productInfo { margin:10px; } #payment-widget { margin:10px; } #payment-button{ width:100%; padding:15px; background-color:#3065AC; color:white; border-radius:3px; font-size:16px; border:none; margin-top:10px} .title {margin: 0 0 4px; font-size: 20px; font-weight: 600;color: #4e5968;} </style> </head> <body style="margin:0;padding:0;overflow:hidden;"> <!-- 상품 정보 영역--> <div id="productInfo"> <div class="title">상품 정보</div> <p>(self.paymentInfo.orderName)</p> <p>결제 금액: (numberFormatter(number: Int(self.paymentInfo.amount)))원</p> <hr> </div> <!-- 결제 방법 영역--> <div id="payment-method"></div> <div id="agreement"></div> <!-- 결제하기 버튼 --> <div id="payment-widget" /> <button id="payment-button">결제하기</button> </div> </body> </html> """ var requestPaymentJavascript: String { let javascriptString = """ const widget = PaymentWidget("(self.clientKey)", "(self.customerKey)"); const { updateAmount } = widget.renderPaymentMethods('#payment-method', (self.paymentInfo.amount)); const paymentAgreement = widget.renderAgreement('#agreement'); document.getElementById("payment-button").addEventListener("click", function () { widget.requestPayment((self.paymentInfo.requestJSONString ?? "")); }) """ return javascriptString }
유부장
유부장6mo ago
<script src="https://js.tosspayments.com//(TossPaymentsEnvironment.stage)/payment-widget"></script> 이건 무슨 내용인가요? '/' 이게 하나 더 들어가 있는것 같기도 하고 TossPaymentsEnvironment.stage 는 v1 으로 적용 되는 것이 맞을까요? 혹 이건 어디에서 확인하셨는지 알 수 있을까요?
test123
test123OP6mo ago
네 맞습니다 v1을 뜻합니다.
유부장
유부장6mo ago
'/' 이건 하나 더 넣어야 변수 지정을 할 수 있다는 의미로 이해하면 될까요?
test123
test123OP6mo ago
아닙니다. 표기상 오류입니다. 코드를 옮기다 보니 //로 표시된것 같습니다. <script src="https://js.tosspayments.com/v1/payment-widget"></script> 원소스에는 위와같이 제대로 표기되고있습니다.
유부장
유부장6mo ago
그럼 스크립트는 v1 스크립트를 쓰시는 것 같은데 js 단에서 메소드 지정하는 방법은 v2 방법을 사용하시고 있는것이다, 라고 이해하면 되나요?
test123
test123OP6mo ago
iOS SDK는 v2지원이 없는걸로 알고있습니다. 따라서 사용되고 있는 것은 v1입니다. let javascriptString = """ var tossPayments = TossPayments('(self.clientKey)'); tossPayments.requestPayment('(self.paymentMethod.rawValue)', (self.paymentInfo.requestJSONString ?? "")); """ 위 소스 이용시 제대로 표기가 됩니다.
유부장
유부장6mo ago
const { updateAmount } = widget.renderPaymentMethods('#payment-method', (self.paymentInfo.amount)); 여기 금액 value amount 로 넣으시는 건데 금액 변경 될때마다 const 변동 되나요?
test123
test123OP6mo ago
네 맞습니다. 제가 궁금한 부부은 테스트키로 하면 잘되는데 왜 실결제는 안되냐 입니다...
유부장
유부장6mo ago
재현 방법을 모르신다고 하니 하나씩 확인 하는 겁니다
test123
test123OP6mo ago
더불어 해당 키로 이미 실결제가 진행되고 있었습니다. 네 알겠습니다.
유부장
유부장6mo ago
우선, 금액 변동이 있을 경우에는 updateAmount 이 메서드 이용 해보실 수 있을까요? 특정 금액으로 렌더링 완료된 위젯에서 금액 변동이 있을때는 updateAmount 를 이용하도록 가이드 드리고 있습니다. renderPaymentMethods 이 작동되지 않는다는 의미는 렌더링이 정상적이지 않다는 의미로 들려서 말씀 드리는 것이고, 테스트환경, 라이브환경에 따른것은 아닌것으로 보여서 그렇습니다. 우선 금액 변동시에 다시 렌더링 하도록 하는 것을 updateAmount 메서드로 해볼 수 있도록 부탁 드립니다.
test123
test123OP6mo ago
네 확인해보겠습니다.
test123
test123OP6mo ago
증상은 동일합니다. 이해를 위해 스크린샷으로 테스트, 실결제 이미지 업로드 합니다.
No description
No description
Kimoon Lee
Kimoon Lee6mo ago
혹시 customerkey 에 live_ck 나 live_sk 로 시작하는 값을 넣으신건 아닌지 확인부탁드립니다.
이니스프리몰_고도화
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()); }
test123
test123OP6mo ago
live_sk로 시작하는 값을 넣었습니다. SDK를 사용하기 때문에 API 개별 연동키로 진행 했습니다.
Kimoon Lee
Kimoon Lee6mo ago
customerKey 에 라이브 클라이언트키나 시크릿 키를 넣으시면 안됩니다. customerkey 에 고객을 식별할수 있는 key 를 넣으시거나 아니면 PaymentWidget.ANONYMOUS 로 설정해 보세요.
토스페이먼츠 BOT
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.
test123
test123OP6mo ago
customerKey에 라이브 클라이언트키나 시크릿키를 넣으면 안된다는 말씀은 어떤 의미인가요?
Kimoon Lee
Kimoon Lee6mo ago
customerKey 는 고객을 구분하는 키입니다. 클라이언트키나 시크릿키 는 해당 상점이 저희와 통신하기 위해 필요한 키이구요.
test123
test123OP6mo ago
어제 이전까지 해당값을 넣고 라이브결제까지 잘되었던건데 넣으면 안된다고 말씀하시니 이해가 잘 되지 않습니다.
Kimoon Lee
Kimoon Lee6mo ago
네 해당 키가 실제로 외부에 공개 되면 안되는 키여서 이렇게 사용하시는 케이스에 대해 보안 감사시 지적이 들어왔습니다. 그래서 급하게 차단된 것으로 확인됩니다. customerkey 만 변경해 주시면 정상적으로 로딩되실거에요.
test123
test123OP6mo ago
네 테스트 해보겠습니다. 테스트 결과 해당 부분이 문제가 맞습니다... 난감하네요.. 해당 부분에 대한 공지가 별도로 있었을까요?
Kimoon Lee
Kimoon Lee6mo ago
저희 급하게 차단을 해야 하는 상황이어서 공지가 나가지 못한것으로 알고 있습니다.
이실장
이실장6mo ago
@test123 안녕하세요 ho--n@myp---.co.kr 위 메일이 귀사에서 현재 사용 중이신 메일 주소일까요? 저희가 4월30일, 5월 27일, 7월18일 총 3번 위 메일로 수정요청 메일을 드렸습니다.
test123
test123OP6mo ago
@이실장 대표메일로는 안온걸로 알고있습니다. 말씀주신 메일은 저희 대표님 메일입니다...
유부장
유부장6mo ago
현재 저희가 연락드리는 이메일은 상점관리자에 등록하신 운영, 정산, 기술 담당자 인데요 지금 이 3개 담당자 이메일이 전부 ho--n@myp---.co.kr 로 등록 되어 있는것 같습니다.
test123
test123OP6mo ago
@이실장 관련 메일 확인 하였습니다. 그러나 서비스 중지에 대한 언급이 없어서 실서비스를 하고있는 중이라 추후 반영 하려고했었는데 해당부분이 이슈가 발생되었습니다.
유부장
유부장6mo ago
tosspayments.com 에 로그인 하셔서 회사정보에 들어가시면 확인 및 변경 요청 하실 수 있습니다.
test123
test123OP6mo ago
@유부장 네 답변 감사드립니다.
이실장
이실장6mo ago
관련해서 안내드릴게요. secretKey 유출은 보안적으로 매우 심각한 문제이며, 금융기관에서도 이를 철저히 감독하고 있습니다. 특히 최근 다른 업체의 사고 등으로 인해 보안 이슈에 대한 점검이 강화되었습니다. 저희 역시 실시간 모니터링을 통해 발견 즉시 이메일로 안내드리고 있습니다. 귀사에는 지난 3개월 동안 총 세 차례 관련 고지를 드렸습니다. 7월 17일 탐지된 건에 대해 고지 후, 25일까지 거래가 전혀 없어 추가 탐지가 이루어지지 않았습니다. 이로 인해 25일 배포 시 영향 가맹점 목록에서 누락된 것으로 보입니다. 금번 배포는 보안적으로 꼭 필요한 배포였음에 대해 양해 바랍니다.
test123
test123OP6mo ago
네 답변감사합니다.

Did you find this page helpful?