결제 요청, 인증, 승인 차이는? 토스페이먼츠 결제 연동 흐름 정리

결제 요청, 인증, 승인 차이는? 토스페이먼츠 결제 연동 흐름 정리

결론부터 말하면: 결제 요청은 구매자가 결제창에서 결제 정보를 입력하고 제출하는 단계예요. 인증은 카드사 등 결제 수단 제공자가 거래 정보를 확인하는 단계이고, 승인은 가맹점 서버가 토스페이먼츠의 승인 API를 호출해 결제를 완료하는 단계예요.

결제 승인이 성공해야 최종적으로 결제가 완료돼요. 토스페이먼츠는 결제 요청과 승인을 분리해 처리하는 방식으로 가맹점이 결제 정보를 검증하고 관리할 수 있도록 지원해요.

결제 연동을 하다 보면 이런 의문이 들 수 있어요. 결제창을 띄우고 결제 요청에 성공했는데, 여기서 끝이 아니라 '결제 승인 요청'까지 해야 결제가 완료된다고 하네요. 결제 요청과 승인은 어떻게 다르고, 왜 별도로 처리해야 할까요?

결제 요청부터 인증, 승인까지 각 단계의 역할과 전체 흐름을 차근차근 알아볼게요.

결제 요청·인증·승인, 한눈에 보기

단계
처리하는 곳
하는 일
결제 요청
구매자 & 가맹점 Client
구매자가 결제창에서 결제 수단을 선택하고 결제 정보를 제출해요
인증
카드사
카드사가 카드 정보와 결제 금액을 확인해 유효한 거래인지 확인해요
승인
가맹점 Server
인증된 결제를 카드사에 승인해 달라고 요청해요. 승인이 성공해야 결제가 완료돼요

결제 연동 단계 요약

토스페이먼츠 결제 연동은 다음과 같은 순서로 진행돼요.

  1. 결제 요청 전에 주문 정보를 서버에 임시 저장해요.
  2. 결제창을 띄우고 결제를 요청해요.
  3. 카드사 등 결제 수단 제공자가 인증을 진행해요.
  4. 인증에 성공하면 가맹점이 설정한 성공 리다이렉트 URL로 이동해요.
  5. 성공 리다이렉트 URL로 전달된 값과 서버에 임시 저장한 주문 정보를 비교해 검증해요.
  6. 검증에 문제가 없다면 결제 승인 API를 호출해요.
  7. 승인 API 응답이 성공하면 결제가 완료돼요.

결제 승인에 필요한 준비물

준비물
설명
성공 리다이렉트 URL
인증에 성공했을 때 토스페이먼츠가 구매자를 이동시키는 가맹점 주소예요. 가맹점에서 미리 설정해요.
성공 리다이렉트 URL의 쿼리 파라미터
결제 승인에 필요한 paymentKey, orderId, amount 등의 값이 담겨 있어요.
서버에 임시 저장한 결제 정보
결제 요청 전에 서버에 저장한 주문 정보예요. amount, orderId, couponAmount, pointAmount 등을 검증할 때 활용해요.
결제 승인 API
가맹점 서버에서 인증된 결제의 승인을 요청할 때 사용하는 토스페이먼츠 API예요.

결제 요청 과정은 어떻게 나뉘나요? 요청·인증·승인

PG사 관점에서 결제 요청은 구매자가 결제할 상품과 금액 등의 정보를 전달받아 결제창을 띄우고, 구매자가 결제 정보를 제출하는 과정이에요.

토스페이먼츠 결제창을 예로 들어볼게요. 구매자가 결제창에서 카드사나 간편결제 등 결제 수단을 선택하고 다음 단계로 넘어가면, 이후 선택한 결제 수단에 따라 인증 절차가 진행돼요.

결제 요청 이후에는 크게 두 가지 단계가 이어져요. 카드사 등 결제 수단 제공자가 진행하는 인증, 그리고 가맹점 서버가 진행하는 결제 승인 요청이에요. 각 단계가 어떤 역할을 하는지 자세히 살펴볼게요.

결제 요청-인증-승인 흐름

1-1. 결제 요청은 무엇인가요?

처리 주체: 구매자·가맹점 Client

