You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WhatsApp Business API Webhook无数据接收问题求助

排查WhatsApp Business API Webhook无数据传入的问题

1. 先确认Webhook订阅事件是否开启

登录Meta Business Manager的WhatsApp配置后台,检查Webhook的订阅字段:必须勾选messages、message_statuses等你需要接收的事件类型,否则Meta不会主动推送数据。

2. 修正Webhook代码逻辑(区分GET验证和POST数据接收)

你当前的代码没有明确区分GET(验证)和POST(数据推送)请求,而且测试时Meta发送的是POST请求,需要单独处理。替换成以下代码:

<?php
$logFile = 'log.txt';
$currentDate = date('Y-m-d H:i:s');
$verifyToken = '你的Meta配置验证令牌'; // 替换成你设置的令牌

// 处理GET请求:Webhook验证
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
    if (isset($_GET['hub_challenge']) && $_GET['hub_verify_token'] === $verifyToken) {
        echo $_GET['hub_challenge'];
        file_put_contents($logFile, "[$currentDate] GET 验证成功 - IP: {$_SERVER['REMOTE_ADDR']}\n", FILE_APPEND);
    } else {
        http_response_code(403);
        echo '无效验证令牌';
        file_put_contents($logFile, "[$currentDate] GET 验证失败 - IP: {$_SERVER['REMOTE_ADDR']}\n", FILE_APPEND);
    }
    exit;
}

// 处理POST请求:接收Webhook数据
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $postData = file_get_contents('php://input');
    $headers = getallheaders();

    // 写入完整日志(包含请求头和请求体)
    $logEntry = "[$currentDate] POST 请求 - IP: {$_SERVER['REMOTE_ADDR']}\n";
    $logEntry .= "请求头:\n";
    foreach ($headers as $name => $value) {
        $logEntry .= "$name: $value\n";
    }
    $logEntry .= "请求体:\n$postData\n";
    $logEntry .= "-------------------------\n";
    
    file_put_contents($logFile, $logEntry, FILE_APPEND);

    // 必须返回200 OK,否则Meta会重复推送
    http_response_code(200);
    echo 'OK';
    exit;
}

// 其他请求方法返回405
http_response_code(405);
echo '不允许的请求方法';
?>

3. 检查服务器配置和权限

  • 确认log.txt文件有写入权限(比如设置chmod 664或775,根据服务器环境调整),否则日志无法写入。
  • 检查服务器防火墙、安全插件(如WordPress安全插件)、Nginx/Apache配置是否拦截了POST请求到webhook.php。
  • 确认PHP的allow_url_fopen配置开启(虽然php://input不受此影响,但可以排查潜在问题)。

4. 正确测试Webhook

在Meta的Webhook配置页面点击「测试」时,必须选择具体的事件类型(比如messages),而不是仅触发验证操作——验证操作是GET请求,本来就不会携带业务数据。

也可以用curl手动模拟POST请求测试:

curl -X POST -H "Content-Type: application/json" -d '{"object":"whatsapp_business_account","entry":[{"id":"你的账号ID","changes":[{"value":{"messages":[{"from":"测试号码","id":"wamid.123","text":{"body":"测试消息"}}]},"field":"messages"}]}]}' https://你的域名/webhook.php

执行后查看log.txt是否有记录,以此验证代码是否正常工作。

5. 检查Meta后台的Webhook状态

在Meta配置页面查看「最近事件」,如果有推送失败记录(比如返回码不是200),说明你的代码没有正确响应,Meta会停止推送。确保代码在接收POST请求时返回200 OK。

内容的提问来源于stack exchange,提问作者JanBal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 23:18:12