PHP接收webhook

你知唔知我系靓仔

PHP接收webhook

php接受传递的webhook数据

在做自动化的时候希望将多组服务器的数据放在一起统计,此时使用webhook传递较为方便。

很简单的代码,不使用参数则默认保存到webhook.json,提供了参数则按参数名保存到json中

POST提交即可 https://webhook/webhook.php?project=openai

<?php
// 如果是OPTIONS请求,直接返回成功的状态码和CORS头
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
    header('Access-Control-Allow-Origin: *');
    header('Access-Control-Allow-Methods: POST');
    header('Access-Control-Allow-Headers: Content-Type');
    header('HTTP/1.1 200 OK');
    exit;
}

// 设置CORS头
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST');
header('Access-Control-Allow-Headers: Content-Type');
header('Content-Type: application/json');

// 确保这个脚本只能处理 POST 请求
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // 从 POST 请求中获取原始数据
    $webhookData = file_get_contents('php://input');

    // 获取传入的时间戳和 IP 地址
    $timestamp = date('Y-m-d H:i:s'); // 当前时间戳
    $ip = $_SERVER['REMOTE_ADDR']; // 客户端 IP 地址

    // 获取参数并构建文件名
    $filename = isset($_GET['project']) ? $_GET['project'] . '.json' : 'webhook.json';

    // 构建新数据的数组
    $newData = [
        'timestamp' => $timestamp,
        'ip' => $ip,
        'webhook_data' => json_decode($webhookData, true) // 如果是 JSON 数据,保存解码后的数据
    ];

    // 读取已有数据或创建一个新数组
    $existingData = file_exists($filename) ? json_decode(file_get_contents($filename), true) : [];

    // 将新数据追加到现有数组中
    $existingData[] = $newData;

    $jsonData = json_encode($existingData, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);

    if (file_put_contents($filename, $jsonData) !== false) {
        echo json_encode(['message' => "信息已成功追加到 $filename 文件中。"]);
    } else {
        echo json_encode(['error' => "追加信息到 $filename 文件失败。"]);
    }
} else {
    http_response_code(405); 
    echo json_encode(['error' => "错误:仅接受 POST 请求。"]);
}
?>

payload

import requests
import json

webhook_data = {
    "key1": "value1",
    "key2": "value2"
}

url = "https://webhook/webhook.php?project=1"
response = requests.post(url, data=json.dumps(webhook_data))
print(response.text)