Whizi 체크아웃에서 카드 거절 또는 결제 실패

빠른 답변

카드가 실제로 거절됐다면 그 거절은 Whizi가 아니라 Stripe를 통해 은행에서 전달된 것이므로, 해결법은 다른 카드를 쓰거나 은행에 문의하는 것입니다. Whizi에는 카드 거절 메시지가 어디에도 없으므로, Whizi 문구가 담긴 오류를 봤다면 그것은 거절이 아닙니다.

짧은 답변

카드가 실제로 거절됐다면 그 거절은 Whizi가 아니라 Stripe를 통해 은행에서 전달된 것이므로, 해결법은 다른 카드를 쓰거나 은행에 전화하는 것입니다. 은행이 애초에 AI 구독 결제를 막는 이유와 여섯 가지 원인 중 무엇에 해당하는지 확인하는 방법은 카드가 거절됐을 때 AI 요금 결제하기에서 다룹니다. Whizi에는 카드 거절 메시지가 어디에도 없습니다. 카드 정보는 Whizi 코드베이스 밖에 있는 Stripe의 호스팅 체크아웃 페이지에 입력되며, Whizi의 Stripe 웹훅 핸들러에는 보여줄 결제 거절 메시지가 없습니다.

그러므로 Whizi 문구가 담긴 오류를 봤다면 그것은 거절이 아닙니다. 아래 문구들 중 하나였을 것이며, 각각 원인과 해결법이 다릅니다.

거절로 착각하기 가장 쉬운 세 가지입니다.

확인한 문구의미해야 할 일
A $1 intro trial has already been used with this payment method.해당 카드가 이미 인트로 체험을 사용했음정상 요금으로 구독하거나, 아직 체험을 사용하지 않은 카드를 쓰세요. 재시도해도 소용없습니다
Pricing is temporarily unavailable.Whizi가 Stripe에서 가격표를 불러오지 못함잠시 기다렸다가 다시 시도하세요. 사용자 쪽에서 고칠 방법은 없습니다
Failed to create Stripe checkout session.체크아웃 호출이 실패했고 백엔드가 메시지를 제공하지 않음한 번 더 시도하세요. 계속되면 지원팀에 문의하세요

Whizi 백엔드가 체크아웃에서 반환하는 모든 오류

이 오류들은 서버에서 오므로 HTTP 상태와, 지원팀이 네트워크 추적에서 대조할 수 있는 오류 코드가 함께 옵니다. 모든 백엔드 오류 본문은 {"error": {"code": "...", "message": "..."}} 형태의 JSON이므로 코드가 메시지 옆에 나란히 있습니다. 아래 표는 HTTP 상태 순으로 정렬되어 있습니다.

메시지HTTP코드발생 조건
A plan and billing cycle are required.400invalid_checkout_request체크아웃 요청 본문을 파싱할 수 없었음
Invalid plan or billing cycle.400invalid_plan_or_cycle플랜 또는 주기가 알려진 Stripe 가격에 매핑되지 않음
No subscription item found for the active subscription.400subscription_item_missing항목이 없는 구독에 대해 즉시 적용 플랜 변경이 실행됨
The supplied discount must be an active 100% promotion code or coupon ID.400invalid_discount입력한 코드가 활성 상태의 100퍼센트 프로모션 코드나 쿠폰 ID가 아님
Temporary email addresses are not allowed. Please use a permanent email address.400disposable_email_blocked로그인한 계정의 이메일이 일회용 도메인 목록에 있음
A $1 intro trial has already been used with this payment method.403duplicate_trial_payment_method카드 지문이 이미 인트로 체험을 사용했음
User not found.404not_found체크아웃 경로가 사용자 행을 읽지 못함
Pricing is temporarily unavailable.503pricing_unavailableStripe에서 지역화된 가격표를 읽지 못함

