피드로 돌아가기
Dev.toBackend
원문 읽기

Charge-then-Refund 안티패턴 제거를 통한 결제 신뢰도 및 UX 개선
Stop refunding payments you should never have charged
AI 요약
Context
결제 즉시 과금 후 주문 검증을 수행하는 구조로 인해 검증 실패 시 환불을 처리하는 아키텍처 채택. 환불 처리 과정에서 발생하는 5~10일의 정산 지연과 외환 환율 변동으로 인한 고객 불만 및 카드 네트워크의 리스크 신호 발생 문제 직면.
Technical Solution
- PaymentIntent 설정의 capture_method를 manual로 변경하여 즉시 과금 대신 Authorization 홀딩 구조 설계
- Authorization과 Capture 단계를 분리하여 비즈니스 로직 검증 단계(Stock check, Fraud detection 등)를 그 사이에 배치
- 검증 성공 시에만 capture API를 호출하여 실제 자금 이동을 실행하고, 실패 시 cancel API로 홀딩 금액을 즉시 해제하는 워크플로우 구축
- 부분 캡처(Partial Capture) 기능을 활용해 품절 상품을 제외한 실제 주문 금액만 과금하는 유연한 정산 로직 구현
- 최대 7일간 유지되는 Authorization 윈도우를 통해 동기 및 비동기 검증 프로세스의 안정성 확보
실천 포인트
- 결제 완료 후 실행되는 비즈니스 로직(재고 확인, 주소 검증 등)이 존재하는지 확인 - 즉시 과금 후 환불(Refund) 처리 방식 대신 '선 승인 후 캡처(Authorize-then-Capture)' 모델 적용 검토 - 부분 캡처 가능 여부를 확인하여 품절 발생 시 사용자 경험 최적화 방안 수립 - 사용 중인 PG사(Stripe, Adyen, Braintree 등)의 Manual Capture 지원 여부 및 홀딩 기간 확인