Vk api error 214

Что делать, если при попытке публикации на стену группы ВКонтакте вы постоянно получаете такую ошибку: error_code = 214, error_msg = Access to adding post denied: access to the wall is closed?

На текущий момент публикация на стене пользователя (или в группе) в соцсети ВКонтакте является достаточно распространённой задачей. Существует множество сторонних библиотек от пользователей, «запиливших свой велосипед» для решения этой задачи. Но есть один нюанс, который может запросто поставить вас в ступор, когда после успешных попыток опубликовать записи на стене пользователя, вы вдруг не сможете этого сделать на стене группы, хотя (казалось бы) все условия из официальной документации соблюдены чётко. Злосчастная ошибка error_code = 214 может слегка подпортить вам жизнь…

Да чего далеко ходить: если мы хотим организовать публикацию на стене пользователя вконтакте (рассмотрим частный случай: пользователь и есть владелец Standalone приложения), то открываем официальную документацию, находим там описание нужного нам метода wall.post, делаем всё по инструкции и если руки растут из плеч, то всё начинает сразу же работать как по часам.

Я не буду описывать предшествующие этому шаги (добавление Standalone приложения, получения appId и секретного ключа, получения access_token’а — это уже неоднократно и подробно расписывалось до меня, google и яндекс знают эту тему «на зубок»), вы уже наверняка реализовали их сами.

А теперь то, ради чего и писалась эта заметка: публикация на стене группы вконтакте.

В «прекрасной» документации метода wall.post всё достаточно подробно описано, чтобы можно было спокойно реализовать публикацию на стене группы через созданное нами буквально 10 минут назад приложение. Ключевым фактором в этом методе является указание параметра: owner_idидентификатор пользователя или сообщества, на стене которого должна быть опубликована запись. Казалось бы, в чём проблема? Указываем вместо ID-пользователя, на стене которого мы только что успешно публиковали записи, ID-группы и пробуем!.. А вот тут-то нас ждёт сюрприз в виде вот такой ошибки: error_code = 214, error_msg = Access to adding post denied: access to the wall is closed.

Стоп! Первым делом проверяем, все ли необходимые scope=friends,wall,groups,offline мы указали при получении access_token‘а? Ну тут всё верно. Кстати, чтобы вы не искали отдельно (если до этого момента ещё не нашли), вот ссылка для получения токена:

https://oauth.vk.com/authorize?client_id=<ИД вашего приложения>&scope=friends,wall,groups,offline&redirect_uri=https://oauth.vk.com/blank.html&response_type=token

Так вот… Нигде в документации не сказано, что для того, чтобы опубликовать запись на стене группы вконтакте методом wall.post нужно указать ID этой группы в виде owner_id: –123456, где 123456 — это номер соответствующей группы. Как только вы добавите этот «минус» к идентификатору группы, у вас скорее всего всё сразу же заработает, как заработало в моём случае.

Вот такие вот они издержки «недописок» официальной документации ВКонтакте.

На чтение 5 мин. Просмотров 16 Опубликовано 15.12.2019

Ошибки при постинге на стену Вконтакте

Иногда при попытке разместить пост на стене из приложения с помощью метода Вконтакте API wall.post возвращаются следующие ошибки:

Документация VK API не балует нас подробностями. На странице с описанием метода написано, что ошибка с кодом 214 означает «Превышен лимит на число публикаций в сутки» (https://vk.com/dev/wall.post), а в разделе с перечислением кодов ошибок вообще ничего полезного по теме (https://vk.com/dev/errors).

Тем не менее опытным путем выясняется следующее.

Ошибка «214 Wall post access is denied» показывается если владелец стены запретил пользователю постить на его стене (настройка «Кто может оставлять записи на моей странице»)

Ну это было понятно, в ошибке прямым текстом это и сказано. Вторая ошибка менее очевидна.

Ошибка «214 Access to adding post denied: access to the wall is closed» возвращается если владелец стены запретил пользователю видеть записи на его стене (настройка «Кто видит чужие записи на моей странице»)

Описание:
Ошибка появляется тогда, когда у аккаунта, с помощью которого Вы делаете рассылку нету привилегий оставить запись на этой стене. Причин этому много: от закрытой стены до заблокированной стены пользователя или группы, в которую Вы пытаетесь рассылать с текущего аккаунта. Решение проблемы*:
Удалите текущую группу или пользователя из списка рассылок или попробуйте рассылать с другого аккаунта

* Попробуйте проверить всю информацию при рассылке: тексты, подключенного пользователя, прикрепления, списки рассылки и прочее. Все эти факторы могут влиять на выдачу ошибок сайтом ВК и, соответственно, на корректную работоспособность программы.

Помните, что эти ошибки выдает программе сам сайт ВКонтакте и разработчик программы может не знать точную причину возникновеня ошибки, а вариант, предложеный выше может не сработать по разным причинам. В случае возникновения такой ошибки, Вы можете поискать варианты ее решения в интернете. Вы можете использовать следующий запрос в поисковой системе «Ошибка ВКонтакте №214 Access to adding post denied: access to the wall is closed как исправить» или другие подобные запросы на Ваш выбор.

Вариант(ы) решения этой проблемы относятся только к программе VK-Spam-Master. Вы можете скачать программу VK-Spam-Master чтобы получить возможность рассылать сообщения с минимальными потерями и подобными ошибками, и с максимальной поддержкой.

Выше предоставлен список позможных ошибок которые могут возникать у пользователей программы VK-Spam-Master во время использования функционала программы.

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

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

На страницах этих ошибок (предоставленых выше) описаны способы их возникновения и возможные варианты их решения, если таковые имеются

На текущий момент публикация на стене пользователя (или в группе) в соцсети ВКонтакте является достаточно распространённой задачей. Существует множество сторонних библиотек от пользователей, «запиливших свой велосипед» для решения этой задачи. Но есть один нюанс, который может запросто поставить вас в ступор, когда после успешных попыток опубликовать записи на стене пользователя, вы вдруг не сможете этого сделать на стене группы, хотя (казалось бы) все условия из официальной документации соблюдены чётко. Злосчастная ошибка error_code = 214 может слегка подпортить вам жизнь.

Да чего далеко ходить: если мы хотим организовать публикацию на стене пользователя вконтакте (рассмотрим частный случай: пользователь и есть владелец Standalone приложения), то открываем официальную документацию, находим там описание нужного нам метода wall.post, делаем всё по инструкции и если руки растут из плеч, то всё начинает сразу же работать как по часам.

Я не буду описывать предшествующие этому шаги (добавление Standalone приложения, получения appId и секретного ключа, получения access_token’а — это уже неоднократно и подробно расписывалось до меня, google и яндекс знают эту тему «на зубок»), вы уже наверняка реализовали их сами.

А теперь то, ради чего и писалась эта заметка: публикация на стене группы вконтакте.

В «прекрасной» документации метода wall.post всё достаточно подробно описано, чтобы можно было спокойно реализовать публикацию на стене группы через созданное нами буквально 10 минут назад приложение. Ключевым фактором в этом методе является указание параметра: owner_ >

Стоп! Первым делом проверяем, все ли необходимые scope=friends,wall,groups,offline мы указали при получении access_token‘а? Ну тут всё верно. Кстати, чтобы вы не искали отдельно (если до этого момента ещё не нашли), вот ссылка для получения токена:

Так вот. Нигде в документации не сказано, что для того, чтобы опубликовать запись на стене группы вконтакте методом wall.post нужно указать ID этой группы в виде owner_id: –123456, где 123456 — это номер соответствующей группы. Как только вы добавите этот «минус» к идентификатору группы, у вас скорее всего всё сразу же заработает, как заработало в моём случае.

Вот такие вот они издержки «недописок» официальной документации ВКонтакте.

Перейти к содержанию

VK API Error Code – Коды ошибок Вконтакте

Список всех возвращаемых кодов ошибок API в ВК

Код ошибки Описание
1 Произошла неизвестная ошибка.
Попробуйте повторить запрос позднее.
2 Приложение выключено. 
Нужно включить приложение в настройках https://vk.com/editapp?id={Ваш API_ID} или воспользоваться тестовым режимом (test_mode=1)
3 Передан неизвестный метод.
Нужно проверить указано ли название вызываемого метода: https://vk.com/dev/methods.
4 Неверная подпись. 
5 Авторизация пользователя не удалась.
Следует убедиться, что используется верная схема авторизации.
6 Слишком много запросов в секунду.
Нужно задать больший интервал между запросами или использовать метод execute. Узнать подробнее об ограничениях на частоту вызовов можно тут: https://vk.com/dev/api_requests.
7 Нет прав для выполнения этого действия.
Следует проверить, получены ли необходимые права доступа при авторизации. Сделать это можно с помощью метода account.getAppPermissions.
8 Неверный запрос.
Нужно проверить синтаксис запроса и список параметров, которые используются.
9 Слишком много однотипных действий.
Нужно уменьшить число однотипных обращений. Для оптимизации работы можно использовать execute или JSONP.
10 Произошла внутренняя ошибка сервера.
Попробуйте повторить запрос позже.
11 В тестовом режиме приложение должно быть выключено или пользователь должен быть залогинен.
Следует выключить приложение в настройках https://vk.com/editapp?id={Ваш API_ID}
14 Требуется ввод кода с картинки (Captcha).
Процесс обработки этой ошибки подробно описан на странице.
15 Доступ запрещён.
Следует убедиться, что используются верные идентификаторы, а также, что доступ к запрашиваемому контенту для текущего пользователя есть в полной версии сайта.
16 Требуется выполнение запросов по протоколу HTTPS, т.к. пользователь включил настройку, требующую работу через безопасное соединение.
Во избежание возникновения этой ошибки, в Standalone-приложении можно предварительно проверять состояние этой настройки у пользователя методом account.getInfo.
17 Требуется валидация пользователя.
Действие требует подтверждения — нужно перенаправить пользователя на служебную страницу для валидации.
18 Страница удалена или заблокирована.
Страница пользователя была удалена или заблокирована
20 Данное действие запрещено для не Standalone приложений.
Если ошибка появляется несмотря на то, что приложение имеет тип Standalone, следует убедиться, что при авторизации было использовано redirect_uri=https://oauth.vk.com/blank.html. Подробнее на странице: https://vk.com/dev/auth_mobile.
21 Данное действие разрешено только для Standalone и Open API приложений.
23 Метод был выключен.
Ознакомиться со всеми актуальными методами ВК API, доступными в настоящий момент можно тут: https://vk.com/dev/methods.
24 Требуется подтверждение со стороны пользователя.
27 Ключ доступа сообщества недействителен.
28 Ключ доступа приложения недействителен.
29 Достигнут количественный лимит на вызов метода.
Узнать подробнее об ограничениях на количество вызовов можно тут:
https://vk.com/dev/data_limits
30 Профиль является приватным.
Информация, которая запрашивается о профиле, недоступна с используемым ключом доступа
33 Еще не реализовано.
100 Один из необходимых параметров был не передан или неверен.
Следует проверить список требуемых параметров и их формат на странице с описанием метода.
101 Неверный API ID приложения.
Нужно найти приложение в списке администрируемых на странице, и указать в запросе правильный API_ID (идентификатор приложения).
113 Неверный идентификатор пользователя.
Следует убедиться, что используется правильный идентификатор. Получить ID по короткому имени можно методом utils.resolveScreenName.
150 Неверный timestamp (метка времени).
Актуальное значение можно получить методом utils.getServerTime.
200 Доступ к альбому запрещён.
Нужно убедиться, что используются верные идентификаторы (для пользователей owner_id — положительный, для сообществ — отрицательный), и доступ к контенту, которые запрашивается, для текущего пользователя есть в полной версии сайта.
201 Доступ к аудио запрещён.
Нужно убедиться, что используются верные идентификаторы (для пользователей owner_id — положительный, для сообществ — отрицательный), и доступ к контенту, которые запрашивается, для текущего пользователя есть в полной версии сайта.
203 Доступ к группе запрещён.
Нужно убедиться, что текущий пользователь является участником или руководителем группы (для закрытых и частных групп и встреч).
300 Альбом переполнен.
Перед продолжением работы нужно удалить лишние объекты из альбома или использовать другой альбом.
500 Действие запрещено. Вы должны включить переводы голосов в настройках приложения.
Следует проверить настройки приложения: https://vk.com/editapp?id={Ваш API_ID}&section=payments
600 Нет прав на выполнение данных операций с рекламным кабинетом.
603 Произошла ошибка при работе с рекламным кабинетом.
3300 Требуется рекапча.
3301 Требуется подтверждение телефона.
3302 Требуется подтверждение пароля.
3303 Требуется проверка приложения Otp.
3304 Требуется подтверждение по электронной почте.
3305 Требуется утвердить голоса.

VK API Error Code

zelenin писал(а):а что это? это Implicit flow?

У меня 4 файла — index.php , auth.php, VK.php, config.php и send.php

С нарытого мною материала — ориентируюсь на standalone приложение. Встает вопрос — каким образом авторизировать пользователя, не сбрасывая токен, либо же это остается неизбежным?

index.php:

Код: Выделить всё

<?php require_once 'config.php';?>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    <link rel="stylesheet" href="style.css" type="text/css">
    <title>Тестовый сайт</title>
</head>
<body>
<div id="container">
    <h2>Контент сайта</h2>
    <p>
        <strong><a href="auth.php">Авторизация</a></strong>
    </p>
   <?php if(isset($_SESSION['user'])):
        $user  =   $_SESSION['user']->response[0];?>
        <img src="<? echo $user->photo_medium;?>">
        <?php echo $user->first_name;?>  <?php echo $user->last_name;?>
        <form action="send.php" method="post">
            <textarea name = "description"></textarea>
            <button>Отправить</button>
        </form>
   <?php endif;?>
    <?php if(isset($_SESSION['access_token'])):
       $access_token    =   $_SESSION['access_token']; ?>
    <?php endif;?>
</div>
</body>
</html>

auth.php:

Код: Выделить всё

require_once 'config.php';
$ob = new VK( APP_ID_STAND_ALONE, APP_SECRET_STAND_ALONE );
if(!isset($_GET['code'])) {
    $request_params = [
        'client_id'         =>      APP_ID_STAND_ALONE,
        'scope'             =>      'offline',
        'redirect_uri'      =>      $ob::REDIRECT_URI,
        'response+type'     =>      'code',
    ];
    // printArr($request_params);
    $url = $ob::URL_AUTH.'?'. http_build_query($request_params);
    $ob->redirect($ob::URL_AUTH.'?'. http_build_query($request_params));
}
if($_GET['code']) {
    $ob->setCode($_GET['code']);
    $res = $ob->getToken();
    if($res){
        $ob->getUser();
    }
    else {
        echo '<pre>';
            printArr($_SESSION['error']);
        echo '</pre>';
        exit();
    }
}
if(isset($_GET['error'])) {
    exit($_GET['error_description']);
}
if($_GET['error']) {
    exit($_GET['error']);
} 

VK.php

Код: Выделить всё

class VK {
    // возвращаемый код
    private $code;
    // токен
    private $access_token;
    // id пользователя
    private $uid;
    private $app_id;
    private $secret;
    /** константы */
    const APP_ID            =   5571602;
    //  секретный  id
    const APP_SECRET        =   '*************';
    // страница редиректа
    const REDIRECT_URI      =   'http://qas.loc/auth.php';
    // ссылка на получение токена
    const URL_ACCESS_TOKEN  =   'https://oauth.vk.com/access_token';
    //  ссылка для авторизации
    const URL_AUTH          =   'http://oauth.vk.com/authorize';
    // запрос на метод
    const URL_METHOD        =   'https://api.vk.com/method';
    const SINGLE_TOKEN      =   '595fd636419b4bc2f1dc218612756bb47829290e73bc3f72664107207287aa9c09be1048ee064fad20a41';
    public function __construct( $app_id, $secret) {
        $this->app_id         =   $app_id;
        $this->secret     =   $secret;
    }

    public function setToken($access_token) {
        $this->access_token         = $access_token;
        $_SESSION['access_token']   = $access_token;
    }
    public function setUid($uid) {
        $this->uid = $uid;
    }
    public function setCode($code) {
        $this->code = $code;
    }
    public function redirect($url){
        header('HTTP/1.1 301 Moved Permanently');
        header('Location:'.$url);
        exit();
    }
    public function getToken(){
        if(!$this->code){
            die('Неверный код');
        }
        $curl           =   curl_init();
        $permissions    =   [
            'notify ', 'friends', 'photos', 'audio',
            'video', 'docs', 'notes', 'pages',
            'status', 'wall', 'groups', 'messages',
            'email', 'notifications', 'stats',
            'ads', 'market', 'offline'
        ];
        $request_params         =       [
            'client_id'         =>      $this->app_id,
            'client_secret'     =>      $this->secret,
            'code'              =>      $this->code,
            'redirect_uri'      =>      self::REDIRECT_URI,
            'scope'             =>      implode(',', $permissions),
            'display'           =>      'page',
            // 'response_type'     =>      'token',
        ];
        $url        =   self::URL_ACCESS_TOKEN.'?'. http_build_query($request_params);
        // exit($url);
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        $result     =   curl_exec($curl);
        // exit($result);
        curl_close($curl);
        $ob         =   json_decode($result);
        if(isset($ob->access_token)) {
            $this->setToken($ob->access_token);
            $this->setUid($ob->user_id);
            return true;
        }
        elseif($ob->error) {
            $_SESSION['error']  =  "ERRORRRR";
            return false;
        }
    }
    public function getUser(){
        if(!$this->access_token) {
            exit('Wrong code');
        }
        if(!$this->uid) {
            exit('Wrong code');
        }
        $fields = [
            'first_name','last_name','nickname','screen_name','sex','bdate','city','country','timezone',
            'photo','photo_medium','photo_big','has_mobile','rate','contact','education', 'online', 'counters'
        ];
        $request_params = [
            'uids'         =>  $this->uid,
            'fields'       =>  implode(',', $fields),
            'access_token' =>  $this->access_token,
        ];
        $curl   = curl_init();
        curl_setopt($curl,  CURLOPT_URL, self::URL_METHOD."/users.get?". http_build_query($request_params));
        curl_setopt($curl,  CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl,  CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($curl,  CURLOPT_RETURNTRANSFER,TRUE);
        $result = curl_exec($curl);
        curl_close($curl);
        $_SESSION['user']   =   json_decode($result);
        $this->wallPost();
        $this->redirect('http://qas.loc');
    }
    public function wallPost($description = false){
        $access_token           =   $this->access_token;
        $message                =   'HELLO';
        // $access_token       =   $_SESSION['access_token'];
        $request_params     =   [
            'owner_id'      =>  126135230,
            'random_id'     =>  mt_rand( 20, 99999999 ), // 22557780  362586227
            'message'       =>  $message,
            'v'             =>  '5.52',
            'access_token'  =>  $access_token,
        ];
        $url    =  self::URL_METHOD.'/message.send?'. http_build_query($request_params);
        $this->redirect('http://qas.loc');
    }
    public function sendMessage($description = false){
        $access_token       =   $this->access_token;
        $description        =   'HELLO';
        // $access_token       =   $_SESSION['access_token'];
        $request_params     =   [
            'user_id'       =>  22557780,
            'random_id'     =>  mt_rand( 20, 99999999 ), // 22557780  362586227
            'peer_id'       =>  22557780,
            'domain'        =>  'mozart',
            'chat_id'       =>  36,
            'message'       =>  $description,
            'v'             =>  '5.52',
            'access_token'  =>  $access_token
        ];
        $url    =  'https://api.vk.com/method/messages.send?'. http_build_query($request_params);
        printArr(json_decode(file_get_contents($url)));
        die();
        $this->redirect('http://qas.loc');
    } 

send.php

Код: Выделить всё

require_once 'config.php';
if(isset($_POST)){
    $description = $_POST['description'];
    $ob = new VK(APP_ID_STAND_ALONE, APP_SECRET_STAND_ALONE);
    // $ob->sendMessage($description);
    $ob->wallPost($description);
} 

Вы писали про Implicit Flow для получения ключа доступа пользователя:

Это реализовано в файле: auth.php

Не понимаю различия — токен приложениия stand-alone и токен, который получает прользователь при авторизации.

В моем случае ни сообщения , ни записи на стену не отправляются. Что я делаю не так?

Понравилась статья? Поделить с друзьями:
  • Vixx error текст песни
  • Vixx error перевод песни
  • Vixx error ноты для гитары
  • Vixx error кириллизация
  • Vixx error аккорды на гитаре