각각에 대한 대처법입니다. 인트로 체험 거절은 아래 별도 항목에서 다룹니다. Pricing is temporarily unavailable.은 서버 쪽 문제로, Stripe에서 지역화된 가격표를 읽지 못할 때 HTTP 503으로 반환되며, 계정 설정으로 바꿀 수 있는 부분이 없습니다. Failed to create Stripe checkout session.은 애초에 서버 메시지가 아니어서 이유를 밝히지 않는데, 체크아웃 호출이 실패하고 백엔드가 메시지를 제공하지 않았을 때 표시되는 웹사이트 자체의 대체 문구입니다. 두 경우 모두 기다렸다가 다시 시도하는 수밖에 없습니다.

A plan and billing cycle are required.Invalid plan or billing cycle.는 모두 요청에 서버가 인식하는 플랜 정보가 없었다는 뜻입니다. 오래됐거나 수정된 체크아웃 링크를 재사용하지 말고, 가격 페이지에서 플랜과 월간/연간 전환 버튼을 다시 선택해 처음부터 시작하세요.

User not found.는 세션이 서버가 읽을 수 없는 사용자 행을 가리키고 있다는 뜻입니다. 로그아웃 후 다시 로그인하고 체크아웃을 다시 시작하세요.

No subscription item found for the active subscription.는 최초 구매가 아니라 플랜 변경 중에 발생하며, 화면에서 직접 고칠 수 없습니다. 지원팀에 문의하세요.

체크아웃이 열리기도 전에 웹사이트가 보여주는 오류

이 오류들은 서버가 아니라 브라우저에서 발생하므로 HTTP 코드가 없습니다. 모두 큰 틀에서 같은 의미로, Whizi가 계정을 Stripe로 넘길 준비를 하던 중 무언가 실패했다는 뜻이며, 이 경우 결제는 시도조차 되지 않았습니다.

메시지발생 조건
Failed to create Stripe checkout session.체크아웃 호출이 실패했고 백엔드가 메시지를 제공하지 않음
Could not open checkout. Please try again.업그레이드 모달의 체크아웃 호출이 메시지 없이 오류를 냄
Authentication failed. Please sign in again.체크아웃 전에 토큰 조회가 아무 값도 반환하지 않음
Failed to save user before checkout.체크아웃 전 사용자 저장 호출이 정상 응답이 아니었음
Could not prepare your account for checkout.가격 페이지가 체크아웃 전에 사용자를 저장하지 못함
Missing user or Stripe customer details.체크아웃 시점에 사용자 ID가 없었음
Checkout response did not include a Stripe URL.체크아웃은 성공했지만 URL도 구독 ID도 반환되지 않음
Something went wrong while starting your trial. Please try again.가격 페이지의 일반적인 체험 시작 실패 메시지

이 목록의 어떤 항목이든, 로그아웃 후 다시 로그인하고 가격 페이지에서 체크아웃을 다시 시작하세요. 이렇게 하면 체크아웃 전에 토큰 조회가 아무 값도 반환하지 않은 경우, 즉 Authentication failed. Please sign in again.이 알리는 상황이 해결됩니다.

Checkout response did not include a Stripe URL.는 예외입니다. 이는 호출이 성공했다는 뜻이므로, 다시 결제를 시도하기 전에 계정 설정을 열어 구독이 이미 있는지 확인하세요.

플랜을 먼저 고르고 나중에 인증하는 경우, 로그인 및 가입 페이지에서 두 가지가 더 나타납니다. Signed in, but checkout could not start. Please choose your plan again.Your account was created, but checkout could not start. Please sign in and choose your plan again.입니다. 둘 다 계정 처리는 성공했고 그 다음 단계인 인계만 실패했다는 뜻입니다. 계정은 이미 존재하므로, 가격 페이지로 가서 플랜을 다시 선택하세요.

원인이 알기 힘든 실패가 하나 더 있습니다. 체크아웃을 연달아 여러 번 재시도하면 속도 제한에 걸릴 수 있으며, 이때 HTTP 429와 Too many requests. Please wait and try again.가 반환됩니다. 어떤 경로든 계정에 대한 모든 요청은 분당 30회 상한에 함께 집계됩니다. 다시 클릭하는 대신 1분 정도 기다리세요.

