Для начала вы должны быть авторизированы в VK и являться администратором группы или страницы. Далее нужно создать приложение.
Создаем Standalone-приложение на https://vk.com/apps?act=manage
В настройках приложения включаем Open API, указываем адрес своего сайта и базовый домен, там же находится ID приложения и защищенный ключ.
Этап 1
Нужно получить права и секретный код. Формируем URL подставляя данные своего приложения и вставляем его в браузер.
https://oauth.vk.com/authorize?client_id=
ID_ПРИЛОЖЕНИЯ
&display=page
&redirect_uri=https://api.vk.com/blank.html&scope=offline,wall,photos
&response_type=code
В ответе получаем в секретный код.
Этап 2
Запрашиваем access_token
. Формируем новый URL, подставив client_id
, client_secret
и полученный выше код. В ответе получаем access_token
.
https://oauth.vk.com/access_token?client_id=ID_ПРИЛОЖЕНИЯ
&client_secret=ЗАЩИЩЕННЫЙ_КЛЮЧ
&redirect_uri=https://api.vk.com/blank.html
&code=СЕКРЕТНЫЙ_КОД
Далее используем полученный токен в запросах к VK API:
Следующий PHP-код добавит пост с текстом и ссылкой на сайт.
Описание метода wall.post
на https://vk.com/dev/wall.post
$group_id = 'ID_ПРИЛОЖЕНИЯ';
$access_token = 'ACCESS_TOKEN';
$message = 'Hello, world!';
$link = 'URL_СТРАНИЦЫ';
// Отправляем сообщение.
$params = array(
'v' => '5.70',
'access_token' => $access_token,
'owner_id' => '-' . $group_id,
'from_group' => '1',
'message' => $message,
'attachments' => $link
);
file_get_contents('https://api.vk.com/method/wall.post?' . http_build_query($params));
Результат
Картинка в ссылке берется с сайта. VK пытается найти картинку в тексте страницы, но можно ее указать мета-тегом в <head>
страницы.
В тексте поста, переносы строк можно сделать с помощью \r\n
.
$group_id = 'ID_ПРИЛОЖЕНИЯ';
$access_token = 'ACCESS_TOKEN';
$message = 'Hello, world!';
$image = __DIR__ . '/logo.png';
// Получение сервера vk для загрузки изображения.
$server = file_get_contents('https://api.vk.com/method/photos.getWallUploadServer?group_id=' . $group_id . '&access_token=' . $access_token . '&v=5.00');
$server = json_decode($server);
if (!empty($server->response->upload_url)) {
// Отправка изображения на сервер.
if (function_exists('curl_file_create')) {
$curl_file = curl_file_create($image);
} else {
$curl_file = '@' . $image;
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $server->response->upload_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, array('photo' => $curl_file));
$upload = curl_exec($ch);
curl_close($ch);
$upload = json_decode($upload);
if (!empty($upload->server)) {
// Сохранение фото в группе.
$save = file_get_contents('https://api.vk.com/method/photos.saveWallPhoto?group_id=' . $group_id . '&server=' . $upload->server . '&photo=' . stripslashes($upload->photo) . '&hash=' . $upload->hash . '&access_token=' . $access_token . '&v=5.00');
$save = json_decode($save);
if (!empty($save->response[0]->id)) {
// Отправляем сообщение.
$params = array(
'v' => '5.70',
'access_token' => $access_token,
'owner_id' => '-' . $group_id,
'from_group' => '1',
'message' => $message,
'attachments' => 'photo' . $save->response[0]->owner_id . '_' . $save->response[0]->id
);
file_get_contents('https://api.vk.com/method/wall.post?' . http_build_query($params));
}
}
}
Результат:
-
PHP ошибка:
Warning: file_get_contents() [function.file-get-contents]: Unable to find the wrapper "https" - did you forget to enable it when you configured PHP?
Функция
file_get_contents()
не может подключится по https, нужно включить PHP модуль openSSL. -
API возвращает ошибку –
error_code: 14, error_msg: Captcha needed
Это происходит из-за слишком частых запросов к API или у учетной записи VK был отвязан номер мобильного телефона.