결제 요청은 구매자가 상품이나 서비스를 구매하기 위해 결제를 진행하는 과정이에요.

결제창에는 주문서에 입력한 결제 금액 등의 정보가 전달돼요. 구매자는 결제창에서 삼성카드나 애플페이 등 원하는 결제 수단을 선택하고, 필요한 결제 정보를 입력하거나 제출해요.

이렇게 결제 요청이 이루어지면 선택한 결제 수단에 따라 인증 단계로 넘어가요.

결제 요청 단계의 결제 수단 선택, "다음" 버튼 선택

1-2. 결제 인증은 무엇인가요?

카드처리 주체: 카드사 등 결제 수단 제공자사

결제 요청이 이루어지면 선택한 결제 수단에 따라 인증 절차가 진행돼요. 인증은 거래 정보를 확인하고 결제를 진행할 수 있는지 판단하는 과정이에요.

예를 들어 카드 결제에서는 카드 정보나 본인 확인 정보 등을 입력하거나, 카드사 앱에서 추가 인증을 진행할 수 있어요. 카드 번호와 유효기간을 입력하거나 앱카드로 인증하는 과정이 여기에 해당해요.

인증은 선택한 결제 수단과 결제 방식에 따라 진행 절차가 달라질 수 있어요.

결제 요청 후 카드사 창으로 이동 및 인증

인증에 성공하면 토스페이먼츠는 가맹점에서 설정한 성공 리다이렉트 URL로 구매자를 이동시켜요. 이때 결제 승인에 필요한 정보가 URL의 쿼리 파라미터로 전달돼요.

예를 들어 성공 리다이렉트 URL은 다음과 같은 형태예요.

성공 리다이렉트 URL 예시

성공 리다이렉트 URL 예시

https://mystore.com/success?paymentKey=test123&orderId=testoid123&amount=10000

성공 리다이렉트 URL 파라미터
예시 값
의미
paymentKey
test123
결제를 식별하는 값
orderId
testoid123
주문을 식별하는 값
amount
10000
결제 금액

이렇게 결제 요청과 인증까지 마치면 구매자 입장에서는 결제가 끝난 것처럼 느껴질 수 있어요. 하지만 개발자 입장에서는 아직 결제가 완료된 것이 아니에요. 실제 결제를 마무리하려면 승인 요청이 필요해요.

2. 결제 승인은 무엇인가요?

처리 주체: 가맹점 Server → 토스페이먼츠

결제 승인은 인증이 완료된 결제의 승인을 요청하고, 최종 결제 결과를 확인하는 단계예요.

토스페이먼츠 결제 승인 API를 사용하는 경우, 가맹점 서버는 성공 리다이렉트 URL로 전달받은 정보와 서버에 저장해 둔 주문 정보를 검증한 뒤 승인 API를 호출해요. 승인 요청이 정상적으로 처리되고 성공 응답을 받으면 결제가 완료돼요.

결제 승인 요청까지의 데이터 흐름

이 단계에서 가맹점 서버는 결제 승인 응답을 확인하고, 그 결과에 따라 주문 상태를 업데이트하는 등 후속 처리를 진행할 수 있어요.

결제 요청과 승인을 따로 하는 이유는 무엇인가요?

결제 연동 방식에는 결제 요청과 승인 과정을 분리하는 방식과, 두 과정을 한 번에 처리하는 방식이 있어요.

요청과 승인을 한 번에 처리하면 연동 흐름이 간단해 보일 수 있어요. 하지만 결제 결과를 안정적으로 반영하려면 가맹점에서 결과를 처리하고 관리하는 로직을 잘 구현해야 해요.

예를 들어 결제 처리 중 구매자가 결제창을 닫거나 가맹점 서버에 장애가 발생하면, 실제 결제 결과와 쇼핑몰의 주문 상태가 서로 다르게 기록될 가능성이 있어요. 결제 결과를 전달하는 웹훅이 여러 번 전송되더라도 가맹점 서버에서 이를 정상적으로 처리하지 못하면 데이터가 어긋날 수 있죠.

이처럼 결제 결과를 안정적으로 관리하려면 가맹점에서 예외 상황을 고려한 처리를 구현해야 해요.

