수동 재시기는 결제 세부정보 페이지 또는 API에서 요청하는 즉시 실패한 구독 갱신 결제를 다시 시도합니다. 구독에 저장된 결제 수단으로 요금이 청구되며, 자동 Payment Retries 일정과는 독립적으로 실행됩니다.
수동 재시도란 무엇인가요?
갱신 결제가 실패하면 구독은on_hold 상태로 전환되고, Payment Retries는 백오프 일정에 따라 청구를 다시 시도합니다. 고객이 계정에 금액을 충전했다고 확인했거나 지원팀이 고객과 통화 중인 경우처럼 지금 결제가 성공할 것이라는 사실을 알고 있을 때도 있습니다. 수동 재시기를 사용하면 다음 예약된 재시도를 몇 시간 또는 며칠 동안 기다리는 대신 즉시 한 번 시도할 수 있습니다.
- 갱신 결제만 해당: 수동 재시도는 구독이
on_hold상태인 동안 구독 갱신 인보이스에 적용됩니다. 최초 결제, 일회성 결제, 플랜 변경 요금 및 주문형 요금은 대상이 아닙니다. - 고객 조치 불필요: 구독에 이미 저장된 결제 수단으로 요금이 청구됩니다.
- 자동 재시도와 독립적: 수동 재시도는 자동 일정의 시도 횟수를 차감하지 않고, 다음 예약된 재시기를 변경하지 않으며, Payment Retries가 꺼져 있어도 작동합니다.
- 결제가 아닌 인보이스 재시도: 실패한 결제는 시작점일 뿐입니다. Dodo Payments는 해당 결제와 연결된 미결제 갱신 인보이스를 조회하고 그 채무를 청구하므로, 인보이스에서 어떤 실패한 결제를 통해 재시도했는지는 중요하지 않습니다.
대시보드에서 재시도
1
Open the failed payment
Transactions → Payments로 이동한 다음 실패한 갱신 결제를 클릭하여 Transaction details 페이지를 엽니다.
2
Click Retry Payment Manually
오른쪽 상단에서 Retry Payment Manually를 클릭합니다. 이 버튼은 결제가 eligible 상태인 동안에만 사용할 수 있습니다.
3
Check the result
시도를 위한 새 결제가 생성되고 Activity Log에 표시됩니다. 청구에 성공하면 구독은
active 상태로 돌아가고 다음 청구일이 정상적으로 갱신됩니다. 결제 프로세서가 아직 청구를 정산하지 않은 경우, payment.succeeded 또는 payment.failed webhook이 결과를 보고할 때까지 결제는 진행 중으로 표시됩니다.
Retry Payment Manually on the transaction details page of a failed renewal
자격 요건
아래의 모든 확인 항목을 통과한 경우에만 수동 재시도가 전송됩니다. Reason code 열은 API가 반환하는 값입니다.GET /payments/{payment_id}/retry에서는 reason로, POST /payments/{payment_id}/retry에서는 code 오류로 반환됩니다.
수동 재시도는 한 가지 측면에서 자동 재시도보다 더 제한적입니다. 구독이
on_hold 상태여야 합니다. 자동 재시도는 다른 비활성 상태에서도 계속 실행됩니다. 자세한 내용은 Subscription Status Transitions를 참고하세요.재시도 한도
각 갱신 인보이스에서는 재시도 사이에 쿨다운을 두고 수동 재시도를 3회 허용합니다.
한도는 test mode와 live mode 모두에 적용됩니다. 이 사유로 재시도가 거부되면 API는
MANUAL_RETRY_LIMIT_REACHED (HTTP 429)를 반환합니다. 오류 본문에는 code과 message만 포함됩니다. 다음 재시도가 언제 가능해지는지 알아보려면 재시도 상태 확인을 수행하고 retry_available_at를 읽으세요. 세 번의 재시도를 모두 사용하면 null입니다.
자동 재시도는 이 한도에 포함되지 않으며, 수동 재시도도 자동 일정의 8회 시도에 포함되지 않습니다.
수동 재시도와 자동 재시도 비교
API를 통한 재시도
먼저 자격 요건을 확인한 다음 재시도를 전송하세요. 두 엔드포인트 모두 실패한 결제의 ID를 받습니다.결제 재시도 가능 여부 확인
GET /payments/{payment_id}/retry는 자격 요건을 충족하지 않는 결제에 대해 실패하지 않습니다. 대신 reason 코드와 함께 can_retry: false를 반환하므로, 대시보드 또는 지원 도구에서 Dodo Payments 대시보드와 동일한 상태를 표시할 수 있습니다. 이 작업에는 Viewer 역할이 필요합니다.
Response
수동 재시도 전송
POST /payments/{payment_id}/retry는 새 결제를 생성하고 저장된 결제 수단으로 요금을 청구합니다. 이 작업에는 Editor 역할이 필요합니다.
Response
오류 응답
모든 코드는 Error Codes 레퍼런스에 설명되어 있습니다.
Webhooks
수동 재시도는 일반 결제를 생성하므로 다른 갱신 시도와 동일한 webhook이 실행됩니다.
이 이벤트의 결제 객체에서
retry_attempt는 1 이상이고 subscription_id가 설정됩니다. 이는 자동 재시도와 동일합니다. 수동 시도와 예약된 시도를 구분해야 하는 경우 재시도 응답의 payment_id를 저장하세요.
Payment Webhook Payloads
결제 이벤트의 전체 payload 스키마입니다.
관련 문서
Subscription Payment Retries
수동 재시도와 함께 실행되는 자동 백오프 일정입니다.
Subscription Dunning
hard decline 후 고객에게 결제 수단을 업데이트하도록 이메일을 보냅니다.
Handle Payment Failures
거절 코드를 확인하고 재시도할 가치가 있는 시점을 판단합니다.
Error Codes
각
MANUAL_RETRY_* 코드, 해당 트리거 및 메시지입니다.