
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를 통해 카드사에 실제 결제 요청을 전송하여 결제가 완료된다.