2026年7月21日
2026年7月21日
WooCommerceの決済エラーを解決する方法
はじめに
WooCommerceのチェックアウトページでクレジットカード情報を入力して「注文する」を押したがエラーが出て決済できない・注文が「保留中」から「処理中」に変わらない・Stripeの決済は通っているのにWooCommerceに反映されないといった問題の解決方法を解説します。
症状・原因
- SSL証明書が無効でHTTPS通信でないためStripe等の決済ゲートウェイが動作しない
- WooCommerceのWebhookがStripeから受信できていない(IPN受信エラー)
- セキュリティプラグインがチェックアウトページのPOSTリクエストをブロックしている
- nonce検証エラーがキャッシュプラグインによって引き起こされている
解決手順
ステップ1:決済エラーを診断する
# ✅ WooCommerce のログを確認
ls /var/www/html/wp-content/uploads/wc-logs/
# → stripe-*.log paypal-*.log woocommerce-*.log
# エラーログを表示
tail -50 /var/www/html/wp-content/uploads/wc-logs/stripe-$(date +%Y-%m-%d).log
# ✅ WooCommerce のデバッグモードを有効化
wp option update woocommerce_stripe_settings \
"$(wp option get woocommerce_stripe_settings --format=json --path=/var/www/html/ | \
python3 -c 'import json,sys; d=json.load(sys.stdin); d["logging"]="yes"; print(json.dumps(d))')" \
--format=json --path=/var/www/html/
# ✅ SSL を確認(決済には HTTPS 必須)
curl -sI https://example.com/checkout/ | head -3
# → HTTP/2 200 ← HTTPS で動作中
# ✅ wp-config.php で HTTPS を強制
wp eval "echo is_ssl() ? 'HTTPS: YES' : 'HTTPS: NO';" --path=/var/www/html/
ステップ2:よくある決済エラーを修正する
// ✅ 「Your session has expired」エラーの修正
// キャッシュプラグインがチェックアウトページをキャッシュしている場合
// wp-config.php に追加
define('WOOCOMMERCE_CHECKOUT', true);
// または WooCommerce は自動的にチェックアウトページにDONOTCACHEPAGEを設定する
// ✅ セキュリティプラグインによるブロックの確認
// Wordfence / iThemes Security のファイアウォールログを確認
// → POST /checkout/ が403でブロックされていないか
// ✅ nonce エラーの修正
add_filter('woocommerce_checkout_fields', function($fields) {
// nonce の有効期間を延長(キャッシュ環境での問題対策)
return $fields;
});
// ✅ チェックアウトページをキャッシュ除外に追加
// W3 Total Cache / WP Super Cache の設定で
// /checkout/ を「キャッシュしない URL」に追加
add_filter('wpsupercache_rejected_strings', function($strings) {
$strings[] = 'checkout';
$strings[] = 'cart';
$strings[] = 'my-account';
return $strings;
});
ステップ3:Stripe の決済エラーを修正する
# ✅ Stripe の Webhook を確認
wp option get woocommerce_stripe_settings --format=json --path=/var/www/html/ | \
python3 -c 'import json,sys; d=json.load(sys.stdin); print(d.get("webhook_secret", "NOT SET"))'
# ✅ Stripe Webhook エンドポイントを設定
# Stripe ダッシュボード → Webhooks → エンドポイントを追加
# URL: https://example.com/?wc-api=stripe_webhook
# ✅ Stripe の Webhook をテスト
curl -X POST https://example.com/?wc-api=stripe_webhook \
-H "Content-Type: application/json" \
-d '{"type":"ping"}'
# → 200 OK ← Webhook が受信できている
# ✅ Stripe のテストモードで動作確認
# テストカード番号: 4242 4242 4242 4242 (成功)
# 4000 0000 0000 0002 (拒否される)
# 4000 0025 0000 3155 (3DS認証が必要)
ステップ4:注文ステータスを手動で修正する
# ✅ 保留中の注文を確認
wp wc shop_order list --status=pending --format=table \
--user=1 --path=/var/www/html/
# → ID STATUS TOTAL DATE
# → 123 pending 5000 2024-01-01
# ✅ 注文ステータスを手動で更新
wp wc shop_order update 123 \
--status=processing \
--user=1 \
--path=/var/www/html/
# ✅ 支払い完了イベントを手動でトリガー
wp eval "
\$order = wc_get_order(123);
\$order->payment_complete('manual_payment_id');
echo 'Order status: ' . \$order->get_status();
" --path=/var/www/html/
# ✅ 重複注文を確認(決済が2回処理された場合)
wp db query "
SELECT ID, post_status, post_date
FROM wp_posts
WHERE post_type = 'shop_order'
AND post_date > DATE_SUB(NOW(), INTERVAL 1 HOUR)
ORDER BY post_date DESC
LIMIT 10;
" --path=/var/www/html/
ステップ5:決済後のメール送信を確認する
# ✅ WooCommerce メールの送信テスト
wp eval "
\$order = wc_get_order(123);
// 注文確認メールを再送
WC()->mailer()->get_emails()['WC_Email_Customer_Processing_Order']->trigger(123);
echo 'Email sent for order 123';
" --path=/var/www/html/
# ✅ メールが届かない場合の確認
# WordPress の SMTP 設定を確認
wp eval "
\$result = wp_mail(
get_option('admin_email'),
'WooCommerce Mail Test',
'Test email from WooCommerce'
);
echo \$result ? 'Sent' : 'Failed';
" --path=/var/www/html/
# ✅ WooCommerce のメール設定を確認
wp option get woocommerce_email_from_address --path=/var/www/html/
# → noreply@example.com ← 送信元アドレス
# ✅ メール送信に外部 SMTP を使用(WP Mail SMTP プラグイン推奨)
wp plugin install wp-mail-smtp --activate --path=/var/www/html/
注意事項
- 決済ページ(チェックアウト・マイアカウント・カートページ)は絶対にキャッシュしてはいけません。W3 Total Cache・WP Super Cache等のキャッシュプラグインでこれらのページをキャッシュ除外に設定してください。キャッシュされた決済ページではnonceが古くなりセッションエラーが発生します
- Stripeの本番APIキーとテストAPIキーを混在させないでください。本番環境では本番APIキーのみを使用し、開発環境ではテストAPIキーを使用してください
まとめ
WooCommerce決済エラーの解決は①wc-logs/でエラーログ確認・Stripeデバッグモード有効化・SSL(HTTPS)の確認、②キャッシュプラグインでチェックアウト/カートをキャッシュ除外に設定・セキュリティプラグインのブロックを確認・nonce期限エラーの対処、③Stripe Webhookエンドポイントの設定確認・テストカードで動作確認・Webhook受信テスト、④保留中の注文をwp wc shop_order updateで手動更新・payment_complete()で支払い完了処理を実行、⑤注文確認メールの再送テスト・外部SMTPで確実なメール送信・送信元アドレスの確認の手順で対応します。