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(不支持的方法)错误?