@EVOSandru6

Как оставить запись на стене группы Вконтакте от лица авторизованного пользователя средствами API VK?

Добрый день,

есть ли способ отправить запись на стену группы от лица пользователя. в приложении типа Веб-сайт или StandAlone? У меня созданы оба. StandAlone со статическим Токеном. У Веб-сайт токен меняется после каждой авторизации.

Я

1. провожу авторизацию пользователя на тестовом сайте
2. запоминаю в сессию ACCESS_TOKEN
3. пытаюсь сделать запись (подразумевается отзыв в группу от лица авторизованного пользователя).

К сожалению в StandAlone можно через АПИ отправлять записи только от имени владельца приложения.

Я же хочу оставлять записи от авторизованного пользователя. Который уже авторизован средставами ВКОНТАКТЕ API примерно таким способом:
if(!$this->code){
            die('Неверный код');
        }
        $curl   = curl_init();
        $request_params = [
            'client_id'         =>      APP_ID,
            'client_secret'     =>      APP_SECRET,
            'code'              =>      $this->code,
            'redirect_uri'      =>      REDIRECT_URI,
        ];
        curl_setopt($curl, CURLOPT_URL, URL_ACCESS_TOKEN.'?'. http_build_query($request_params));
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        $result = curl_exec($curl);
        curl_close($curl);
        $ob = json_decode($result);
        if($ob->access_token){
            $this->setToken($ob->access_token);
            $this->setUid($ob->user_id);
            return true;
        }
        elseif($ob->error) {
            $_SESSION['error']  =  "ERROR";
            return false;
        }


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

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

public function sendMessage($description){
        $access_token    =   $_SESSION['access_token'];
        $request_params     =   [
            'user_id'       =>  22557780,
            'random_id'     =>  mt_rand(20, 99999999), 
            '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');
    }


Ловлю ошибку:
[error_code] => 15
[error_msg] => Access denied: no access to call this method .


Помогите люди добрые!
  • Вопрос задан
  • 1459 просмотров
Решения вопроса 1
neluzhin
@neluzhin
Честно говоря, я не очень понял сути вопроса, поэтому пройдусь сразу по всем возможным пунктам.

К сожалению в StandAlone можно через АПИ отправлять записи только от имени владельца приложения.

Через standalone-приложения можно отправлять записи от имени любого пользователя, который авторизовался через ваше приложение.

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

Пользоваться методами messages.* можно только через standalone-приложения. Для веб-сайтов и iFrame-приложений постинг через метод wall.post доступен только через окно подтверждения, а для standalone-приложений - без каких-либо проблем.

Ловлю ошибку:
[error_code] => 15
[error_msg] => Access denied: no access to call this method .

Вы забываете передать параметр scope при получении токена. Смотрите подробнее о правах доступа вот тут.

И еще: вы не сможете работать с сообщениями пользователя, если вы работаете с пользователем через веб-сайт. Данные методы поддерживаются только standalone-приложениями, которые необходимо использовать в десктопных и мобильных приложениях или в браузерных расширениях. Авторизовать пользователя в standalone-приложении через браузер получится, а вот токен вы получить ни через PHP, ни через JavaScript не сможете, если только не попросите пользователя скопировать токен вручную, что противоречит основам UX, т.к. на странице получения токена написано, чтобы пользователь его не копировал, ибо не безопасно.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы