단건 결제 플로우 이해

Tags
 
 
notion image
 
 

1) 주문서 생성 (가맹사)

사용자가 상품을 선택하고 주문하기 버튼을 누르면, 우선 가맹사 서버에서 자체 구현주문서 생성 API를 호출하여 주문서를 생성한다.
주문서 생성 API를 호출하면 서버에서는 주문서 객체를 만들고 해당 주문서 객체의 ID최종결제가격를 반환해야 한다.
이후 결제 플로우에서 ORDER_IDAMOUNT를 인자로 필요로 하기 때문에 필요하다.
 
  • 생성된 주문서 객체의 ID : ORDER_ID
  • 생성된 주문서의 최종결제가격 : AMOUNT
으로 활용하면 된다.

2) 결제 요청 → 인증

결제 요청

구매자가 상품 또는 서비스를 구매하기 위해 주문서에 결제 요청 정보(상품 정보, 결제 금액 등)를 입력하고 결제 요청을 하는 단계 ”결제하기” 버튼을 선택해 카드사 창이 뜰 때 결제 요청이 된다고 볼 수 있다.
notion image

인증

인증은 사용자가 선택한 결제수단의 카드사에서 진행한다. 카드사가 요청받은 결제 정보(신용카드 정보, 결제 금액)을 확인해서 이 거래가 유효하며 결제를 허용해도 되는지 확인하는 과정
notion image
 
인증을 정상적으로 마치면 성공URL로 관련 파라미터들이 전달된다.
notion image
돌아오는 값은 항상 paymentKeyorderIdamountpaymentType 네 가지다.
  • orderIdamount는 원래 갖고 있던 값이며,
  • paymentType은 결제 타입 정보로, 다음의 3가지 중 하나가 반환됨.
    • NORMAL(일반결제), BRANDPAY(브랜드페이), KEYIN(키인 결제)
  • paymentKey 값은 카드사 인증을 정상적으로 마칠 때마다 새로 발급되는 값인데, 이 값을 통해 카드 결제를 할 수 있는 것이다.

리다이렉트 시 파라미터 정보

// 결제 성공 시 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 호출 시의 정보가 일치한지 한번 더 검증하고,
notion image
두 정보가 서로 일치한다면 paymentKey를 통해 카드사에 실제 결제 요청을 전송하여 결제가 완료된다.