Блог

Размещение поста ВКОНТАКТЕ из Битрикс

План работы:

1. Создание Standalone-приложения во Вконтакте и его настройка

  • Переходим по ссылке – http://vk.com/developers.php и выбираем “Создать приложение”.
  • В следующем окне вводим любое название приложение и выбираем тип “Standalone-приложение”.
  • Запрашиваем код, после чего на мобильный приходит смс, вводим его там же и попадаем на страницу настройки приложения.
  • Переходим на закладку “Настройки”. Здесь заполняем поля “Адрес сайта” и “Базовый домен” на те откуда будем постить. Open API - "включен". Здесь же обращаем внимание на поля “ID приложения” и “Защищенный ключ” они понадобятся далее.

2. Открытие диалога авторизации OAuth и разрешение прав доступа приложению

  • В браузере открываем следующий url https://oauth.vk.com/authorize?client_id=xxxxxxx&scope=offline,wall,groups,photos&redirect_uri=http://api.vkontakte.ru/blank.html&response_type=code где client_id значение “ID приложения” из пункта 1.4, scope - перечисляет права доступа.
  • Откроется окно разрешение прав доступа приложению (авторизация). Необходимо нажать “Разрешить”.

3. Получение code

  • После успешной авторизации Вас должно перенаправить на url: http://api.vkontakte.ru/blank.html#code=xxxxxxxxxxxxxxxx. Запоминаем значение параметра code он понадобится ниже.

4. Получение access_token

  • Подставляем значение параметра code из предыдущего шага, client_id и client_secret берем из пункта 1.4. и переходим по сформированной ссылке. https://oauth.vk.com/access_token?client_id=xxxxxxx&client_secret=xxxxxxxxxxxxxxxxx&code=xxxxxxxxxxxx&redirect_uri=http://api.vkontakte.ru/blank.html
  • Видим ответ от сервера и в нем access_token:{“access_token”:”xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”,”expires_in”:0,”user_id”:xxxxxxxx}

И сам код для постинга в группу Вконтакте:

<?
//1. ВХОДНЫЕ ДАННЫЕ
CModule::IncludeModule("iblock");
$res = CIBlockElement::GetByID($arParams["ID"]);//получаем элемент, который постим
$ar_res = $res->GetNext();
$access_token = "#################################################################";//ранее полученный токен
$group_id = #######;//ID группы ВКОНТАКТЕ
$text = $ar_res['NAME'];
$text = urlencode(iconv('windows-1251', 'UTF-8', $text));//изменение кодировки сообщения в случае необходимости
$link = SITE_SERVER_NAME.$ar_res['DETAIL_PAGE_URL'];
$link = urlencode($link);
if(intval($ar_res["DETAIL_PICTURE"])>0) $photoPath = CFile::GetPath($ar_res["DETAIL_PICTURE"]);
elseif(intval($ar_res["PREVIEW_PICTURE"])>0) $photoPath = CFile::GetPath($ar_res["PREVIEW_PICTURE"]);
//2. УЗНАЕМ СЕРВЕР ДЛЯ КАРТИНКИ
$url1 = 'https://api.vkontakte.ru/method/photos.getWallUploadServer?owner_id='.$group_id.'&access_token='.$access_token;
$oServer = json_decode(file_get_contents($url1));
//3. ОТПРАВКА POST КАРТИНКИ НА СЕРВЕР ВКОНТАКТЕ
$data = array("photo"=>"@".$_SERVER['DOCUMENT_ROOT'].$photoPath);
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_URL, $oServer->response->upload_url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$response = curl_exec($ch);
$response = json_decode($response);
curl_close($ch);
//4. СОХРАНЕНИЕ ФОТО ВКОНТАКТЕ
$url2 = 'https://api.vkontakte.ru/method/photos.saveWallPhoto?server='.$response->server.'&photo='.$response->photo.'&hash='.$response->hash.'&access_token='.$access_token;
$oUrl2 = json_decode(file_get_contents($url2));
$photoID = $oUrl2->response[0]->id;
echo '
photoID = '.$photoID; //5. РАЗМЕЩАЕМ ПОСТ В ГРУППЕ ВКОНТАКТЕ $url3 = 'https://api.vkontakte.ru/method/wall.post?owner_id=-'.$group_id.'&attachments='.$photoID.','.$link.'&from_group=1&access_token='.$access_token;//Готовим url для поста. if(strlen($text)>0) $url3 .='&message='.$text;//Если есть сообщение, то добавляем его. $oUrl3 = json_decode(file_get_contents($url3)); ?>

Если нужно разместить текст без картинки, то пропускаем пункты 2-4 и в строке 35 убираем упоминание о картинке (photoID).

Оставить комментарий



Вам нужен сайт? С чего начать?

Проконсультируем, найдем оптимальное решение, подготовим индивидуальное предложение.