POST:来自 laravel 中 Messenger Bot 的 500 内部服务器错误

Posted

技术标签:

【中文标题】POST:来自 laravel 中 Messenger Bot 的 500 内部服务器错误【英文标题】:POST: 500 Internal Server Error from Messenger Bot in laravel 【发布时间】:2020-09-27 19:30:12 【问题描述】:

我为我的 Facebook 页面设置了我的 Webhok by Ngrok URL,并应用了 Messenger 平台的所有要求,但是当我将消息发送到我的 Facebook 页面时,我遇到了以下错误:

POST /Facebook_Messenger_Token 500 Internal Server Error 

在 Laravel 的 routs 文件中,我使用 Get 和 Post 函数如下:

Route::get('Facebook_Messenger_Token', 'MessengerController@index');
Route::post('Facebook_Messenger_Token', 'MessengerController@index');

当我发送消息时,我在 storage/app.logs/laravel 中收到以下错误:

[2020-06-08 18:44:21] local.ERROR: Undefined variable: id "exception":"[object] (ErrorException(code: 0): Undefined variable: id at C:\\xampp\\htdocs\\AzadApp\\app\\Http\\Controllers\\MessengerController.php:17)
[stacktrace]

我的公共功能索引:

public function index()
    
        // here we can verify the webhook.
        // i create a method for that.
        $this->verifyAccess();

        $user    = json_decode($this->getUser($id)); --this is line 17
        $input   = json_decode(file_get_contents('php://input'), true);
        $id      = $input['entry'][0]['messaging'][0]['sender']['id'];
        $message = $input['entry'][0]['messaging'][0]['message']['text'];

        $response = [
            'recipient'     =>  ['id'   => $id ],
            'message'       =>  ['text' => "Thanks for watching $user->first_name $user->last_name! :)"]
        ];

        $this->sendMessage($response);
    

请支持和感谢。

【问题讨论】:

好像是 csrf 问题,除了 csrf 的这条路线以外,你有没有??? 首先欢迎来到 ***,您应该编辑问题并更改以下内容:1) 而不是屏幕截图,复制并将输出粘贴为文本。 2)您只显示您还应该显示 MessengerController(索引功能)的路线,据我所知,csrf 错误是 419 页面已过期,需要调试 500 错误,因此您可以查看 storage/logs/laravel.log 和过去最后一个错误,如果你自己解决不了,或者给我们展示控制器方法,让我们检查代码中是否有明显的错误。 @TalhaF。不,我该怎么做? @George 非常感谢您的支持,我编辑了我的帖子,所以请重新检查 您好 Azad,您发布的错误非常具有描述性,它表示 id 未在 MessengerController line 17 上定义,确定它是我要求您之前发布它的代码的索引函数。请从MessengerController 复制public function index 并将其粘贴到您的问题中 【参考方案1】:

$id 是在第 19 行(即第 17 行之后)定义的。为了在

上使用它

$user = json_decode($this->getUser($id));

你应该把上面的行放在第 19 行之后

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

不要将第 19 行向上移动(正如我在评论中所说),而是将第 17 行向下移动

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

正在使用之前定义的 $input。

您所要做的就是将第 17 行移到第 19 行下方。

所以现在完整的功能应该是这样的:

public function index()
    
        // here we can verify the webhook.
        // i create a method for that.
        $this->verifyAccess();


        $input   = json_decode(file_get_contents('php://input'), true);
        $id      = $input['entry'][0]['messaging'][0]['sender']['id'];
        $message = $input['entry'][0]['messaging'][0]['message']['text'];
        $user    = json_decode($this->getUser($id));

        $response = [
            'recipient'     =>  ['id'   => $id ],
            'message'       =>  ['text' => "Thanks for watching $user->first_name $user->last_name! :)"]
        ];

        $this->sendMessage($response);
    

【讨论】:

以上是关于POST:来自 laravel 中 Messenger Bot 的 500 内部服务器错误的主要内容,如果未能解决你的问题,请参考以下文章

为啥来自 Vuejs 的 Laravel 8 的 AJAX POST 请求会引发 405(不支持的方法)错误?

如何显示来自Laravel的公共/存储/图像中的图像

此路由不支持 GET 方法。支持的方法:POST。 laravel 5.8 阿贾克斯

Laravel接收来自Pusher的消息

Laravel:无法遍历来自json的对象数组

Laravel 5 PHPUnit 测试 json 帖子