27 августа 2015

Отправка сообщений через API VK средствами PHP для ленивых

PHPAPI
Что мы будем делать: настроим отправку сообщений от имени конкретного пользователя в несколько чатов и другим пользователям используя HTTP запрос средствами PHP, с минимальными усилиями.

Собственно, одними сообщениями мы не ограничимся. Все будет работать через standalone приложение vk по тому принципу, что мы потенциально сможем делать все действия, которые будут доступны этому самому пользователю (точнее все то, на что мы выдадим сами себе права, но об этом чуть позже).

Сообщения рассматриваем именно по той причине, что с ними можно работать только в standalone-приложениях.

План действий:
1. Создаем приложение
2. Получаем access_token
3. отправляем сообщения

1. Создаем приложение


Этот пункт делать под тем аккаунтом, к которому будет привязано приложение (Не обязательно тот же, с которого будут идти сообщения).

Идем сюда vk.com/dev, жмём создать приложение.

image

Имя пишем какое угодно — фигурировать оно нигде не будет.
Тип — Standalone-приложение.

Далее потребуется ввести код с смс-ки которая придет на привязанный к аккаунту номер. После ввода кода ничего не меняем в полях, идем в настройки и копируем ID приложения.

image

Больше тут можно ничего не трогать.


2. Используя ID и secret_key из приложения получаем access_token


access_token — строка из некоторого количества символов, которая будет отправляться с POST запросом для выполнения каких то функций. Собственно, к ней привязано, от имени какого пользователя будем действовать и что нам можно будет делать.

Для этого создаем на сайте страничку вот с таким кодом:
<?

$client_id = '1111111';
$scope = 'offline,messages'
?>

<a href="https://oauth.vk.com/authorize?client_id=<?=$client_id;?>&display=page&redirect_uri=https://oauth.vk.com/blank.html&scope=<?=$scope;?>&response_type=token&v=5.37">Push the button</a>

$client_id — собственно, ID нашего приложения из пункта 1.

$scope — список прав, которые мы можем делать от имени нашего пользователя. Конктерно, для нашей задачи подходит именно такой: возможность доступа в любое время (offline), и доступ к сообщениям (messages). Если надо больше, полный список тут. Можно выставлять либо битовой маской, либо перечислить названия.

Далее, важный момент: Заходим на нашу страничку с кнопкой, будучи залогованы в ВК под тем пользователем, от имени которого будем работать, и жамкаем по кнопочке. Появится подобный запрос:

image

Помимо пункта доступ к общей информации, все остальные пункты будут соответствовать списку разрешений, которые были переданы в scope. Жмем далее и видим следующее:

image

Красным выделен acces_token, ради которого весь второй пункт и писался.


3. HTTP запросами, передавая через POST параметры отправляем сообщения или используем любые другие методы API



Для нетерпеливых, проверить что все работает можно так:

Заменяем нули в конце на наш acces_token и переходим по этой ссылке в браузере.
https://api.vk.com/method/messages.send?user_id=6269901&message=habrahabr&v=5.37&access_token=000000

Что произойдет:
Сообщение с текстом из параметра message будет отправлено пользователю c указанным user_id. (Если оставить как есть — придет мне. Я не обижусь).

Параметры получателя:

  • user_id — id пользователя-адресата
  • domain — вместо user_id можно указать имя странички адресата (то, что в url-е после vk.com)
  • chat_id — сообщение уйдет в чат. Чтоб взять id чата, заходим в нужный чат, url будет иметь вид vk.com/im?peers=000000&sel=c888. Наш chat_id будет 888 (! не с888)

Другие параметры отправки сообщений.

Полный список методов (при параметре scope=offline,messages) работать можно будет, соответственно только с разделом сообщений.

Ну и напоследок функция для отправки сообщения через POST. Простая, как автомат Калашникова — просто для наглядности:
function send($id , $message)
{
    $url = 'https://api.vk.com/method/messages.send';
    $params = array(
        'user_id' => $id,    // Кому отправляем
        'message' => $message,   // Что отправляем
        'access_token' => '0000000000000000000000000000',  // access_token можно вбить хардкодом, если работа будет идти из под одного юзера
        'v' => '5.37',
    );

    // В $result вернется id отправленного сообщения
    $result = file_get_contents($url, false, stream_context_create(array(
        'http' => array(
            'method'  => 'POST',
            'header'  => 'Content-type: application/x-www-form-urlencoded',
            'content' => http_build_query($params)
        )
    )));
}



Напоследок, все ссылки:

Страница разработчиков
Создание приложения
Список возможных разрешений
Все методы
Параметры отправки сообщения

Таки всё.
Теги:vkontakte apiphp
Хабы: PHP API
-8
103,9k 143
Комментарии 24
Похожие публикации
Лучшие публикации за сутки

Партнерские материалы

Разместить