결제 시스템 구축 - 3

  1. 결제 Confirm 구현하기
    1. Confirm 이란?
    2. 결제 Confirm 시퀀스 다이어그램
    3. 결제 상태 프로세스
    4. Idempotency (멱등성)

결제 Confirm 구현하기

Confirm 이란?

결제 수단 등록.png

여기서 말하는 결제 confirm 이란 payment checkout 통해 orderId 값을 이용해서 또한 입력한 카드 정보로 해당 PSP 사로부터

결제 수단 등록 및 결제 등록 하는 행위를 말합니다.

결제 Confirm 시퀀스 다이어그램

결제 Confirm 시퀀스 다이어그램.png

  1. PaymentConfirmApiService 호출 하면 PaymentOrderStatusService 로 호출 통해 주문 상태값을 ‘EXECUTING’ 값으로 변경 합니다.
  2. PaymentMethodCreditCardService 호출 통해 PSP 사에 입력한 카드 정보를 이용해서 결제 수단을 등록 합니다.
  3. 등록된 결제수단 기반으로 HyosungPaymentExecutorService 호출해서 PSP 에 결제 등록을 합니다.
  4. 결제 관련 프로세스가 완료되면 PSP 로부터 응답 값에 따라 PaymentCompleteService 호출해서 결제 관련 정보를 업데이트를 합니다.

결제 상태 프로세스

결제 상태 프로세스.png

Checkout -> Confirm 호출시 실질적으로 해당 PSP 사로부터 결제 수단 등록 및 결제 등록까지 완료해야 거래가 최종 완료 됩니다.
하지만 처리 하는 과정에서 PSP 로부터 결제 승인 실패 하거나 결제 승인 이후 결제 프로세스 상에 Exception 발생 된다면 결제는 최종적으로 실패 하게 됩니다.

실패 이후 ‘재시도’ 를 통해서 이 문제를 해결 할 예정입니다. 이를 위해 결제 상태값을 NOT_STARTED, EXECUTING, SUCCESS, FAILURE, UNKNOWN 분류 하면서 관리 하고자 합니다.

NOT_STARTED -> EXECUTING -> FAILURE

진행 하더라도 다시 재시도 하므로써

FAILURE -> SUCCESS

으로 변경 하고자 합니다.

이렇게 구현하기 위해서는 멱등성을 이용 해야 합니다.

Idempotency (멱등성)

멱등성 처리은 요청이 여러 번 들어와도 딱 한번만 처리하도록 설계하는 방식을 의미 합니다.

멱등성1.png
멱등성2.png

예를 들어 최종 결제 승인을 위해 PSP 에 요청시 결제 승인 이후 내부적으로 Exception 이 발생되거나 그리고 실제로는 결제 승인이 되었지만 PSP 사로부터 응답시

timeout 발생으로 재시도 할 필요가 있습니다. 이때 만약 재시도 하게 된다면 두번 결제 승인 요청을 하지 않도록 해야 합니다. 그래서 멱등성 키 값을 이용해서

PSP 사부터 최초 요청 할때 사용된 멱등성 키 값으로 다시 요청 할 것이고 동일한 키값으로 요청 할 수 없다는 응답을 받게 하므로써 결제 재등록을 방지 하도록 합니다.

결제 관련 데이터 베이스 테이블에 insert 할때도 멱등성 키값을 잘 활용 할 수 있습니다. 멱등성 키값 통해 유니크한 칼럼으로 설정하면 2번 이상 insert 시 무결성 제약 조건으로 인해 실패하게 하도록 합니다.


Copyright 201- syh8088. 무단 전재 및 재배포 금지. 출처 표기 시 인용 가능.

💰

×

Help us with donation