我正在尝试让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;
}
?>
但是,当我尝试“验证并保存”回调网址时,我收到以下格式的错误:
The URL couldn't be validated. Response does not match challenge, expected value = '401537941', received=''
即我的脚本发送一个空字符串。但是,如果我更改标有“HERE!”的行上面的“echo'cat'”,错误信息是相同的,除了“received ='cat'”,如预期的那样。因此,我的脚本正在执行,并且正在尝试将一些内容发送回FB,但由于某种原因,$ challenge变量为空。为什么会出现这种情况?
谢谢!
答案 0 :(得分:1)
if($_GET['hub_verify_token'] === "validation_token"){
echo($_GET["hub_challenge"]);
} else {
echo("error");
}
答案 1 :(得分:0)
您的回复中可能还有额外的字符串,因为您在打印挑战后没有退出。在浏览器中尝试您的脚本并检查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。