Henu
Henu3y ago

카드결제연동 successUrl 호출 후 처리 과정에 대한 문의

안녕하세요, 스프링 프레임워크(EgovFramework) 환경에서 '토스페이먼츠' Javascript SDK를 이용하여 카드제, 가상계좌, 계좌이체 결제 모듈을 순차적으로 연동중에 있습니다. 신용, 체크카드 결제에 대해서 요청 파라미터 중 successUrl이 설정되는 것으로 알고 있는데요. 해당 결제 모듈 호출 후 고객이 은행사 앱을 통해 결제를 하고 나면 successUrl이 호출되는 것으로 보입니다. successUrl 호출 시 동작하는 소스코드에서 응답 데이터(card 결제 데이터)를 받은 후 결제 승인 API를 호출하여 상점(저희쪽 쇼핑몰)의 최종 DB 처리까지 이루어지는 것이 맞는지 문의드립니다. (전환됨)
No description
15 Replies
이실장
이실장3y ago
안녕하세요! PG결제는 인증 > 승인 순서로 진행되게 됩니다. 먼저 고객이 토스페이먼츠창을 띄운 후 , 카드정보 등을 인증하게 되는데요! 인증이 성공하게 되면 successURL로 이동하게 됩니다. (여기까지는 아직 '인증완료' 상태이기 때문에 결제가 완료된 상황이 아닙니다.) successUrl로 이동할 때, getParameter로 Paymentkey를 리턴해드리는데요. 해당 PaymentKey로 승인API를 호출해주셔야 실제로 결제까지 완료됩니다.
Henu
HenuOP3y ago
답변 감사합니다. successUrl이 호출되어 처리되는 백엔드 소스코드쪽에서 결제 승인 API에 해당하는 URL을 호출하여 남은 처리 과정을 진행하도록 하겠습니다. 추가 문의가 있는 경우 새로운 포스트를 등록해 보겠습니다.
No description
Henu
HenuOP3y ago
안녕하세요, 새로운 포스트를 등록하려나 해당 포스트의 연장선인 것 같아 댓글로 추가 문의 드립니다. successUrl 호출 및 처리 로직에서 결제 승인 API까지 성공적으로 진행되었습니다. 이후 토스페이먼츠측에서 제공하고 있는 깃헙의 샘플 소스코드(Spring boot)와 같이 결제 후 완료 또는 실패 페이지로 전환되는 것과 달리 저희는 비동기 방식으로 응답 데이터를 JSON 데이터로 반환 받아 상점(쇼핑몰)상의 주문 페이지에서 추가작업을 하고 싶은 상황입니다.
Henu
HenuOP3y ago
No description
이실장
이실장3y ago
저희가 successURL로 paymentKey를 리턴해드리기 때문에 해당 방식은 어렵습니다. 말씀하신 방법으로 구현하고자하는 이유가 있으실까요?
Henu
HenuOP3y ago
저희의 경우 상점(쇼핑몰)의 주문정보 입력 페이지에서 토스페이먼츠 결제모듈을 호출하여 결제가 이루어지는 방식으로 개발이 이루어 지고 있습니다. 만약, 결제가 실패(유저가 직접 닫기하는 것과는 다른 개념)하면 다시 한번 결제를 시도할 수 있는 기회(?)를 제공하고 싶어서입니다. 하지만 결제 성공/실패에 따라 곧 바로 화면이 전환되는 경우 유저는 다시 주문 상품을 찾아 주문 과정을 또 한번 진행해야하는 번거로움이 있을까 봐서 응답 데이터를 비동기적으로 반환 받아 후 처리를 진행하고 싶습니다.
Henu
HenuOP3y ago
No description
Kimoon Lee
Kimoon Lee3y ago
해당 방식은 카드사 인증창이 뜨는 등의 이슈로 저희쪽에서 제공을 해드릴수 없는 부분입니다. 필요하시다면 새창을 띄우신후에 그안에서 저희 결제창을 호출해서 처리해 주시기 바랍니다. 이렇게 하면 결제시에 문제가 발생하는 경우 결제창을 가진 새창만 닫으신후에 원래 창에 있던 주문서 페이지에서 원하는 작업을 하실수 있습니다.
Henu
HenuOP3y ago
알겠습니다. 늦은 시간까지 답변주시어 대단히 감사드립니다!
Kimoon Lee
Kimoon Lee3y ago
그게 아니라면 iframe을 직접 만들어 주신후에 그 안에 html 에서 결제창을 호출해 주시면서 windowTarget : "self" 로 설정하시면 만드신 iframe 안에서 결제창이 표시되고 successURL 도 해당 iframe 에서 호출되게 됩니다. 이방식을 이용하셔도 전체 창에서 redirection 이 일어나지 않아 원하시는 작업을 하실수 있을것 같습니다.
Henu
HenuOP3y ago
아, 그런 방법이 있었네요. 아이디어 감사합니다!
Ayaan이안
Ayaan이안3y ago
해당 방식에 경우 크롬 브라우저의 정책에 따라 몇몇 기능이 제한이 될 수도 있습니다. 저 같은 경우 복잡하지만, 세션에 모든 input data를 json화 하여 저장해두고, failURL으로 돌아오면 얼럿으로 "오류가 발생했습니다. 다시 시도해 주세요" 라고 띄운다음에 세션 정보를 바탕으로 결제 입력 정보를 복원하여 진행했습니다.
Henu
HenuOP3y ago
만약, 결제가 실패한다면 무조건 한번은 failURL을 통해 페이지가 전환된 후 세션 정보를 바탕으로 다시 한번 주문정보입력 페이지를 요청하는 방식으로 이해하면 되는건가요? 첨언 감사드립니다.
Ayaan이안
Ayaan이안3y ago
음 제가 이해를 잘 못하는건지 약간 헷갈리는 부분이 있으시는거 같아요. 주문정보입력 -> 세션 등록 -> 결제 -> 결제실패(FailURL) -> 세션 복원하여 주문정보 입력으로 돌아옴 이런 프로세스입니다! 계속 실패를 한다면 계속 주문정보 입력으로 돌아오게 되는겁니다
Henu
HenuOP3y ago
이해했습니다! 감사합니다.

Did you find this page helpful?