Facebook测试表单无法触发Webhook获取线索信息求助
排查Facebook Lead Ads Webhook测试表单无触发的问题
我来帮你梳理这个Webhook的问题,你遇到的情况很常见,咱们从几个关键方向入手排查:
核心问题:Webhook端点未正确返回响应
你的代码目前只在验证token时返回了challenge,但处理线索数据的阶段没有返回200 OK的响应。Facebook的Webhook要求无论是否处理成功,都必须在15秒内返回200状态码,否则会判定为服务器失败(也就是你看到的102错误)。
修复代码示例
修改你的PHP代码,确保处理完数据后返回响应:
<?php // facebook variables $challenge = isset($_REQUEST['hub_challenge']) ? $_REQUEST['hub_challenge'] : ''; $verify_token = isset($_REQUEST['hub_verify_token']) ? $_REQUEST['hub_verify_token'] : ''; $fb_access_token = "myaccesstoken"; // 验证Webhook if ($verify_token === "abc123") { echo $challenge; exit; // 验证阶段直接退出,避免后续代码执行 } // Process retrieved data from facebook webhook $data = json_decode(file_get_contents("php://input"),true); // 增加数据结构的安全判断,避免报错 if (!empty($data['entry']) && !empty($data['entry'][0]['changes'])) { foreach ($data['entry'][0]['changes'] as $change) { // 确认是leadgen事件 if ($change['field'] === 'leadgen' && !empty($change['value']['leadgen_id'])) { $leadgen_id = $change['value']['leadgen_id']; error_log(print_r($leadgen_id, true)); } } } // 必须返回200响应 http_response_code(200); echo "OK"; ?>
其他排查要点
- HTTPS证书要求:你的Webhook端点必须使用受信任CA颁发的HTTPS证书(自签名证书无法通过Facebook的校验),可以用在线工具检测端点的SSL状态。
- 权限与订阅确认:
- 确保App已获得
pages_show_list和leads_retrieval权限,且权限处于已批准状态(开发阶段需将测试页面/用户添加到App的测试对象中)。 - 检查Webhook订阅的Page是否正确,且已勾选
leadgen字段(在App Dashboard -> Webhooks -> 已订阅的Page -> Edit Subscriptions中确认)。
- 确保App已获得
- 测试表单关联:确认测试表单属于已订阅Webhook的那个Page,且表单状态为已发布(即使是测试表单,也需要关联正确的Page)。
- 查看Facebook事件日志:在Page的设置 -> Webhooks -> Event Logs中,查看是否有事件发送记录,里面会显示具体的错误原因(比如请求超时、证书无效等)。
内容的提问来源于stack exchange,提问作者S Khan
相关产品推荐
相关产品推荐

