Messenger Bot 中的 hub_verify_index 和 hub_challenge 错误

hub_verify_index and hub_challenge error in Messenger Bot

我尝试按照以下两个指南使用 PHP 构建 Messenger 机器人:http://blog.adnansiddiqi.me/develop-your-first-facebook-messenger-bot-in-php/ and https://medium.com/@nadeem.manzoor0/facebook-messenger-platform-web-hook-setup-in-php-893ead06746b#.lcpp0jh9o.

并且我使用 nGrok v2.1.18 来处理我的 localhost 来自 Messenger 机器人的代码。在我的 localhost 中,我已经安装了 xampp control panel v3.2.1.

这是我的 webhook.php:

<?php
/* validate verify token needed for setting up web hook */ 
if (isset($_GET['hub_verify_token'])) { 
   if ($_GET['hub_verify_token'] === 'here_is_my_token') {
       echo $_GET['hub_challenge'];
       return;
   } else {
       echo 'Invalid Verify Token';
       return;
   }
} else {
   echo $_GET['hub_verify_token'];
   echo $_GET['hub_challenge'];
}

$input = json_decode(file_get_contents('php://input'), true);

$sender = $input['entry'][0]['messaging'][0]['sender']['id'];
$message = $input['entry'][0]['messaging'][0]['message']['text'];

/**
 * Some Basic rules to validate incoming messages
 */
if(preg_match('[time|current time|now]', strtolower($message))) {

    // Make request to Time API
    ini_set('user_agent','Mozilla/4.0 (compatible; MSIE 6.0)');
    $result = file_get_contents("http://www.timeapi.org/utc/now?format=%25a%20%25b%20%25d%20%25I:%25M:%25S%20%25Y");
    if($result != '') {
        $message_to_reply = $result;
    }
} else {
    $message_to_reply = 'Huh! what do you mean?';
}
print $message_to_reply;
//API Url
$url = 'https://graph.facebook.com/v2.6/me/messages?access_token=<my-token>';


//Initiate cURL.
$ch = curl_init($url);

//The JSON data.
$jsonData = '{
    "recipient":{
        "id":"'.$sender.'"
    },
    "message":{
        "text":"'.$message_to_reply.'"
    }
}';

//Encode the array into JSON.
$jsonDataEncoded = $jsonData;

//Tell cURL that we want to send a POST request.
curl_setopt($ch, CURLOPT_POST, 1);

//Attach our encoded JSON string to the POST fields.
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonDataEncoded);

//Set the content type to application/json
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
//curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));

//Execute the request
if(!empty($input['entry'][0]['messaging'][0]['message'])){
    $result = curl_exec($ch);
}
?>

而且我已经在我的 Facebook 应用程序页面中设置了 webhooks url,如下所示:https://903....ngrok.io/FunBot/webhook.php 并且还设置了验证令牌。没有问题。

当我从我的页面发送消息时,我可以在 nGrok 中看到 200 OK 的回复。但在信使机器人中,它不回复任何内容。

因此,我尝试从 json_decode(file_get_contents('php://input'), true) 登录并且没有错误。

但是当我尝试打印 $_GET['hub_verify_token']$_GET['hub_challenge'].

时出现 "Undefined index: hub_challenge in C:\xampp\htdocs\FunBot\webhook.php on line .....""Undefined index: hub_verify_token in ......." 错误

这是 nGrok 上的 undefined index 错误结果。

我不确定这两个"undefined index"问题是否会导致机器人不回复。

我是否需要将 me/messages?$url 更改为 page id 或其他一些 ID。

我已经在 Whosebug 上阅读了很多关于机器人不回复问题的帖子,但它对我不起作用。我真的不知道哪一部分是错的,因为这是我第一次使用机器人。

非常感谢您提出任何建议。

终于,我找到了解决办法。主要问题是SSL问题。不使用 SSL 证书,即使代码正常,bot 也不会回复任何内容。而我没有SSL。所以,我陷入了一个奇怪的问题。

所以,现在我使用 Heroku 上传了我的代码存储库,并使用来自 Heroku 的 url 再次设置了 webhook。通过使用 Heroku,您无需担心 SSL。现在,一切都很好。

这个 link 对创建 Messenger bot 很有帮助。

希望我的回答对大家有所帮助。