2026年8月26日

2026年8月26日

WooCommerce Stripeのエラーの直し方|接続・Webhook・3Dセキュア・返金の確認手順

WooCommerce で Stripe を使うときの公式拡張機能「WooCommerce Stripe Payment Gateway」で起きる問題は、多くが「Stripe アカウントとの接続」「Webhook(Stripe からサイトへの通知)」「テストモードと本番モードの取り違え」のどれかに当たります。この記事では、症状から原因を絞り込み、拡張機能の設定画面とログで確かめる手順を説明します。

画面の名前や手順は、2026年10月時点の WooCommerce.com の公式ドキュメント(Stripe 拡張機能)に合わせています。管理画面が英語表示の場合の名前を併記しています。

症状と確認する場所

症状 主な原因 見る項目
チェックアウトでカードが拒否される カード会社の判断、カード情報の誤り 2・3
決済は Stripe に記録されたのに注文が「支払い待ち」のまま Webhook が届いていない、検証に失敗している 4
3Dセキュアの認証後に注文が完了しない 認証の中断、Webhook の不着 4・5
管理画面で返金したのに Stripe で返金されていない 「手動で返金」を使った 6
テストでは決済できるのに本番で失敗する(またはその逆) テストモードの設定 1
Stripe の支払い方法がチェックアウトに表示されない 拡張機能が無効、接続が不完全、JavaScript のエラー 1・2

1. 接続状態とテストモードを確認する

設定画面は「WooCommerce → 設定 → 決済 → Stripe」(WooCommerce → Settings → Payments → Stripe)です。公式ドキュメントでは、設定は次のまとまりに分かれています。

まとまり(英語表示) 確認すること
一般(General) 「Enable Stripe」がオンか。「Enable test mode」(テストモード)がオンのままになっていないか
アカウント詳細(Account details) Payment・Payout(アカウントの状態)、Webhook・Sync(接続の状態)が有効になっているか
詳細設定(Advanced settings) 調査中だけ「Log error messages」をオンにする

テストモードがオンの間は、テスト用のアカウントで処理されるため、本物のカードでは決済できず、Stripe の本番側の画面にも記録されません。本番で使うときはオフにします。逆に、テスト用のカード番号は本番モードでは使えません。

「アカウント詳細」の「Configure connection」を押すと、Live(本番)と Test(テスト)それぞれの接続状態が表示されます。状態が「Incomplete」になっている場合は、Stripe アカウントの再認証が必要なことがあります。接続にはサイトが HTTPS で、インターネットから到達できることが前提です。

2. ログを有効にして記録を見る

原因を調べる前に、「詳細設定(Advanced settings)」の「Log error messages」をオンにして、もう一度決済を試します。記録は WooCommerce のログに書かれます。

  • 管理画面の「WooCommerce → ステータス → ログ」(WooCommerce → Status → Logs)を開き、ソースが woocommerce-gateway-stripe のログを選びます。
  • 注文番号でページ内を検索すると、その注文の記録を見つけやすくなります。決済の記録には、注文番号、Payment Intent の ID(pi_ で始まる)、Charge の ID(ch_)、顧客 ID(cus_)、拒否された場合はその理由が含まれます。

チェックアウト画面でカード入力欄が表示されない、読み込みが終わらない場合は、ブラウザーの開発者ツールのコンソールで JavaScript のエラーも確認します。他のプラグインやテーマのスクリプトのエラーで、Stripe の入力欄が動かなくなることがあります。

調査が終わったら「Log error messages」はオフに戻します。

3. カードが拒否される場合

カードが拒否された理由は、ログや Stripe ダッシュボードの支払いの詳細に、Stripe のエラーコードで記録されます。主なものは次のとおりです。

コード 意味 サイト側でできること
card_declined(generic_decline) カード会社が理由を示さずに拒否 購入者に別のカードか、カード会社への確認を案内する
card_declined(insufficient_funds) 残高・利用枠の不足 同上
expired_card 有効期限切れ 有効なカードでの再入力を案内する
incorrect_cvc セキュリティコードの誤り 正しい値での再入力を案内する

これらはカード会社や入力内容によるもので、サイトの設定を変えても直りません。一方、同じエラーがテストモードで出る場合は、テスト用のカード番号を使っているか確認します。Stripe が公開しているテスト用のカード番号のうち、よく使うものは次のとおりです(有効期限は未来の日付、CVC は任意の3桁)。

カード番号 結果
4242 4242 4242 4242 認証なしで成功
4000 0027 6000 3184 毎回3Dセキュアの認証を求められる
4000 0000 0000 0002 拒否(generic_decline)
4000 0000 0000 9995 拒否(insufficient_funds)

4. Webhookが届いているか確認する

