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 が自動で設定されます。状態は次の手順で確認します。
- 「WooCommerce → 設定 → 決済 → Stripe」を開く
- 「アカウント詳細(Account details)」の「Configure connection」を押す
- 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 のサポートに、注文番号とログの該当部分を添えて問い合わせます。