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

image

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

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





Идем сюда , жмём .

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)
        )
    )));
}

 


 

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