Проблема с VK API и сURL (PHP)

297
29 августа 2017, 13:01

Помогите разобраться, где я дурак :)

Хочу сделать бота в личных сообщениях сообщества, который бы реагировал на определённые сообщения конкретным ответом. То есть, если пользователь шлёт цифру "1", то получает соответствующую инструкцию, если "2", то другую и так далее.

С моими знаниями (и при помощи гугла) удалось сделать такой вариант:

$messageText = $data->object->body;
$userId = $data->object->user_id;
$userInfo = json_decode(file_get_contents("https://api.vk.com/method/users.get?user_ids={$userId}&v=5.0"));
$user_name = $userInfo->response[0]->first_name;
// Условие для 1
if (trim($messageText) === "1") {
    $request_params = array(
        'message' => "Привет, {$user_name}!<br>" .
                    "Текст для 1",
        'user_id' => $userId,
        'access_token' => $token,
        'v' => '5.0'
    );
    $get_params = http_build_query($request_params);
    file_get_contents('https://api.vk.com/method/messages.send?' . $get_params);
    //Возвращаем "ok" серверу Callback API
    echo('ok');
}
// Условие для 2
elseif (trim($messageText) === "2") {
    $request_params = array(
        'message' => "Привет, {$user_name}!<br>" .
                    "Текст для 2",
        'user_id' => $userId,
        'access_token' => $token,
        'v' => '5.0'
    );
    $get_params = http_build_query($request_params);
    file_get_contents('https://api.vk.com/method/messages.send?' . $get_params);
    //Возвращаем "ok" серверу Callback API
    echo('ok');
}

Этот код проверен уже, и он работает. Но не справляется с задачей. Дело в том, что сообщения, которые отправляются пользователям - большие. И при построении запроса, видимо, просто срабатывает ограничение на количество символов в методе file_get_contents.

Я попробовал сделать на сURL (по примерам документации):

if (trim($messageText) === "1") {
    $msg = "Hello, world";
    //Функция для вызова любого метода API 
    function _vkApi_call($method, $params = array()) { 
        $params['access_token'] = $token; 
        $params['v'] = VK_API_VERSION;
        $url = VK_API_ENDPOINT.$method.'?'.http_build_query($params);
        $curl = curl_init($url); 
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
        $json = curl_exec($curl); 
        curl_close($curl); 
        $response = json_decode($json, true); 
        return $response['response']; 
    } 
    //Функция для вызова messages.send 
    function vkApi_messagesSend($peer_id, $message, $attachments = array()) { 
        return _vkApi_call('messages.send', array( 
            'peer_id' => $peer_id, 
            'message' => $message, 
            'attachment' => implode(',', $attachments) 
        )); 
    } 
    vkApi_messagesSend($userId, $msg); 
    echo('ok');
}

Сообщение от пользователя не прочитывается. В запросах ВК: Error: HTTP response code said error. К сожалению, моих знаний тут не хватает (не судите строго, все с чего-то начинали).

Собственно вопрос: как отправить большое сообщение?

Answer 1

пробуйте через метод POST отправлять

//Функция для вызова любого метода API
function _vkApi_call($method, $params = array())
{
    $params['access_token'] = $token;
    $params['v'] = VK_API_VERSION;
    $url = VK_API_ENDPOINT . $method;
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
    $json = curl_exec($ch);
    curl_close($ch);
    $response = json_decode($json, true);
    return $response['response'];
}
READ ALSO
Как сделать так, чтобы после перезагрузи страницы загруженный файл оставался в input?

Как сделать так, чтобы после перезагрузи страницы загруженный файл оставался в input?

Как сделать так, чтобы после перезагрузи страницы файл оставался в input?

182
Wordpress создать галерею

Wordpress создать галерею

Привет всем, создаю галерею в wordpress, через добавить медиафайл / добавить галерею, вставляю изображение все вроде хорошо

204
Научите делать прокси на php

Научите делать прокси на php

Я уже изучил основы php, и хочется мне сделать прокси, но я не знаю как, скачал какой-то прокси сервер, работает, но вк не работает, ютуб неправильно...

251
не могу передать массив php в js в wordpress

не могу передать массив php в js в wordpress

я формирую большой массив из постороннего API в js хочу что бы при вводе имени происходил сразу поиск совпадений по буквам для этого использую...

186