【问题标题】:Facebook Messenger Bot Webhook troubleFacebook Messenger Bot Webhook 问题
【发布时间】:2016-04-20 19:49:45
【问题描述】:

我正在尝试让 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=''

即我的脚本正在发送一个空字符串。但是,如果我更改标记为“这里!”的行上面到“echo 'cat'”,错误消息与预期的“received='cat'”相同。因此,我的脚本正在执行并试图将一些内容发送回 FB,但由于某种原因 $challenge 变量为空。为什么会这样?

谢谢!

【问题讨论】:

  • 在设置 webhook 时,是否将“验证令牌”设置为令牌?如果是,请尝试在此处取出 #!完全行。
  • 是的,我添加了#HERE!事后一行只是为了看看 $challenge 是否返回任何东西。它现在实际上不在我的代码中。

标签: php facebook facebook-sdk-4.0 facebook-messenger chatbot


【解决方案1】:
 if($_GET['hub_verify_token'] === "validation_token"){
     echo($_GET["hub_challenge"]);
 } else {
     echo("error");
 }

【讨论】:

  • 嗨,Sritam,我试过了,我返回的消息是“错误”,因为 $_GET['hub_verify_token'] 似乎是空的。如何查看 GET 请求的内容 FB 正在发送我的回调?
【解决方案2】:

您的回复中可能有额外的字符串,因为您在打印挑战后没有退出。在浏览器中尝试您的脚本并检查 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,现在当您设置网络挂钩时,​​请在验证令牌中输入 YOUR_SECRET_TOKEN。

我最近写了a step by step guide with screen shots here

【讨论】:

    猜你喜欢
    • 2016-11-09
    • 1970-01-01
    • 2016-10-12
    • 2017-12-16
    • 2016-08-09
    • 2018-09-03
    • 1970-01-01
    • 2016-08-13
    相关资源
    最近更新 更多