POST: 500 Internal Server Error от Messenger Bot в laravel

Я настроил URL-адрес Webhok by Ngrok для своей страницы в Facebook и применил все требования к платформе Messenger, но когда я отправляю сообщения на свою страницу в Facebook, я сталкиваюсь со следующей ошибкой:

POST /Facebook_Messenger_Token 500 Internal Server Error 

и в файле маршрутов в Laravel я использую функции 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);
    }

Пожалуйста, поддержите и спасибо.


person Azad    schedule 08.06.2020    source источник
comment
Похоже на проблему csrf, вы исключили эти маршруты из csrf???   -  person sta    schedule 08.06.2020
comment
Сначала добро пожаловать в Stackoverflow, вы должны отредактировать вопрос и изменить следующее: 1) вместо копии скриншота и вставить вывод в виде текста. 2) вы показываете только маршруты, которые вы также должны показывать MessengerController (функция индекса), теперь ошибка csrf - это страница 419, срок действия которой истек, насколько я знаю, ошибка 500 требует отладки, поэтому либо вы можете посмотреть в хранилище/журналы/laravel.log и в прошлом последняя ошибка здесь, если вы не смогли решить ее самостоятельно или показать нам метод контроллера, чтобы мы проверили, есть ли какая-либо очевидная ошибка в коде.   -  person George    schedule 08.06.2020
comment
@TalhaF. Нет, как я могу это сделать?   -  person Azad    schedule 08.06.2020
comment
@ Джордж большое спасибо за вашу поддержку, я отредактировал свой пост, поэтому, пожалуйста, перепроверьте   -  person Azad    schedule 08.06.2020
comment
Еще раз привет, Азад, ошибка, которую вы опубликовали, очень наглядна, она говорит, что идентификатор не определен для MessengerController line 17, наверняка это функция индекса, которую я просил вас опубликовать ранее. скопируйте public function index из MessengerController и вставьте в свой вопрос   -  person George    schedule 08.06.2020
comment
Скопируйте всю функцию, пожалуйста   -  person George    schedule 08.06.2020
comment
@ Джордж готово, дорогой, это достаточно ясно?   -  person Azad    schedule 08.06.2020
comment
да @Azad, так как вы новичок в SO, просмотрите этот пост о том, как задать хороший вопрос stackoverflow.com/help/how- спросить . относительно ошибки $id в json_decode($this->getUser($id)) следует определить, прежде чем использовать ее в строке 17, поэтому перемещение строки 19 перед строкой 17 должно решить вашу проблему.   -  person George    schedule 08.06.2020


Ответы (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);
    }
person George    schedule 08.06.2020