토스페이먼츠는 결제 요청과 승인 과정을 분리해 가맹점이 승인 전에 결제 정보를 검증하고, 직접 승인 요청을 진행할 수 있도록 해요. 성공 리다이렉트 URL로 전달받은 정보를 바탕으로 서버에서 승인 요청을 진행하기 때문에 결제 정보 검증과 주문 상태 관리 흐름을 명확하게 구성할 수 있어요.

구분
요청과 승인을 한 번에 처리하는 방식
요청과 승인을 분리하는 방식
승인 결과 처리
연동 방식에 따라 승인 결과를 확인하고 처리하는 로직이 필요해요.
성공 리다이렉트 URL로 전달된 정보를 바탕으로 가맹점 서버가 승인 API를 호출해요.
데이터 정합성
결제 결과와 주문 상태가 다르게 기록되지 않도록 예외 상황을 처리해야 해요.
승인 전에 결제 정보를 검증하고 승인 결과에 따라 주문 상태를 관리할 수 있어요.
가맹점에서 할 일
승인 결과를 안정적으로 반영하기 위한 처리 로직을 구현해야 해요.
승인 API 호출과 결과 처리 로직을 구현해야 해요.

요청과 승인을 분리한다고 해서 데이터 정합성 문제가 저절로 사라지는 것은 아니에요. 다만 승인 전에 주문 정보를 검증하고 승인 결과에 따라 후속 처리를 진행할 수 있어, 가맹점에서 결제 흐름을 보다 명확하게 관리하는 데 도움이 돼요.

승인 과정이 없는 PG사도 있나요?

결제 연동 서비스를 이용하면 가맹점에서 인증 결과 처리나 결제 정보 검증 과정을 직접 구현하지 않아도 되는 경우가 있어요.

예를 들어 포트원이나 부트페이처럼 여러 PG사의 결제 수단을 통합해 제공하는 서비스는 결제 연동에 필요한 일부 로직을 대신 처리할 수 있어요. 이 경우 가맹점 개발자 입장에서는 인증 결과 처리나 결제 정보 검증 단계가 별도로 보이지 않을 수 있죠.

하지만 화면에서 해당 단계가 드러나지 않는다고 해서 관련 처리가 필요 없는 것은 아니에요. 결제 결과를 확인하고 주문 정보와 대조하는 로직은 서비스 내부에서 처리되거나 가맹점 연동 방식에 따라 구현되어야 해요.

결제 정보는 어떻게 직접 검증하나요?

토스페이먼츠를 이용할 때 결제 요청과 승인 사이에서 결제 정보를 검증하는 흐름을 알아볼게요.

결제 요청 전 저장부터 승인 전 검증까지의 흐름
순서
단계
설명
1
결제 요청 데이터 임시 저장
결제 요청 전에 주문 정보를 서버에 저장해요.
2
저장한 데이터와 비교·검증
성공 리다이렉트 URL로 전달된 값과 서버에 저장한 주문 정보를 비교해요.
3
결제 승인 요청 데이터 생성
검증이 끝난 정보를 바탕으로 승인 요청 데이터를 만들어요.

결제 요청 전에는 무엇을 저장하나요?

결제 요청 전에는 주문 정보와 최종 결제 금액 등을 서버에 저장해야 해요. 결제 요청 전후에 정보가 바뀌지 않았는지 확인하고, 클라이언트에서 전달된 값을 임의로 조작하는 상황을 방지하기 위해서예요.

예를 들어 주문서에서 쿠폰이나 적립금을 적용했다면, 이를 반영한 최종 결제 금액과 주문 정보를 서버에 저장해 두는 것이 좋아요. 그래야 실제로 사용할 수 없는 쿠폰이나 적립금을 임의로 적용해 결제 금액을 바꾸는 시도를 방지할 수 있어요.

다음 순서대로 진행해 보세요.

  1. 구매자가 주문서에서 '결제하기' 버튼을 눌러요.
  2. 주문서에 입력된 결제 금액과 주문 정보를 서버에 임시 저장해요.
  3. 서버에 결제 정보가 정상적으로 저장되었는지 확인한 뒤 결제를 요청해요.

결제 승인 전에는 무엇을 검증하나요?

