결제가 실패하면 Dodo Payments은 표준화된
error_code와 사람이 읽을 수 있는 error_message를 통해 실패 이유를 알려줍니다. 이 가이드에서는 이러한 필드를 읽고, 재시도할 가치가 있는지 판단하며, 고객에게 민감한 정보를 노출하지 않고 결제를 복구하는 방법을 설명합니다.Dodo Payments이 실패를 보고하는 방식
일회성 checkout이든 구독 갱신이든 모든 실패한 결제에는 payment object에 동일한 실패 필드가 포함됩니다.결제가 실제로 실패하기 전까지
error_code와 error_message는 null입니다. 먼저 항상 status을 확인한 다음 오류 필드를 읽으세요.payment.failed webhook
실패를 감지하는 가장 안정적인 방법은 payment.failed webhook입니다. 이 event는 전체 payment object를 data에 포함합니다:
payment.failed payload
error_code을 읽고 해당 값에 따라 라우팅합니다:
재시도 여부 결정: 소프트 거절과 하드 거절
error_code은 동일한 payment method로 재시도할 가치가 있는지 알려줍니다.
Transaction Failures reference에는 모든
error_code의 거절 유형과 권장 조치가 정리되어 있습니다.
checkout과 갱신 시 실패 처리
복구 방법은 고객이 현재 उपस्थित한 상태인지에 따라 달라집니다.- At checkout (customer present)
- On subscription renewal (customer not present)
고객이 checkout을 진행 중입니다. 명확한 메시지를 표시하고 즉시 재시도하거나 다른 card를 사용할 수 있도록 하세요.
requires_payment_method— 고객이 payment method를 제공하지 않았습니다. card details를 입력하지 않았거나, 입력하라는 안내를 받았지만 아무 작업도 하지 않은 경우입니다. 이는 일반적으로 거절이 아니라 checkout 이탈입니다. 결제를 완료하도록 고객에게 다시 참여를 유도하세요(Abandoned Cart Recovery 참조).requires_customer_action— 추가 authentication(예: 3DS)이 필요합니다. 고객이 이를 완료하도록 안내하세요. 3D Secure handling을 참조하세요.
실패한 결제 재시도
- Subscriptions: Subscription Payment Retries를 활성화하면 별도의 integration 작업 없이 소프트 거절을 복구할 수 있습니다. 또한 Update Payment Method API를 통해 고객이 payment method를 업데이트하도록 하여 복구를 트리거할 수도 있으며, 이 경우 미납금이 청구됩니다.
- One-time payments: 고객이 다른 payment method로 다시 시도할 수 있도록 checkout 또는
payment_link을 다시 보내세요. 일회성 결제에는 자동 재시도가 없습니다.
고객에게 오류를 안전하게 표시하기
고객에게 친절한 메시지를 표시하고, 원시error_code은 절대 표시하지 마세요.
Customer-facing messaging
관련 문서
Transaction Failures
모든 거절 코드와 해당 유형 및 권장 조치입니다.
Error Codes
card 거절이 아닌 API 및 business logic 오류입니다.
Subscription Payment Retries
구독 갱신 시 소프트 거절을 자동으로 복구합니다.
Subscription Dunning
하드 거절을 복구하는 이메일 sequence입니다.
Payment Webhooks
payment event의 전체 payload schema입니다.
Testing Failures
거절 및 갱신 실패를 시뮬레이션하는 test card입니다.