Stripe は、決済の成功・失敗や返金などの結果を、Webhook でサイトに通知します。拡張機能は通知を受けて注文の状態を更新するため、Webhook が届かないと、Stripe 側では決済が成功しているのに注文が「支払い待ち」のまま残ります。

Webhookの状態を確認する

公式ドキュメントによると、拡張機能のバージョン 8.6.1 以降は、Stripe に接続したときに Webhook が自動で設定されます。状態は次の手順で確認します。

  1. 「WooCommerce → 設定 → 決済 → Stripe」を開く
  2. 「アカウント詳細(Account details)」の「Configure connection」を押す
  3. Live と Test のそれぞれのタブで、Webhook の状態が「Configured」になっているか確認する

古いバージョンから更新したサイトや、Stripe ダッシュボードで Webhook を削除してしまった場合は、同じ画面の Live と Test の両方のタブで「Reconfigure webhooks」を押します。正しい Webhook が作り直され、サイトを指す古い Webhook は削除されます。

この拡張機能が使う Webhook の送信先は、https://example.com/?wc-api=wc_stripe の形の URL だけです。Stripe ダッシュボードにこれ以外の送信先がある場合は、別の決済プラグインや外部サービスのものと考えられます。

通知がサイトで受け付けられているか

Stripe ダッシュボードでは、Webhook ごとに送信の履歴と、サイトが返したステータスを確認できます。失敗が続いている場合は、サイト側で通知を止めていないかを確認します。

  • サイト全体や /?wc-api=wc_stripe に Basic 認証や IP アドレスの制限をかけていないか
  • セキュリティ系のプラグインや WAF、CDN のファイアウォールが、Stripe からの POST をブロックしていないか
  • メンテナンスモードのプラグインが、ログインしていないアクセスをすべて止めていないか

通知は届いているのに検証で失敗している場合は、ログに Webhook validation failed (理由) と記録されます。理由の部分で原因を見分けます。

ログの理由 意味 対処
signature_mismatch 署名が合わない(Webhook の秘密鍵が違う、同じサイトを指す Webhook が重複している) 「Reconfigure webhooks」で作り直す
empty_secret Webhook の秘密鍵が保存されていない 「Reconfigure webhooks」で作り直す
timestamp_out_of_range 通知の時刻とサーバーの時刻が5分以上ずれている サーバーの時刻合わせ(NTP)を確認する
signature_invalid / empty_headers 署名のヘッダーが届いていない プロキシや WAF がヘッダーを削っていないか確認する

5. 3Dセキュアの認証後に注文が完了しない

3Dセキュア(本人認証)が必要なカードでは、購入者がカード会社の認証画面で操作を終えたあとに決済が確定します。購入者が認証画面を閉じたり、途中で戻ったりした場合、決済は確定せず、注文は「支払い待ち」のまま残ります。これは異常ではありません。

認証を終えたのに注文が更新されない場合は、上の4の Webhook を確認します。テストモードで 4000 0027 6000 3184 を使い、認証画面で承認したときに注文が「処理中」(Processing)など支払い済みの状態になるかで、流れ全体を確かめられます。

サイトは HTTPS で動いている必要があります。証明書の期限切れや、HTTP と HTTPS が混在した設定(サイトアドレスが http:// のままなど)では、認証画面からの戻りや通知がうまく動かないことがあります。

6. 返金がStripeに反映されない

WooCommerce の注文編集画面で「返金」を押すと、金額を入れたあとに2種類のボタンが表示されます。

  • 決済方法を経由して返金するボタン(英語表示では「Refund ¥… via 決済方法の名前」): Stripe に返金を依頼し、結果を注文に記録します。
  • 手動で返金するボタン(「Refund ¥… manually」): WooCommerce の注文に返金の記録を付けるだけで、Stripe には何も送りません。

管理画面で返金したのに購入者のカードに返金されていない場合は、手動のボタンを使っていないか確認します。手動で記録してしまった場合は、Stripe ダッシュボードの支払いの詳細から返金します。Stripe 経由の返金が失敗した場合は、2のログに理由が記録されます。

Stripe ダッシュボードで直接返金した場合も、Webhook が届いていれば WooCommerce の注文に反映されます。

7. それでも解決しないとき

  • Stripe の API に接続できないと、WordPress の管理画面の上部に通知が出ます。公式ドキュメントによると、多くは数分で解消します。続く場合は Stripe のステータスページや、サーバー会社のネットワークの状況を確認します。
  • 拡張機能、WooCommerce、WordPress、PHP を最新に近いバージョンにしてから再現するか確かめます。
  • ログの内容の読み方が分からない場合は、WooCommerce のサポートに、注文番号とログの該当部分を添えて問い合わせます。

関連記事

お気軽にご相談ください

お見積りへ お問い合わせへ
▲