결제 요청과 인증이 끝났다면 승인 API를 호출하기 전에 전달받은 정보를 검증해야 해요. 결제 요청 전에 서버에 저장해 둔 정보와 성공 리다이렉트 URL로 전달된 값이 일치하는지 확인하는 방식이에요.

예를 들어 클라이언트에서 결제 금액을 임의로 변경했더라도 서버에 저장된 금액과 비교하면 이를 확인할 수 있어요.

다음 순서로 검증을 진행해 보세요.

  1. 인증 완료 후 성공 리다이렉트 URL로 전달된 값을 확인해요.
  2. 주문 ID를 이용해 결제 요청 전에 서버에 저장한 주문 정보를 불러와요.
  3. 쿠폰과 적립금을 사용할 수 있는지, 최종 결제 금액이 올바른지 확인해요.
  4. 서버에 저장된 결제 금액과 전달받은 금액이 일치하고 다른 검증에도 문제가 없다면 결제 승인을 요청해요.
검증 항목
확인 내용
방지할 수 있는 문제
주문 ID
결제 요청 전에 저장한 주문 정보를 불러올 수 있는지 확인해요.
주문 정보가 잘못 연결되는 문제
적립금·쿠폰
실제로 사용할 수 있는 적립금과 쿠폰인지 확인해요.
사용할 수 없는 적립금이나 쿠폰을 임의로 적용하는 문제
최종 결제 금액
서버에 저장한 금액과 전달받은 결제 금액이 일치하는지 확인해요.
클라이언트에서 결제 금액을 조작하는 문제

이처럼 결제 승인 전 검증을 구현하면 결제 정보가 임의로 변경되는 상황을 방지하고, 주문 정보와 결제 결과를 일관되게 관리하는 데 도움이 돼요.

자주 묻는 질문 (FAQ)

Q. 결제 요청, 인증, 승인은 어떻게 다른가요?

결제 요청은 구매자가 결제창에서 결제 정보를 제출하는 단계이고, 인증은 카드사가 거래가 유효한지 확인하는 단계이며, 승인은 가맹점 서버가 인증된 결제를 카드사에 승인해 달라고 요청하는 단계예요.

Q. 결제 요청에 성공하면 결제가 완료되나요?

아니요, 구매자 입장에서는 끝난 것처럼 보여도 개발자 입장에서는 요청만 마친 거예요. 결제 승인 응답이 성공으로 돌아와야 결제가 완료돼요.

Q. 결제 요청과 승인을 따로 하는 이유는 무엇인가요?

데이터 정합성을 보장하고 가맹점에서 해야 할 일을 줄이기 위해서예요. 한 번에 처리하면 웹훅을 연동해야 하고, 결제창을 닫거나 서버에 트래픽이 몰릴 때 가맹점에서는 결제 실패, PG에는 결제 완료로 남아 데이터가 어긋날 수 있어요.

Q. 승인 과정이 없는 PG사도 있나요?

아니요. 포트원, 부트페이처럼 여러 PG사의 결제 수단을 일괄 제공하는 서비스는 인증 결과 처리와 결제 정보 검증을 내부적으로 구현해 둔 것이라, 가맹점에서 단계가 없는 것처럼 느껴질 뿐 실제 로직이 없는 것은 아니에요.

Q. 결제 승인 전에 결제 정보를 왜 검증해야 하나요?

클라이언트에서 결제 금액을 조작해 승인하는 행위를 방지하기 위해서예요. 결제 요청 전에 저장해 둔 금액과 성공 리다이렉트 URL로 돌아온 결제 금액이 같은지 확인해야 해요.

토스페이먼츠의 모든 콘텐츠는 사업자에게 도움이 될 만한 일반적인 정보를 참고 목적으로 제공하고 있어요. 구체적인 사안에 관한 자문이나 홍보를 위한 콘텐츠가 아니며, 콘텐츠에 포함된 정보의 적법성이나 정확성을 보증하지 않아요. 콘텐츠에서 취득한 정보로 인해 직간접적인 손해가 발생하더라도 법적 책임을 부담하지 않아요.

ⓒ토스페이먼츠, 무단 전재 및 배포 금지

    결제 관련 상담이 필요하다면?토스페이먼츠 도입문의