2026年7月20日

2026年7月20日

wordpress webhook receive process

はじめに

Webhooksは、特定のイベントが発生したときに外部システムに通知を送る有効な手段です。WordPressにおいても、プラグインやカスタム開発でWebhooksを利用することで、サイトと他のアプリケーション間でのデータ同期や自動化が可能となります。しかし、安全かつ効率的にWebhookを受け取るために適切な設定が必要であり、今回はその具体的なプロセスについて紹介します。

症状・背景

このテーマが必要になる主な場面:

  • <サイトとの外部システム間でリアルタイムデータ同期を実現したい>
  • <特定のイベント(例:投稿が作成された)に応じて自動的に他のシステムに通知を送りたい>
  • <カスタム開発時に、WordPressから別のアプリケーションへ情報を伝達する必要がある>
  • <セキュリティ強化のために、Webhookの受信処理を細かく制御したい>

手順・設定方法

ステップ1: Webhookの受信用フィルターを追加

# WordPressのアクションフックを使用してWebhook受信イベントを定義
add_action('wp_ajax_receive_webhook', 'receive_webhook_callback');

# リクエストヘッダーから署名を取得し、その検証を行う関数を定義
function validate_signature($request, $secret) {
    if (isset($_SERVER['HTTP_X_WEBHOOK_SIGNATURE'])) {
        return hash_hmac('sha256', file_get_contents('php://input'), $secret) === $_SERVER['HTTP_X_WEBHOOK_SIGNATURE'];
    }
    return false;
}

# フィルター関数を定義
function receive_webhook_callback() {
    // セキュリティチェック: 署名が正しいか確認
    if (!validate_signature($_REQUEST, 'your_secret_key')) {
        wp_die('Invalid signature');
    }
    
    // Webhookの受信内容を処理するロジックをここに追加
    $payload = file_get_contents('php://input');
    error_log($payload);  // デバッグ用
    
    wp_send_json_success(['status' => 'received']);
}

ステップ2: Webhookの受信URLを作成

# WordPressからWebhookが呼ばれるURLを定義する関数
function create_webhook_url() {
    return get_site_url() . '/wp-admin/admin-ajax.php?action=receive_webhook';
}

// テーマのfunctions.phpやプラグイン内でこの関数を呼び出すことで、Webhook受信用のURLを得ることができます。
$webhook_url = create_webhook_url();
echo $webhook_url;

ステップ3: カスタムフィールドまたはカスタムテーブルを作成してデータを保存

# Webhookから受け取った情報を保存する関数
function save_webhook_data($data) {
    // データベースに保存したい情報を配列で定義
    $webhook_data = [
        'event' => $data['event'],
        'payload' => json_encode($data['payload']),
        'timestamp' => time()
    ];
    
    // ここでは簡単のため、カスタムテーブルを使用します。通常はwpdbクラスを使うことを推奨します。
    global $wpdb;
    $table_name = $wpdb->prefix . 'webhook_events';
    $wpdb->insert($table_name, $webhook_data);
}

# 上記で定義したreceive_webhook_callback関数内で、このsave_webhook_dataを呼び出すことでデータを保存可能
$data = json_decode(file_get_contents('php://input'), true);
save_webhook_data($data);

ステップ4: ログと監視の設定

# Webhook受信時のログ出力を有効にする関数
function log_webhook_event() {
    $payload = file_get_contents('php://input');
    error_log("Webhook received at " . date('Y-m-d H:i:s') . ": " . json_encode($payload));
}

// 上記のreceive_webhook_callback関数内でこの関数を呼び出す
log_webhook_event();

注意事項

  • <実践的な注意点1>: Webhookの署名検証は必須であり、これが漏洩すると不正なアクセスを受けてしまう可能性があります。
  • <実践的な注意点2>: ローカル開発環境と本番環境で異なるURLやシークレットキーを使用することを忘れないでください。
  • <セキュリティ上の注意>: Webhookの受信側は攻撃対象となり得るため、常に最新のプラグインやテーマを使用し、適切なバックアップを取るようにしましょう。
  • <パフォーマンス/運用上の注意>: 大規模なWebhookトラフィックを受け入れる場合は、データベースの性能やサーバーのリソースに十分な余裕があるか確認してください。

まとめ

1. セキュリティ: Webhookの署名検証を実装し、秘密鍵を安全に管理することが重要です。

2. ログ出力: デバッグや問題解決のためにWebhookの受信履歴をログに出力します。

3. カスタマイズ: カスタムフィールドやテーブルを利用することで柔軟なデータ保存が可能となります。

4. パフォーマンス最適化: 大規模なトラフィックに対応するためには、キャッシュの活用やAPIレスポンスタイムの改善が必要です。

5. 継続的なモニタリング: Webhookシステムは安定稼働を維持するために定期的な監視とメンテナンスが必須です。

関連記事:

お気軽にご相談ください

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