PHP VkAPi

kotov

Участник
Автор темы
128
12
Следующий код, вк просто флудит на него запросами о новых сообщениях, видимо не принимает слово Ок, как решить?

PHP:
<?
    ini_set('error_reporting', E_ALL);
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    $VK_TOKEN = 'что-то условное';
    $VK_SECRET = 'что-то условное';
    $VK_CONFIRM = 'что-то условное';
    $data = json_decode(file_get_contents("php://input"));
    switch ($data->type)
    {
        case 'confirmation':
            echo $VK_CONFIRM;
        break;
        case "message_new":
            $userId = $data->object->user_id;
            $request_params = array(
                'message' => "Ты чето написал, я определил",
                'chat_id' => '1',
                'access_token' => $VK_TOKEN,
                'v' => '5.0'
            );
            $get_params = http_build_query($request_params);
            echo "Ok";
            file_get_contents('https://api.vk.com/method/messages.send?'. $get_params);
            break;
    }
?>
 
Решение
Что это значит?
Если ты делаешь LongPoll запрос, то в коде что-то явно не хватает. Например, первоначального запроса.
У ВК есть PHP SDK. Воспользуйся им.
У него там Callback, можно понять по php://input. В Callback нужно отдавать в ответ "ok", для подтверждения правильной обработки запроса, иначе ВК будет стучаться пока не получит ok.
Следующий код, вк просто флудит на него запросами о новых сообщениях, видимо не принимает слово Ок, как решить?

PHP:
<?
23:            echo "Ok";
?>
Измени "Ok" на "ok".

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,695
1,448
видимо не принимает слово Ок
Что это значит?
Если ты делаешь LongPoll запрос, то в коде что-то явно не хватает. Например, первоначального запроса.
У ВК есть PHP SDK. Воспользуйся им.
 

xISRAPILx

Перепишу свою жизнь на PHP
Проверенный
248
173
Что это значит?
Если ты делаешь LongPoll запрос, то в коде что-то явно не хватает. Например, первоначального запроса.
У ВК есть PHP SDK. Воспользуйся им.
У него там Callback, можно понять по php://input. В Callback нужно отдавать в ответ "ok", для подтверждения правильной обработки запроса, иначе ВК будет стучаться пока не получит ok.
Следующий код, вк просто флудит на него запросами о новых сообщениях, видимо не принимает слово Ок, как решить?

PHP:
<?
23:            echo "Ok";
?>
Измени "Ok" на "ok".
 
1) У тебя включены возможности выводов всех возможных варнингов на страницу, а не прямиком в логи.
Замени строки:
PHP:
ini_set('error_resporing', false);
ini_set('display_errors', false);
ini_set('display_startup_errors', false);
2) За счет 1-го пункта твой сервер возвращал Notices/Warnings/Errors, но никак не Ok.
P.S. Там выше написали, что заменить Ok на ok - роли не играет.
3) В PHP быстрее работают массивы с ассоциативными ключами, нежели объекты:
PHP:
$user_id = (int)$data['object']['user_id'];
Для этого замени строку на:
PHP:
$data = json_decode(file_get_contents("php://input"), true); //вторым аргументом в функции json_decode() мы разрешили использовать ассоциативный массив, а не объект
4) Для полной оптимизации, после того, как ты подтвердил ключ (метод confirmation), можешь перед json_decode() вставить следущее:
PHP:
echo 'ok';
fastcgi_finish_request();
В таком случае, твой сервер сначала выдаст ответ 'ok' (HTTP 200 OK) и закроект соединение с Callback API, а потом уже начнет обрабатывать запрос. Это лучше тем, что Callback API не будет флудить твоему серверу запросами, если, к примеру, у тебя в скрипте идет перебор больших значений. Дело в том, что у Callback API установлен лимит ожидания ответа на 10 секунд.
 
  • Нравится
Реакции: shinoa