簡潔な回答
もし本当にカードが拒否された場合、その拒否はWhiziではなく、Stripeを通じてあなたの銀行から届いたものです。そのため対処法は別のカードを使うか、銀行に連絡することです。銀行がそもそもAIサブスクリプションの支払いをブロックする理由と、6つの原因のうちどれに当てはまるかの見分け方は、カードが拒否されたときのAI利用料の支払い方にまとめています。Whiziには「カード拒否」というメッセージはどこにも存在しません。カード情報はWhiziのコードベースの外にあるStripeのホスト型チェックアウトページで入力され、WhiziのStripe Webhookハンドラーにも表示すべき拒否メッセージはありません。
そのため、Whizi側の文言でエラーが表示された場合、それは拒否ではありません。以下のいずれかの文字列であり、それぞれ原因も対処法も異なります。
拒否と最も間違えやすい3つのケース:
| 表示された内容 | 意味 | 対処法 |
|---|---|---|
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. | 400 | invalid_checkout_request | チェックアウトの本文を解析できませんでした |
Invalid plan or billing cycle. | 400 | invalid_plan_or_cycle | プランまたは周期が既知のStripe価格に対応していません |
No subscription item found for the active subscription. | 400 | subscription_item_missing | アイテムのないサブスクリプションに対してプラン変更が実行されました |
The supplied discount must be an active 100% promotion code or coupon ID. | 400 | invalid_discount | 指定されたコードが有効な100%割引のプロモーションコードまたはクーポンIDではありません |
Temporary email addresses are not allowed. Please use a permanent email address. | 400 | disposable_email_blocked | サインイン中のアカウントのメールが使い捨てドメインの一覧に含まれています |
A $1 intro trial has already been used with this payment method. | 403 | duplicate_trial_payment_method | そのカードのフィンガープリントはすでにイントロ体験版を利用済みです |
User not found. | 404 | not_found | チェックアウトのルートがあなたのユーザー行を読み込めませんでした |
Pricing is temporarily unavailable. | 503 | pricing_unavailable | ローカライズされた価格表をStripeから読み込めませんでした |
それぞれの対処法です。イントロ体験版の拒否については以下に専用のセクションがあります。Pricing is temporarily unavailable.はサーバー側の問題で、HTTP 503が返され、ローカライズされた価格表をStripeから読み込めないときに発生し、あなたのアカウント側で変えられる設定はありません。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.は例外です。これは呼び出しが成功したことを意味します。再度支払おうとする前に、アカウント設定を開いて、すでにサブスクリプションが存在していないか確認してください。
サインインページとサインアップページでは、先にプランを選んでから後で認証した場合にもう2つのメッセージが表示されます。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.です。どちらもアカウント部分はうまくいき、引き渡しだけが失敗したことを意味します。あなたのアカウントは存在しています。価格ページに行き、再度プランを選んでください。
もう1つ、原因不明の失敗が起きるケースとして、チェックアウトを何度も連続して再試行するとレート制限に引っかかり、HTTP 429とToo many requests. Please wait and try again.が返ることがあります。ルートを問わず、アカウントへのすべてのリクエストは1分あたり30件という上限に対してカウントされます。もう一度クリックするのではなく、1分待ってください。
どれだけ再試行しても解消しないイントロ体験版の拒否
A $1 intro trial has already been used with this payment method.はHTTP 403、コードはduplicate_trial_payment_methodです。このページに載っているチェックアウトエラーの中で、再試行しても絶対に解消しない唯一のものです。
このチェックは、アカウントではなくカードに紐づいています。拒否は、そのカードのフィンガープリントがすでにイントロ体験版を利用済みの場合に返されます。
このエラーを検索している方への補足です。イントロの請求額自体は米ドルで$0.99なのに、この文字列は本当に「$1」と表記されます。サーバーが送ってくるのは正確にこの「$1」の形なので、文言そのもので照合してください。
選べる方法は2つです。希望のプランを通常料金で申し込むか、まだ体験版を利用していない支払い方法で支払うかです。
プランの料金、体験版の条件、そして更新時に何が起こるかは、すべて請求、体験版、解約方法にまとめています。
支払いは完了したのにアカウントがまだ無料プランのまま
課金されたカードがあるのにアカウントがまだ無料プランのように振る舞う場合、これはチェックアウトの失敗とは別の症状であり、専用のページがあります。
その状態で表示される文字列、どのアカウントがサブスクリプションを持っているかを確認する方法、サポートに何を送ればよいかについては、支払ったのにプランの機能がまだロックされているをお読みください。
Whiziにはわからないこと
3つの盲点をまとめます。存在しない答えを探して時間を無駄にしないためです。
Whiziはあなたの銀行がなぜカードを拒否したのかを一切知りません。そのやり取りはWhiziのコードベースの外にあるStripeのホスト型チェックアウトページで行われるためです。Whiziの両方のリポジトリを調べても、あらゆる種類の「カード拒否」や「支払い拒否」の文字列は見つからず、StripeのWebhookハンドラーにも拒否メッセージは一切ありません。つまりあなたのアカウントには保存された拒否理由もなく、再試行ボタンもなく、Whiziが上書きできるものも何もありません。理由は銀行側にあります。
Whiziには失敗または延滞した更新に対するメッセージもありません。どちらのリポジトリにもユーザー向けの文字列は存在しないため、後で更新の請求が失敗しても、Whiziからそれを説明するエラーは表示されません。更新に関連する唯一の通知は、RevenueCatのWebhookがアカウントを無料プランに同期させたときに送られる、「Whiziのサブスクリプションが更新されました」というタイトルで「お使いのサブスクリプションは現在有効ではありません。」と表示されるプッシュ通知です。これはRevenueCatのWebhook経由の通知であり、Stripeの更新失敗を報告するものではありません。
Whiziの請求はStripe経由で行われるため、どのカードがそもそも支払い可能かはWhiziではなくそちら側で決まります。ロシアやイランのカードでは登録を完了できません。ウクライナ、カザフスタン、トルコ、インドネシア、インドのカードは問題なく機能します。
- 本当のカード拒否は、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.とはどういう意味ですか?
A $1 intro trial has already been used with this payment method.とはどういう意味ですか?入力したカードがすでにイントロ体験版を利用済みという意味です。これは拒否ではありません。Whiziには「カード拒否」の文字列がそもそも存在せず、これはWhizi自身のチェックアウトルートからHTTP 403、コードduplicate_trial_payment_methodとして返されるもので、問い合わせる際に引用しておく価値があります。通常料金で申し込むか、まだ体験版を利用していない支払い方法を使ってください。
Pricing is temporarily unavailable.と表示されました。カードに問題があるのですか?
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として使われます。アカウントに恒久的なアドレスを設定すれば、チェックアウトは進みます。
2回課金されました。どうすればよいですか?
むやみに解約せず、両方のStripeの領収書を添えてサポートに連絡してください。解約は別の操作であり、結果も別です。有効なサブスクリプションの場合、解約ルートはSubscription cancellation scheduled for end of billing period.と返すため、そのサブスクリプションはすでに支払い済みの期間の終わりまで有効に動きます。