PHP 中的 Webhook 服务器
本文介绍了一个简单的 webhook 服务器 示例。
我们强烈建议您不要在生产环境中使用它。
# 依赖项
此示例不需要任何外部 PHP 依赖项。
但是,出于本地开发目的,需要隧道服务。此示例使用 ngrok。
您可以在此处下载 ngrok:https://ngrok.com/download。
# 示例
以下是 webhook 服务器的两个示例。
# 不检查请求签名的示例
这是一个非常简单的示例,服务器将请求中的 body
日志记录到控制台。body
包含从 CKEditor 云服务发送的完整的 webhook 信息。
<?php
$body = file_get_contents('php://input');
$webhook = json_decode($body);
file_put_contents('php://stdout', 'Webhook received: ' . print_r($webhook, true) . "\r\n");
# 检查请求签名的示例
此示例展示了如何验证请求是否来自 CKEditor 云服务服务器
以及是否使用正确的 API 密钥 签名。
生成和检查签名需要几个变量。 API 密钥 可在 CKEditor 生态系统客户仪表板(适用于 SaaS)或本地部署的管理面板中获取,其余参数位于请求中
method
:$_SERVER['REQUEST_METHOD']
url
:$_SERVER['REQUEST_URI']
timestamp
:$_SERVER['HTTP_X_CS_TIMESTAMP']
body
:file_get_contents('php://input')
<?php
$apiSecret = 'your-api-secret';
$requestMethod = $_SERVER['REQUEST_METHOD'] ?? '';
$receivedHmac = $_SERVER['HTTP_X_CS_SIGNATURE'] ?? '';
$timestamp = $_SERVER['HTTP_X_CS_TIMESTAMP'] ?? '';
$url = $_SERVER['REQUEST_URI'];
$body = file_get_contents('php://input');
$data = $requestMethod . $url . $timestamp . $body;
$hmac = hash_hmac('sha256', $data, $apiSecret);
$isValid = hash_equals($hmac, $receivedHmac);
if (!$isValid) {
// Invalid webhook signature, ignore the request.
die();
}
$webhook = json_decode($body);
file_put_contents('php://stdout', 'Webhook event received: ' . print_r($webhook, true) . "\r\n");
# 使用
将上面的示例文件保存为 index.php
,并使用以下命令启动服务器
php -S 127.0.0.1:9000
如果需要,请使用以下命令运行 ngrok
./ngrok http 9000
之后,您应该会看到一个 *.ngrok.io
URL。复制 *.ngrok.io
URL 并将其粘贴到 webhook 配置中。您现在应该能够接收 webhook 了。