Не работает бот сообщества ВК — нет ответа от сервера. Что делать?

Настроил бота по официальной инструкции ВК. Сервер успешно подтвердил, входящие сообщения регистрируются но не могу получить имя пользователя и отправить сообщение. Настроил логирование входящих и исходящих запросов с сохранением в БД. По ним можно отследить что ответа от сервера ВК нет. Подскажите в чем проблема?

Кот бота:
<?php
if (!isset($_REQUEST)) { return; }
$test = true;
//Подключение к БД
$hostname = "localhost";
$username = "пользователь";
$password = "пароль";
$database = "бд";
$table_log_query = "таблица";
//== Подключенние к БД ==
$dbh = new PDO("mysql:host=$hostname; dbname=$database", $username, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

function log_query($dir, $data) {
    global $table_log_query, $dbh;
    $stmt = $dbh->prepare("INSERT INTO $table_log_query (dir, time, json) VALUES (:pdir, :ptime, :pjson)");
    $stmt ->bindparam(":pdir", $dir);
    $stmt ->bindparam(":ptime", time());
    $stmt ->bindparam(":pjson", serialize($data));
    $stmt->execute();
}
//Строка для подтверждения адреса сервера из настроек Callback API
$api_v = '5.92';
$confirmation_token = 'токенизнастроек';
$token = 'токенсообщества';
$secretKey = 'секретный ключ';
//Получаем и сохраняем уведомление в БД
$data = json_decode(file_get_contents('php://input'));
if ($test) log_query("in",$data);

switch ($data->type) {
    case 'confirmation':
        echo $confirmation_token;
        break;
    case 'message_new':
        $peer_id = $data->object->peer_id;
        //Получаем текст сообщения
        $message_origin = $data->object->text;
        $message = mb_strtolower($message_origin);
        //Имя автора
        $user_info = json_decode(file_get_contents("https://api.vk.com/method/users.get?user_ids={$peer_id}&access_token={$token}&v={$api_v}")); 
        $user_name = $user_info->response[0]->first_name; 
        if ($test) log_query("usr",$user_info);
        $message = $message . ' ' . $user_name;
        //Ответы
        $request_params = [
            'user_id' => $peer_id,
            'random_id' => round(time() / 43),
            'message' => $message,
            'access_token' => $token,
            'v' => $api_v
            
        ];
        //Получаем и сохраняем уведомление в БД
        $get_params = http_build_query($request_params);
        $error = json_decode(file_get_contents('https://api.vk.com/method/messages.send?'. $get_params));
        if ($test) {
            log_query("out",$get_params);
            log_query("err",$error);
        }
        echo('ok');
        break;
        return false;
}
?>


При этом если отправить сообщение боту то в БД появиться следующий лог:
5c04ae15ac6fc739823882.png
  • Вопрос задан
  • 255 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы