결제 검증을 어느 시점에 어떤 방식으로 하는지 잘 모르겠어요
안녕하세요 간편하게 결제 시스템 적용할 수 있게 만들어주셔서 감사드립니다.
현재 제가 이해한 바로는 토스 결제가 크게 요청과 승인 과정으로 이루어지고 요청에서 승인으로 넘어가기 전에 백엔드 단에서 검증이 필요하다고 이해했습니다.
요청에 성공했을 때 백엔드에서 success url로 결제 정보를 받아서 이 데이터와 백엔드에 저장된 값과 비교하면서 검증을 하면 된다고 생각했습니다.
근데 가이드를 보면 요청에 넘어가기 전 서버에 데이터를 저장하고 요청성공 시 들어온 데이터와 요청 전 백엔드에 저장된 데이터를 비교한다고 적혀있는데 이 부분이 잘 이해가 되지 않습니다.
1. 요청에 넘어가기 전 서버에 저장하게 되는 데이터 자체도 쉽게 변조될 수 있지 않나요? 그럼 굳이 success에 넘어오는 데이터와 요청 전 서버에 저장하는 데이터를 비교할 필요가 없지 않나요?
2. 요청에 넘어가기 전 서버에 저장을 해야한다면 결제 요청은 프론트가 아니라 백엔드에서 요청 정보를 저장하고, 결제요청을 백엔드에서 호출해야하지 않나요? (샘플 코드를 보면 프론트에서 바로 결제 요청을 해서요..)
3. 현재 제가 생각하는 구현 방식은 프론트에서 결제 요청을하고 인증 성공 시 백엔드에서 /sucees 로 들어온 데이터를 받고, 이 데이터와 백엔드에서 갖고 있는 데이터와 검증 후 문제가 없으면 승인을 요청하는 식으로 구현했는데 제가 프로세스를 제대로 이해했는지 궁금합니다.
개발자 센터에 자세히 설명해주셨는데 죄송합니다 항상 감사합니다 토스 파팅
============================
요청에 성공했을 때 들어오는 데이터가 일정한 형식으로 정해져 있네요 죄송합니다. 그럼 요청 전에 서버에 데이터를 저장하게 하고 요청을하게 하는 로직은 구체적으로 어떻게 이루어지나요?
프론트에서 백엔드에게 데이터를 저장하게하는 요청을하고 이 요청이 처리되면 결제요청이 이루어지도록 프론트 코드를 구현하면 될까요?
6 Replies
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) :
- 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요.
* 주말/공휴일에는 답변이 늦을 수 있어요.
연동 방식에 따라 다른데요.
현재 표준 방식인 결제위젯으로 알려드리자면,
1. 주문서 페이지로 넘어올 때(장바구니나 상품 페이지에서 결제버튼을 누르고 난 후), 주문서 페이지를 서버에서 보내주기 전 백엔드에서 세션이나 DB에 상품 정보를 저장합니다. 여기서 말하는 상품정보는 금액과 상품 이름, 개수 같은 결제에 필요한 값들입니다. 결제 정보 전문을 저장하는 것이 아닌 상품 정보를 저장하므로 변조될 위험은 없습니다.
2. 이후 결제위젯을 frontend에서 렌더하고(이때 저장했던 데이터를 재사용합니다), 결제창이 열립니다. 이 프로세스를 "인증" 단계라고 합니다. 인증 단계가 지난 뒤에는 저희가 success page로 결제 key(paymentKey), 금액(amount) 등의 정보를 보내드립니다.
3. 받은 amount 파라미터와 저장했던 데이터를 비교하여 가격이 동일한지 확인합니다. 동일하지 않다면 위변조 의심 메시지를 띄우고 더이상의 프로세스를 진행하지 않습니다.
4. 동일하다면 받은 paymentKey를 이용하여 결제 승인을 보냅니다. HTTP 200 OK 응답을 받았다면 성공이며, 결제 완료 페이지를 보냅니다.
React와 같은 라이브러리를 사용하여 개발하신다면,
1번 프로세스를 backend의 Rest API 라우트에 post로 태워서 보내는 것으로 바꿉니다. 이때 직접적인 결제 정보를 보내지 말고, 상품 정보를 보내서 위변조가 어렵게 합니다.
결제 요청, 인증, 승인… 이게 다 뭔가요?
결제 과정 콘텐츠 일러스트
결제 연동할 때, 이런 의문 가져보신 적 없으세요? 결제 요청과 승인은 어떻게 다르고, 왜 따로 처리해줘야 하는 걸까요?
여기 참고해주세요~
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.
구체적인 답변 넘넘 감사드립니다 참고해서 개발해보겠습니다!! 다시 한 번 감사드려요~~
감사합니다!! 결제과정을 이해하는데 도움이 되었습니다!!