我正在尝试让FB Messenger Bot API工作。我目前正在尝试订阅一个webhook。我目前有一个以下形式的脚本:
#!/usr/bin/php
<?php
$challenge = $_REQUEST['hub_challenge'];
echo $challenge; # HERE!
$verify_token = $_REQUEST['hub_verify_token'];
if ($verify_token === 'token') {
echo $challenge;
}
?>
然而,当我尝试"验证并保存"回调URL时,我得到了一个错误的形式:
The URL couldn't be validated. Response does not match challenge, expected value = '401537941', received=''
即我的脚本正在发送一个空字符串。但是,如果我将上面标记为"HERE!"的行更改为"echo'cat'",则错误消息与预期的相同,只是"received='cat'。"。因此,我的脚本正在执行,并试图将一些内容发送回FB,但由于某种原因,$challenge变量为空。为什么会出现这种情况?
谢谢!
if($_GET['hub_verify_token'] === "validation_token"){
echo($_GET["hub_challenge"]);
} else {
echo("error");
}
您的响应中可能有额外的字符串,因为您在打印挑战后没有退出。在浏览器中尝试您的脚本并检查html,看看是否有任何额外内容。
使用以下代码,因为您需要将验证代码与工作webhook调用分离。同时验证令牌不是你从Facebook创建的东西,它是你自己的关键词
/* validate verify token needed for setting up web hook */
if (isset($_GET['hub_verify_token'])) {
if ($_GET['hub_verify_token'] === 'YOUR_SECRET_TOKEN') {
echo $_GET['hub_challenge'];
return;
} else {
echo 'Invalid Verify Token';
return;
}
}
因此,在这种情况下,您的验证令牌是your_SECRET_token,现在当您设置web挂钩时,请在验证令牌中键入your_SECRET_token。
我最近在这里写了一个屏幕截图的分步指南。