Публикация записей на стену сообщества VK

Для начала вы должны быть авторизированы в VK и являться администратором группы или страницы. Далее нужно создать приложение.

1

Создаем Standalone-приложение на https://vk.com/apps?act=manage

Standalone-приложение vk.com

В настройках приложения включаем Open API, указываем адрес своего сайта и базовый домен, там же находится ID приложения и защищенный ключ.

Включение Open API в настройках приложения

2

Этап 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:

3

Пост с ссылкой

Следующий 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));
PHP

Результат

Пост в VK с текстом и ссылкой на сайт

Картинка в ссылке берется с сайта. VK пытается найти картинку в тексте страницы, но можно ее указать мета-тегом в <head> страницы.

<link rel="image_src" href="https://example.com/image.png">
HTML

В тексте поста, переносы строк можно сделать с помощью \r\n.

4

Пост с картинкой

$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

Результат:

Пост в VK с картинкой
5
  • 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 был отвязан номер мобильного телефона.

16.11.2016, обновлено 21.02.2021
31354

Комментарии 3

Дмитрий Дьячков Дмитрий Дьячков
16 ноября 2020 в 15:44
с версии 5.7
Новый формат записей:
to_id вместо owner_id

И версию поменял на 5.126
$group_id     = '';
$access_token = '';
$message      = '';
$link         = '';
 
// Отправляем сообщение.
$params = array(
	'v'            => '5.126',
	'access_token' => $access_token,
	'to_id'     => '-' . $group_id, 
	'from_group'   => '1', 
	'message'      => $message,
	'attachments'  => $link
);
 
file_get_contents('https://api.vk.com/method/wall.post?' . http_build_query($params));
Артём Блог Артём Блог
11 февраля 2021 в 04:26
Земляк пожалуйста обнови статью если это возможно! Крутой сайт у тебя, очень часто выручает, побольше бы таких полезных сайтов. Успехов тебе и удачи в делах!
Алексей Полоскин Алексей Полоскин
25 июля 2021 в 12:46
Скрипт постит на стену пользователя, а как сделать чтобы постил на стену группы?

, чтобы добавить комментарий.

Другие публикации

Публикация на страницу Facebook через PHP
Facebook ограничил свободный доступ к API. Теперь чтобы получить права для публикации записей нужно...
15737
+1
Автоматическое сжатие и оптимизация картинок на сайте
Изображения нужно сжимать для ускорения скорости загрузки сайта, но как это сделать? На многих хостингах нет...
28418
+8
Вход на сайт через Вконтакте
Многие соцсети позволяют создавать приложения и через API получать данные пользователей, поэтому их использует для быстрой регистрации и авторизации на сайтах.
56857
+10
Метрика API
API Яндекс метрики позволяет получить информацию о посещаемости сайта и формировать отчеты, но с ограничением в 30 запросов в секунду и 5000 в сутки.
17362
+6
Получить фото из Instagram без API
Так как Instagram и Fasebook ограничили доступ к API, а фото с открытого аккаунта всё же нужно периодически получать и...
24686
+7
Подключение к платежной системе Сбербанка
После регистрации в системе эквайринга Сбербанка и получив доступ к тестовой среде, можно приступить к интеграции с...
66918
+24