재시도로도 풀리지 않는 인트로 체험 거절

A $1 intro trial has already been used with this payment method.는 코드 duplicate_trial_payment_method와 함께 HTTP 403으로 나타납니다. 이 페이지의 체크아웃 오류 중 재시도로 절대 풀리지 않는 유일한 것입니다.

이 확인은 계정이 아니라 카드에 귀속됩니다. 카드 지문이 이미 인트로 체험을 사용한 경우 거절이 반환됩니다.

이 오류를 검색할 때 알아둘 점이 있습니다. 인트로 결제 자체는 미화 $0.99이지만, 문구에는 실제로 "$1"이라고 표시됩니다. 서버가 그대로 보내는 형태가 "$1"이므로, 문구 그대로 대조하세요.

선택지는 두 가지입니다. 원하는 플랜을 정상 요금으로 구독하거나, 이전에 체험을 사용한 적 없는 결제 수단으로 결제하세요.

플랜 가격, 체험 조건, 전환 시 일어나는 일은 모두 요금제, 체험판, 해지 방법에서 다룹니다.

결제는 완료됐지만 계정은 아직 무료 플랜인 경우

결제는 이뤄졌는데 계정이 여전히 무료처럼 동작하는 것은 체크아웃 실패와는 다른 증상이며, 별도의 페이지에서 다룹니다.

그 상태에서 나타나는 문구, 어느 계정이 구독을 보유하고 있는지 확인하는 방법, 지원팀에 보낼 내용은 결제했는데 플랜 기능이 잠겨 있어요에서 확인하세요.

Whizi가 알려줄 수 없는 것

존재하지 않는 답을 찾느라 시간을 쓰지 않도록, 세 가지 빈틈을 짚어 둡니다.

Whizi는 은행이 카드를 왜 거절했는지 절대 알 수 없습니다. 그 과정이 Whizi 코드베이스 밖에 있는 Stripe의 호스팅 체크아웃 페이지에서 이뤄지기 때문입니다. Whizi의 두 저장소를 전부 훑어봐도 카드 거절이나 결제 거절 관련 문구는 어떤 형태로도 없었고, Stripe 웹훅 핸들러에도 결제 거절 메시지가 없습니다. 그러므로 계정에 저장된 거절 사유도, 재시도 버튼도, Whizi가 바꿀 수 있는 것도 없습니다. 사유는 은행에 있습니다.

Whizi에는 갱신 실패나 연체에 대한 메시지도 없습니다. 두 저장소 어디에도 사용자에게 보여주는 관련 문구가 없으므로, 나중에 갱신 결제가 실패해도 그것을 설명하는 Whizi 오류는 뜨지 않습니다. 갱신과 관련해 존재하는 유일한 알림은 계정이 무료 등급으로 동기화될 때 RevenueCat 웹훅이 보내는 푸시 알림으로, 제목은 "Whizi subscription updated"이고 내용은 "Your subscription is no longer active."입니다. 이는 RevenueCat 웹훅 경로이므로 Stripe 갱신 실패를 알리는 것이 아닙니다.

Whizi 결제는 Stripe를 통해 처리되므로, 애초에 어떤 카드로 결제할 수 있는지는 Whizi가 아니라 Stripe 쪽에서 결정됩니다. 러시아나 이란 카드로는 등록을 완료할 수 없습니다. 우크라이나, 카자흐스탄, 튀르키예, 인도네시아, 인도 카드는 처음부터 끝까지 문제없이 동작합니다.

