PHP SDK может быть установлен с помощью следующей команды в Composer:
composer require vkcom/vk-php-sdk
Создайте объект VKApiClient с помощью следующего кода:
$vk = new VKApiClient();
Также Вы можете инициализировать VKApiClient с другой версией API или другим языком, например:
$vk = new VKApiClient('5.95');
$vk = new VKApiClient('5.95', VKLanguage::ENGLISH);
SDK предоставляет возможность авторизации на основе протокола OAuth 2.0 в API ВКонтакте. Пожалуйста, ознакомьтесь с
полной документацией перед началом работы.
OAuth 2.0 Authorization Code Flow позволяет обращаться к методам API с серверной стороны Вашего приложения.
Эта схема состоит из двух шагов — получение
code и обмен
code на ключ доступа. В первую очередь вы должны получить
code (
инструкция для авторизации пользователя,
инструкция для авторизации сообщества), перенаправив пользователя на страницу авторизации следующим образом:
Создайте объект VKOAuth:
$oauth = new VKOAuth();
$oauth = new VKOAuth();
$client_id = 1234567;
$redirect_uri = 'https://example.com/vk';
$display = VKOAuthDisplay::PAGE;
$scope = array(VKOAuthUserScope::WALL, VKOAuthUserScope::GROUPS);
$state = 'secret_state_code';
$browser_url = $oauth->getAuthorizeUrl(VKOAuthResponseType::CODE, $client_id, $redirect_uri, $display, $scope, $state);
$oauth = new VKOAuth();
$client_id = 1234567;
$redirect_uri = 'https://example.com/vk';
$display = VKOAuthDisplay::PAGE;
$scope = array(VKOAuthGroupScope::MESSAGES);
$state = 'secret_state_code';
$groups_ids = array(1, 2);
$browser_url = $oauth->getAuthorizeUrl(VKOAuthResponseType::CODE, $client_id, $redirect_uri, $display, $scope, $state, $groups_ids);
Ключ доступа пользователя и
ключ доступа сообщества используют разные значения в массиве
scope.
После успешной авторизации браузер перенаправит пользователя на указанный
redirect_uri.
code будет передан в GET-параметре на указанный Вами адрес:
https://example.com?code=CODE
Затем используйте этот метод для получения
access_token:
$oauth = new VKOAuth();
$client_id = 1234567;
$client_secret = 'SDAScasd'
$redirect_uri = 'https://example.com/vk';
$code = 'CODE';
$response = $oauth->getAccessToken($client_id, $client_secret, $redirect_uri, $code);
$access_token = $response['access_token'];
redirect_uri должен совпадать с тем, который использовался на первом шаге.
В отличие от Authorization Code Flow, эта схема позволяет получить ключ доступа с ограниченным сроком действия.
Прочитайте подробнее о
ключе доступа пользователя и
ключе доступа сообщества.
В первую очередь создайте объект VKOauth:
$oauth = new VKOAuth();
$oauth = new VKOAuth();
$client_id = 1234567;
$redirect_uri = 'https://example.com/vk';
$display = VKOAuthDisplay::PAGE;
$scope = array(VKOAuthUserScope::WALL, VKOAuthUserScope::GROUPS);
$state = 'secret_state_code';
$revoke_auth = true;
$browser_url = $oauth->getAuthorizeUrl(VKOAuthResponseType::TOKEN, $client_id, $redirect_uri, $display, $scope, $state, null, $revoke_auth);
Чтобы согласие пользователя запрашивалось в любом случае (даже если он уже давал права приложению), передавайте
revoke_auth со значением
true.
$oauth = new VKOAuth();
$client_id = 1234567;
$redirect_uri = 'https://example.com/vk';
$display = VKOAuthDisplay::PAGE;
$scope = array(VKOAuthGroupScope::MESSAGES);
$state = 'secret_state_code';
$groups_ids = array(1, 2);
$browser_url = $oauth->getAuthorizeUrl(VKOAuthResponseType::TOKEN, $client_id, $redirect_uri, $display, $scope, $state, $groups_ids);
Параметры аналогичны пункту 4.2.1.
После успешной авторизации браузер перенаправит пользовтаеля на указанный
redirect_uri.
access_token будет передан как фрагмент на указанный Вами адрес:
Для ключа доступа пользователя
https://example.com#access_token=533bacf01e11f55b536a565b57531ad114461ae8736d6506a3&expires_in=86400&user_id=8492&state=123456
Для ключа доступа сообщества
https://example.com#access_token_XXXXXX=533bacf01e11f55b536a565b57531ad114461ae8736d6506a3&expires_in=86400
access_token — новый ключ доступа.
expires_in — срок действия ключа доступа в секундах.
user_id — идентификатор пользователя.
state — строка, переданная в запросе авторизации.
access_token_
XXXXXX — ключ доступа сообщества, где XXXXXX — идентификатор сообщества.
Список всех методов API Вы можете найти
на этой странице.
Пример вызова метода
users.get:
$vk = new VKApiClient();
$response = $vk->users()->get($access_token, array(
'user_ids' => array(1, 210700286),
'fields' => array('city', 'photo'),
));
Пожалуйста, прочитайте
полное руководство перед началом работы.
Вызовите
photos.getMessagesUploadServer, чтобы получить адрес для загрузки файла:
$vk = new VKApiClient();
$address = $vk->photos()->getMessagesUploadServer('{access_token}');
Затем используйте метод
upload(),чтобы отправить файлы на полученный
upload_url:
$vk = new VKApiClient();
$photo = $vk->getRequest()->upload($address['upload_url'], 'photo', 'photo.jpg');
В ответе Вы получите JSON-объект с полями
server,
photo,
hash. Чтобы сохранить фотографию, вызовите метод
photos.saveMessagesPhoto с этими тремя параметрами:
$vk = new VKApiClient();
$response_save_photo = $vk->photos()->saveMessagesPhoto($access_token, array(
'server' => $photo['server'],
'photo' => $photo['photo'],
'hash' => $photo['hash'],
));
Пожалуйста, прочитайте
полное руководство перед началом работы.
Вызовите метод
video.save, чтобы получить адрес для загрузки файла:
$vk = new VKApiClient();
$address = $vk->video()->save($access_token, array(
'name' => 'My video',
));
Затем используйте метод
upload(),чтобы отправить файл на полученный
upload_url:
$vk = new VKApiClient();
$video = $vk->getRequest()->upload($address['upload_url'], 'video_file', 'video.mp4');
Некоторое время после загрузки видео находится в процессе обработки.
Включите Bots Long Poll API в Вашем сообществе и укажите события, которые нужно отслеживать, с помощью этого метода:
$vk = new VKApiClient();
$vk->groups()->setLongPollSettings($access_token, array(
'group_id' => 159895463,
'enabled' => 1,
'message_new' => 1,
'wall_post_new' => 1,
));
Переопределите методы из VKCallbackApiHandler, чтобы отслеживать события:
class CallbackApiMyHandler extends VKCallbackApiHandler {
public function messageNew($object) {
echo 'New message: ' . $object['body'];
}
public function wallPostNew($object) {
echo 'New wall post: ' . $object['text'];
}
}
Чтобы начать отслеживание событий в Long Poll, создайте экземпляр класса CallbackApiMyHandler, класа VKCallbackApiLongPollExecutor, и вызовите метод listen():
$vk = new VKApiClient();
$access_token = 'asdj4iht2i4ntokqngoiqn3ripogqr';
$group_id = 159895463;
$wait = 25;
$handler = new CallbackApiMyHandler();
$executor = new VKCallbackApiLongPollExecutor($vk, $access_token, $group_id, $handler, $wait);
$executor->listen();
Параметр
wait соответствует периоду «ожидания» запроса.
В вызове функции
listen() Вы также можете задать номер события, начиная с которого нужно получать обновления. Значение по умолчанию — номер последнего события.
Пример:
$vk = new VKApiClient();
$access_token = 'asdj4iht2i4ntokqngoiqn3ripogqr';
$group_id = 159895463;
$ts = 12;
$wait = 25;
$executor = new VKCallbackApiLongPollExecutor($vk, $access_token, $group_id, $handler, $wait);
$executor->listen($ts);
Подробную информацию о Callback API Вы можете найти
на этой странице.
Вам нужно настроить Callback API в разделе «Управление сообществом» Вашей группы или публичной страницы.
В первую очередь Вам необходимо подтвердить адрес сервера. ВКонтакте отправляет запрос на Ваш сервер с типом события
confirmation, в ответ на которое необходимо вернуть контрольную строку (код подтверждения). На все другие типы уведомлений Ваш сервер должен отвечать строкой "ok".
Пример:
use VK\CallbackApi\Server\VKCallbackApiServerHandler;
class ServerHandler extends VKCallbackApiServerHandler {
const SECRET = 'ab12aba';
const GROUP_ID = 123999;
const CONFIRMATION_TOKEN = 'e67anm1';
function confirmation(int $group_id, ?string $secret) {
if ($secret === static::MY_SECRET && $group_id === static::GROUP_ID) {
echo static::CONFIRMATION_TOKEN;
}
}
public function messageNew(int $group_id, ?string $secret, array $object) {
echo 'ok';
}
}
$handler = new ServerHandler();
$data = json_decode(file_get_contents('php://input'));
$handler->parse($data);
Чтобы обрабатывать события, переопределите методы из класса VKCallbackApiServerHandler.
Обработчик события confirmation содержит два аргумента: идентификатор сообщества и секретный ключ. Вам необходимо переопределить его.