
1) 주문서 생성 (가맹사)
사용자가 상품을 선택하고 주문하기 버튼을 누르면, 우선 가맹사 서버에서 자체 구현한 주문서 생성 API를 호출하여 주문서를 생성한다.
주문서 생성 API
를 호출하면 서버에서는 주문서 객체를 만들고 해당 주문서 객체의 ID
와 최종결제가격
를 반환해야 한다.이후 결제 플로우에서
ORDER_ID
와 AMOUNT
를 인자로 필요로 하기 때문에 필요하다.- 생성된 주문서 객체의 ID :
ORDER_ID
- 생성된 주문서의 최종결제가격 :
AMOUNT
으로 활용하면 된다.
2) 결제 요청 → 인증
결제 요청
구매자가 상품 또는 서비스를 구매하기 위해 주문서에 결제 요청 정보(상품 정보, 결제 금액 등)를 입력하고 결제 요청을 하는 단계 ”결제하기” 버튼을 선택해 카드사 창이 뜰 때 결제 요청이 된다고 볼 수 있다.

인증
인증은 사용자가 선택한 결제수단의 카드사에서 진행한다. 카드사가 요청받은 결제 정보(신용카드 정보, 결제 금액)을 확인해서 이 거래가 유효하며 결제를 허용해도 되는지 확인하는 과정

인증을 정상적으로 마치면
성공URL
로 관련 파라미터들이 전달된다.
돌아오는 값은 항상paymentKey
,orderId
,amount
,paymentType
네 가지다.
orderId
와amount
는 원래 갖고 있던 값이며,
paymentType
은 결제 타입 정보로, 다음의 3가지 중 하나가 반환됨.NORMAL
(일반결제),BRANDPAY
(브랜드페이),KEYIN
(키인 결제)
paymentKey
값은 카드사 인증을 정상적으로 마칠 때마다 새로 발급되는 값인데, 이 값을 통해 카드 결제를 할 수 있는 것이다.
리다이렉트 시 파라미터 정보
- failUrl로 전달되는 에러종류 : https://docs.tosspayments.com/reference/error-codes#failurl로-전달되는-에러
// 결제 성공 시 https://{ORIGIN}/success?paymentKey={PAYMENT_KEY}&orderId={ORDER_ID}&amount={AMOUNT}&paymentType={PAYMENT_TYPE} // 결제 실패 시 https://{ORIGIN}/fail?code={ERROR_CODE}&message={ERROR_MESSAGE}&orderId={ORDER_ID}
결제 실패를 재현하려면, 결제창을 띄운 상태에서 결제를 취소하면
failUrl
로 리다이렉트 된다.3) 결제 승인
인증된 결제를 카드사에 승인해달라고 요청하는 과정
실제로 결제가 이루어지는 것으로, 이 과정은 가맹사의 백엔드 서버를 통해 요청되는 것이 권장된다.
Client는 가맹사 서버로
최종결제요청 API(가맹사에서 만들어야함)
를 호출하면,가맹사 백엔드 서버에서 주문서 생성 시에 만들어진 정보와, 최종 결제 요청 API 호출 시의 정보가 일치한지 한번 더 검증하고,

두 정보가 서로 일치한다면
paymentKey
를 통해 카드사에 실제 결제 요청을 전송하여 결제가 완료된다.