체크리스트
  • 실제 카드 거절은 Whizi가 아니라 Stripe를 통한 은행에서 옵니다
  • Whizi에는 카드 거절 메시지도, 보여줄 거절 사유도 없습니다
  • Whizi 문구가 담긴 오류라면 그것은 거절이 아닙니다
  • 세션 오류는 로그아웃 후 재로그인하고 가격 페이지에서 다시 시도하면 해결됩니다
  • Pricing is temporarily unavailable는 서버 쪽 문제이니 반복 재시도 대신 기다리세요
  • 인트로 체험은 계정이 아니라 카드 지문에 귀속됩니다
  • 결제는 됐는데 아직 무료 플랜인 것은 다른 증상이며 subscription-not-active 문서에서 다룹니다

자주 묻는 질문

Whizi에서는 결제가 실패했다고 나오는데 은행에는 시도 기록이 없는 이유는 무엇인가요?

본 문구는 Stripe에 도달하기도 전에 웹사이트가 띄운 것이므로 결제 시도 자체가 없었기 때문입니다. 실제 백엔드 거절과 구분하는 빠른 방법은, 백엔드 거절은 pricing_unavailable이나 invalid_plan_or_cycle 같은 오류 코드를 담은 JSON으로 오고 네트워크 추적에서 HTTP 상태가 보인다는 점입니다. 브라우저 쪽 문구에는 둘 다 없습니다. 코드가 없는 문구를 봤다면 은행에는 아무것도 도달하지 않은 것입니다.

A $1 intro trial has already been used with this payment method.는 무슨 뜻인가요?

입력한 카드가 이미 인트로 체험을 사용했다는 뜻입니다. 거절이 아닙니다. Whizi에는 카드 거절 문구가 아예 없으며, 이 메시지는 Whizi 자체 체크아웃 경로에서 코드 duplicate_trial_payment_method와 함께 HTTP 403으로 옵니다. 문의할 때 함께 적어두면 도움이 됩니다. 정상 요금으로 구독하거나, 아직 체험을 사용하지 않은 결제 수단을 쓰세요.

Pricing is temporarily unavailable.가 떴는데, 제 카드가 문제인가요?

아닙니다. 이는 HTTP 503 pricing_unavailable이며, 카드를 받는 체크아웃 경로가 아니라 Stripe에서 지역화된 가격표를 읽어오는 경로에서 발생합니다. 사용자 쪽에서 고칠 방법은 없으므로 다른 카드를 시도하기보다 기다리세요. 대신 Failed to create Stripe checkout session.을 봤다면 이는 원인이 다른 별개의 문구로, 체크아웃 호출이 실패하고 백엔드가 메시지를 제공하지 않았을 때 나오는 웹사이트의 대체 문구입니다.

프로모션 코드가 거부됐어요. 왜 그런가요?

체크아웃은 The supplied discount must be an active 100% promotion code or coupon ID.를 HTTP 400 invalid_discount로 반환합니다. 체크아웃의 할인 필드는 활성 상태의 100퍼센트 프로모션 코드나 쿠폰 ID만 받으므로, 만료된 코드나 부분 할인 코드는 거부됩니다. 지금 바로 이용하려면 코드를 지우고 정상 가격으로 결제하세요.

Whizi가 체크아웃에서 제 이메일을 거부했어요. 무슨 일인가요?

Temporary email addresses are not allowed. Please use a permanent email address.를 본 것입니다. 로그인한 계정의 이메일 도메인이 일회용 목록에 있을 때 체크아웃 경로가 HTTP 400 disposable_email_blocked로 반환합니다. 같은 문구가 가입 시에는 HTTP 403으로 쓰입니다. 계정에 영구적인 주소를 사용하면 체크아웃이 진행됩니다.

결제가 두 번 됐어요. 어떻게 해야 하나요?

무작정 해지하지 말고 Stripe 영수증 두 건을 모두 첨부해 지원팀에 문의하세요. 해지는 결과가 별개인 다른 조치입니다. 활성 구독의 경우 해지 경로는 Subscription cancellation scheduled for end of billing period.라고 응답하며, 이미 결제한 기간이 끝날 때까지 구독이 유지됩니다.