간편결제 시에만 success가 두번
일반 카드결제, 계좌이체, 가상계좌 등은 정상적으로 성공으로 떨어지나, 간편결제로 결제한 경우에만 successUrl이 두번 호출되어 이미 처리된 결제건이라고 실패처리로 떨어집니다.
개발자센터의 라이브키 API로그를 확인해보니 1초차이로 2번씩 요청이 들어왔다고 나오며 아래와 같습니다.
[최초 정상결제]
orderId : ariskrkwwk-mall-17153744-S2024060010
X-Tosspayments-Trace-Id : 2f8bdf9daa1cd2178a69bb7270fc51a9
[1초 후 이미 결제된 건이라고 실패처리]
orderId : ariskrkwwk-mall-17153744-S2024060010
X-Tosspayments-Trace-Id : 33a82d5595197eb02cdddc56c464c271
이렇게 되어서 최종적으로는 결제실패로 떨어지는데요.
일반 결제인 경우 정상적으로 처리되는데 간편결제 시에만 왜 두번 호출이 되는지 모르겠습니다.
결제 프로세스는
1. 리다이렉트 URL 처리를 통해
tossPayments.requestPayment('카드', { // 결제 수단 파라미터
// 결제 정보 파라미터
amount: LGD_AMOUNT,
orderId: $("input[name=LGD_OID]").val(),
orderName: LGD_PRODUCTINFO,
customerName: MY_M_NAME,
customerEmail: m_email,
successUrl: callback_success,
failUrl: callback_fail,
windowTarget: 'self'
});
토스모듈을 호출합니다.
2. successUrl 페이지에서 /v1/payments/confirm를 호출합니다.
카드결제 시에는 정상적으로 /v1/payments/confirm가 1회만 작동되는데 간편결제(네이버페이 등등)일때만 /v1/payments/confirm가 두번 호출되는것 같습니다.
간편결제시에만 문제가 있는데 간편결제는 리다이렉트URL 형식을 사용할 때 successUrl이 두번 결과값을ㅇ 뱉어내나요?
답변 부탁드립니다.
감사합니다.
25 Replies
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) :
- 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요.
* 주말/공휴일에는 답변이 늦을 수 있어요.
아뇨 아래에도 설명드렸지만 저희는 1번만 호출해 드립니다.
혹시 자동적으로 successURL 에서 reload 를 하시거나 특정로직에서 api 호출을 두번하시는건 아닌지 확인부탁드립니다.
답변감사합니다.
추가적으로 특정로직에서 호출을 더 하는건 아닌지 찾아보겠습니다.
그게 아니라면 고객이 successURL 을 reload 했을 가능성도 있습니다.
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.
안녕하세요.
말씀주신것 처럼 저희측 코드 실수로 인해 두번 호출한건 아닌지 아무리 살펴보아도 그런 로직이 없습니다.
successURL을 누가 두번씩 호출하는지 로그를 남겨보아도 두번 호출하는건 referer=[https://payment-gateway.tosspayments.com/] 라고 남더라고요.
간편결제 시 토스모듈외에 추가로 창이 하나 더 열리는 간편결제의 경우(네이버페이)에 발생하는것 같습니다.
그 외의 간편결제는 이런 이상이 없거든요.
다른 모든 결제수단은 이상이 없는데 오로지 네이버페이만 이러는거면 저희가 컨트롤할 수 있는 내용이 아닌것 같아요.
네이버페이에서 결과값을 두번 리턴하는걸 저희가 막을 방법이 없습니다.
검토 좀 부탁드립니다.
혹시 저희가 재현을 해볼 방법이 있을까요?
동일하게 네이버 페이 등을 사용하는 타 가맹점의 경우 해당 문제가 리포팅 된적이 없긴합니다.
토스페이먼츠객체.requestPayment('카드', {
amount: "32500",
orderId: "주문번호",
orderName: "교재몰",
customerName: "정현기",
customerEmail: "yoontrue92@macgai7.com",
successUrl: "https://ms.mhsr.kr/teacher/mall/payment_toss_success.aspx",
failUrl: "https://ms.mhsr.kr/teacher/mall/payment_toss_fail.aspx",
windowTarget: 'self'
});
위와같은 형식으로 모듈을 호출하며 successUrl(https://ms.mhsr.kr/teacher/mall/payment_toss_success.aspx) 에서는 스스로 리로드하는 로직이 없습니다.
위와 같이 모듈을 호출하여 간편결제 - "네이버페이" - 카드로 진행하는 경우 successUrl(https://ms.mhsr.kr/teacher/mall/payment_toss_success.aspx) 이 두번 리턴되더라고요.
이 정도 정보로 재현이 가능할까요..?
windowTarget: 'self' 로 보내시는군요.
네! 혹시 그게 문제일까요?!
이것 혹시 빼고 다시한번 확인해 보실수 있을까요?
PC 에서 하고 계시는 거죠?
넵
해당 옵션이 PC 에서 전체 페이지를 결제창으로 바꾸는 것인데 일반적으로는 사용하실 필요가 없는 옵션입니다.
아 저희가 결제 모듈을 IFRAME 내에 띄워놓고 사용중이라 IFRAME안에서만 결과값이 노출되도록 세팅해놓은 상태여서 쓰고있었습니다.
네 일단 빼고 확인 부탁드리겠습니다.
빼고 진행하였더니 화면이 결과화면으로 넘어가지 않아서요
아 iframe 안에서 부르셔서 그럴겁니다. iframe 을 빼고 사용하실수는 없으신가요?
UI와 프로세스를 전부 바꿔야해서요. 당장 테스트가 어려울것 같습니다. 결과자체도 IFRAME내에서 보여주기위해 만들어놓았기 때문에 제안해주신대로 IFRAME 없이 모듈 로딩부터 결과화면까지 다시 그려서 진행해야할 것 같습니다.
아무래도 실마리를 찾은듯 하니 windowTarget: 'self' 이 문제라면 ui 변경작업 후 테스트진행해보고 만약 또 안된다면 그 때 다시 문의하는것으로 하겠습니다.
도움주셔서 감사합니다.
일단 저희쪽도 테스트를 해보겠습니다.
네 감사합니다.
아무래도 아이프레임에서 결과값을 셀프로 받아서 문제인거면 다른 결제수단도 문제가 되어야 맞는데 오로지 네이버 페이만 문제그 생겨서 의문이었습니다.
내부적으로도 한번만 더 확인해주시면 감사드리겠습니다.
아 저희쪽에서 재현이 되는 것 같네요. 일단 프로세스 바꾸지 마시고, 그냥 두시기 바랍니다.
내부적으로 이슈 있는지 확인한뒤에 공유 드리겠습니다.
네 빠른 피드백 감사드립니다!
@김구이님 이부분 수정해서 배포 되었습니다. 다시 확인부탁드립니다.
감사합니다!
익일 오전에 확인해보겠습니다~!
빠른 해결에 감사드립니다. 정상적으로 작동하는것 확인되었습니다!
네 확인 감사합니다.