Zoho Forms Webhook无法向MySQL传递有效Payload的问题排查求助
Zoho Forms Webhook无法向MySQL传递有效Payload的问题排查求助
我现在遇到了一个头疼的问题:Zoho Forms的Webhook无法向我的PHP脚本传递有效JSON Payload,导致数据无法写入MySQL数据库。具体情况如下:
- Zoho Forms配置已经按照要求设置了
application/json的Content-Type,使用POST方法发送,预期的Payload格式是:
{ "DateTime" : "<DateTime>", "Email" : "<Email>", "Name.First" : "<Name.First>", "Name.Last" : "<Name.Last>", "PhoneNumber" : "<PhoneNumber>" }
- 每次测试都显示"Webhook test executed successfully",状态码200,但我的脚本始终提示"No payload received"。
- 服务器环境:Dreamhost共享主机,无root权限;使用Apache,无
.htaccess文件;文件权限0644,文件夹权限0755。 - 从服务器日志发现一个关键矛盾:Zoho发送的请求是GET方法(而非配置的POST),且Content-Type显示为
application/x-www-form-urlencoded,和我在Zoho里设置的application/json不一致。
我的PHP代码
<?php require_once 'connectme.php'; // Create log file $logFile = "webhook_log.txt"; // Check connection if ($conn->connect_error) { $error_message = "Connection failed: " . $conn->connect_error . "\n"; file_put_contents($logFile, $error_message, FILE_APPEND); die("Connection failed: " . $conn->connect_error); } else { $success_message = "Connected successfully to the database.\n"; file_put_contents($logFile, $success_message, FILE_APPEND); } // Get request body as JSON raw txt if (!empty($_POST)) { $request_body = json_encode($_POST); } else { $request_body = file_get_contents('php://input'); } // // $request_data = $_POST; // $request_data = array_merge($_POST, $_FILES); // $request_body = file_get_contents('php://input'); // Log the received payload if (empty($request_body)) { $error_message = "Dude, there is othing to see here.\n"; file_put_contents($logFile, $error_message, FILE_APPEND); } else { $success_message = "Payload received: " . $request_body . "\n"; file_put_contents($logFile, $success_message, FILE_APPEND); } // Check if payload is received if (empty($request_body)) { $error_message = "No payload received from Zoho Forms.\n"; file_put_contents($logFile, $error_message, FILE_APPEND); die("No payload received."); } else { $success_message = "Payload received: " . $request_body . "\n"; file_put_contents($logFile, $success_message, FILE_APPEND); } // Decode JSON payload $json_data = json_decode($request_body, true); // Check if payload is valid JSON if (json_last_error() !== JSON_ERROR_NONE) { $error_message = "Received payload is not valid JSON format.\n"; file_put_contents($logFile, $error_message, FILE_APPEND); die("Received payload is not valid JSON format."); } // Extract data from JSON payload $NameFirst = isset($json_data['Name.First']) ? $json_data['Name.First'] : null; $NameLast = isset($json_data['Name.Last']) ? $json_data['Name.Last'] : null; $DateTime = isset($json_data['DateTime']) ? $json_data['DateTime'] : null; $Email = isset($json_data['Email']) ? $json_data['Email'] : null; $PhoneNumber = isset($json_data['PhoneNumber']) ? $json_data['PhoneNumber'] : null; // Validate extracted data if ($NameFirst === null || $NameLast === null || $DateTime === null || $Email === null || $PhoneNumber === null) { $error_message = "Invalid or missing parameter names in request: " . json_encode($json_data) . "\nRaw request body: " . $request_body . "\n"; file_put_contents($logFile, $error_message, FILE_APPEND); die("Invalid or missing parameter names in request."); } elseif (empty($NameFirst) || empty($NameLast) || empty($DateTime) || empty($Email) || empty($PhoneNumber)) { $error_message = "Parameters have empty values in request: " . json_encode($json_data) . "\nRaw request body: " . $request_body . "\n"; file_put_contents($logFile, $error_message, FILE_APPEND); die("Parameters have empty values in request."); } // Insert data into the clients table $stmt = $conn->prepare("INSERT INTO clients (NameFirst, NameLast, DateTime, Email, PhoneNumber) VALUES (?, ?, ?, ?, ?)"); $stmt->bind_param("sssss", $NameFirst, $NameLast, $DateTime, $Email, $PhoneNumber); if ($stmt->execute()) { $success_message = "New record created successfully.\n"; file_put_contents($logFile, $success_message, FILE_APPEND); } else { $error_message = "Error: " . $stmt->error . "\n"; file_put_contents($logFile, $error_message, FILE_APPEND); } // Close database connection and statement $stmt->close(); $conn->close(); ?>
已尝试的操作
我已经试过这些方法,但问题依然存在:
- 反复核对Zoho Forms的Webhook配置,确认URL和Content-Type设置无误
- 用Postman模拟POST请求发送JSON Payload,脚本能正常接收并写入数据库
- 执行了多次Zoho Forms的Webhook测试,结果始终一致
- 咨询过ChatGPT,最终建议联系Zoho官方支持
- 给Zoho Forms支持发了邮件,对方回复"我们这边已经按预期发送了数据",这让我怀疑是不是自己的代码或配置还有遗漏的问题
服务器反馈日志
Time: 2023-04-20 17:12:08 Request method: GET Request headers: Array ( [Content-Length] => 0 [Connection] => close [Host] => www.webhook.rsvphub.me [Content-Type] => application/x-www-form-urlencoded [User-Agent] => Zoho.com [Accept] => application/json [Req-Mi-Chain] => -1407411460:8080 ) _POST: Array ( ) _SERVER: Array ( [PATH] => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin [CONTENT_LENGTH] => 0 [SCRIPT_NAME] => /tired.php [REQUEST_URI] => /tired.php [QUERY_STRING] => [REQUEST_METHOD] => GET [SERVER_PROTOCOL] => HTTP/1.1 [GATEWAY_INTERFACE] => CGI/1.1 [REMOTE_PORT] => 60816 [SCRIPT_FILENAME] => /home/captain_hook/webhook.rsvphub.me/tired.php [SERVER_ADMIN] => webmaster@webhook.rsvphub.me [CONTEXT_DOCUMENT_ROOT] => /home/captain_hook/webhook.rsvphub.me [CONTEXT_PREFIX] => [REQUEST_SCHEME] => https [DOCUMENT_ROOT] => /home/captain_hook/webhook.rsvphub.me [REMOTE_ADDR] => 136.143.176.64 [SERVER_PORT] => 443 [SERVER_ADDR] => 173.236.170.13 [SERVER_NAME] => www.webhook.rsvphub.me [SERVER_SOFTWARE] => Apache [SERVER_SIGNATURE] => [HTTP_CONNECTION] => close [HTTP_HOST] => www.webhook.rsvphub.me [CONTENT_TYPE] => application/x-www-form-urlencoded [HTTP_USER_AGENT] => Zoho.com [HTTP_ACCEPT] => application/json [HTTP_REQ_MI_CHAIN] => -1407411460:8080 [SSL_TLS_SNI] => www.webhook.rsvphub.me [HTTPS] => on [DH_USER] => captain_hook [ds_id_47565102] => [dsid] => 47565102 [SCRIPT_URI] => https://www.webhook.rsvphub.me/tired.php [SCRIPT_URL] => /tired.php [QS_ConnectionId] => 168202872854339796491526 [QS_AllConn] => 7 [QS_SrvConn] => 7 [UNIQUE_ID] => ZEG4uKq--W0VG86HWLzo1AAAAGA [FCGI_ROLE] => RESPONDER [PHP_SELF] => /tired.php [REQUEST_TIME_FLOAT] => 1682028728.6623 [REQUEST_TIME] => 1682028728 ) Missing required POST variables.
我的疑问
现在想请教各位:
- 我的代码里有没有明显的问题,导致无法接收或解析Zoho Forms发送的Payload?
- 除了URL和Content-Type,Zoho Forms的Webhook还有什么配置项我可能漏掉了?
任何建议或帮助我都非常感激,如果需要更多信息,请随时告诉我。
备注:内容来源于stack exchange,提问作者Franklin Vergara
相关产品推荐
相关产品推荐

