Facebook Messenger API - 无法验证webhook URL(PHP)

时间:2016-04-19 16:25:18

标签: php facebook webhooks messenger facebook-messenger

我正在尝试设置一个fb messenger聊天机器人,但似乎无法验证webhook回调网址。每次我尝试验证它时,我都会收到此错误消息 - 无法验证URL。响应与挑战不匹配,预期值='1596214014',收到=''

这是截图:

Screenshot

这是我正在使用的php -

<?php

$challenge = $_REQUEST['hub_challenge'];
$verify_token = $_REQUEST['hub_verify_token'];

if ($verify_token === 'token_my_token') {
echo $challenge;
}

我也试过

echo $_GET['hub_challenge'];

只是

echo file_get_contents('php://input');

所有这些导致与上面相同的错误消息。基本上,据我所知,facebook不会向我的服务器发送GET请求,或者它是否包含任何数据。任何人都可以告诉我是否做错了什么或者是否有设置我需要更改以确保Facebook正确发送数据?

编辑 - 当检查访问日志时,这就是我发现的,看起来facebook没有在get请求中发送任何数据。

2a03:2880:1010:dffb:face:b00c:0:8000 - - [19/Apr/2016:20:50:06 +0000] "GET /wp-content/plugins/applications/fbmessenger.php HTTP/1.0" 200 - "-" "facebookplatform/1.0 (+http://developers.facebook.com)

由于

3 个答案:

答案 0 :(得分:4)

只是尝试我的代码,它会工作。

 $challenge = $_REQUEST['hub_challenge'];
  $verify_token = $_REQUEST['hub_verify_token'];

  if ($verify_token === 'Your's app token') {
  echo $challenge;
  }
  //Token of app
 $row = "Token";


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

//Receive user
$sender = $input['entry'][0]['messaging'][0]['sender']['id'];
 //User's message
 $message = $input['entry'][0]['messaging'][0]['message']['text'];



//Where the bot will send message
 $url = 'https://graph.facebook.com/v2.6/me/messages?access_token='.$row;


 $ch = curl_init($url);

//Answer to the message adds 1
if($message)
{
 $jsonData = '{
    "recipient":{
        "id":"'.$sender.'"
      }, 
    "message":{
        "text":"'.$message. ' 1' .'"
      }
 }';
};



 $json_enc = $jsonData;

 curl_setopt($ch, CURLOPT_POST, 1);

 curl_setopt($ch, CURLOPT_POSTFIELDS, $json_enc);

 curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));  

 if(!empty($input['entry'][0]['messaging'][0]['message'])){
    $result = curl_exec($ch);
 }

答案 1 :(得分:0)

你能试试我的API吗? https://github.com/Fritak/messenger-platform

如果你在示例中设置它,它应该工作:

// This is just an example, this method of getting request is not safe!
$stream  = file_get_contents("php://input");
$request = empty($stream)? $_REQUEST : $stream;

$bot = new \fritak\MessengerPlatform(
        ['accessToken'      => 'token_for_app',
         'webhookToken'     => 'my_secret_token',
         'facebookApiUrl'   => 'https://graph.facebook.com/v2.6/me/' //2.6 is minimum
        ], $request);

    if($bot->checkSubscribe())
    {
        print $bot->request->getChallenge();
        exit;
    }

如果没有,问题就在Facebook和脚本之间,而不是PHP本身。去检查apache设置等。

问题可能在facebook方面,他们在过去几天遇到了一些问题......

答案 2 :(得分:0)

在您的php文件中此代码:(fbmessenger.php)

<?php 
// header('HTTP/1.1 200 OK');

/* GET ALL VARIABLES GET & POST */
foreach ($_REQUEST AS $key => $value){
    $message .= "$key => $value ($_SERVER[REQUEST_METHOD])\n";
}
$input = file_get_contents("php://input");
$array = print_r(json_decode($input, true), true);
file_put_contents('fbmessenger.txt', $message.$array."\nREQUEST_METHOD: $_SERVER[REQUEST_METHOD]\n----- Request Date: ".date("d.m.Y H:i:s")." IP: $_SERVER[REMOTE_ADDR] -----\n\n", FILE_APPEND);
echo $_REQUEST['hub_challenge'];

您将请求保存在名为&#34; fbmessenger.txt&#34;的文件中。在同一目录中。

  

请注意,由于某些奇怪的原因,您可能需要提交几次   获得批准&amp;得救了! (我必须击中&#34;在fb之前保存&#34; 8-9次   已批准的链接)

确保使用https(SSL)连接,一旦完成连接,请使用&#34; hub_verify_token&#34;验证您的令牌。确保请求来自fb。