Демонстрационная конфигурация работы с API ВКонтакте

01.04.20

Интеграция - WEB-интеграция

В статье представлен обзор работы с API ВКонтакте из 1С. А так же рассматривается демонстрационная конфигурация по работе с API.

Скачать исходный код

Наименование Файл Версия Размер
Демонстрационная конфигурация работы с API ВКонтакте
.cf 47,57Kb
271
.cf 47,57Kb 271 Скачать

Создание приложения "ВКонтакте".

Прежде чем приступить к работае с API необходимо создать приложение, от имени которого будут выполняться все действия (размещение записей и фотографий на стене, добавление и чтение комментариев, чтение данных пользователя и т.п).

Для создания приложения необходимо перейти по этой ссылке: https://vk.com/editapp?act=create

На станице создания приложения необходимо ввести название вашего приложения и выбрать тип "Standalone-приложение".

Для подтверждения действия необходимо получить на мобильный телефон сообщение с кодом.

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

Авторизация на сайте ВКонтакте.

Перед работой с API необходимо авторизироваться. ВКонтакте используется способ авторизации OAuth 2.0.

Если в кратце и попростому, то необходимо открыть браузер, перейти по определнному адресу на странице, на которой необходимо ввести данные пользователя. После успешной авторизации возвращается access_token. Его и нужно сохранить, так как он будет использоваться в запросах.

Более подробную информацию можно посмотреть здесь: http://vk.com/dev/auth_mobile

Я же опишу как все это можно реализовать на 1С.

Необходимо создать обработку для авторизации. На форму вывести поле HTML документа (элемент формы ПолеHTMLДокумента). При открытии формы переходить по адресу

https://oauth.vk.com/authorize?client_id=&scope=&redirect_uri=http://api.vk.com/blank.html&display=page&response_type=token

Ниже приведен пример кода. Переход на страницу вставлен в процедуру "ПриОткрытии()"

Процедура ПриОткрытии()
	
	ЭлементыФормы.ПолеHTMLДокумента1.Перейти("https://oauth.vk.com/authorize?client_id=12345" +
		"&scope=photos,wall,offline&redirect_uri=http://api.vk.com/blank.html&" +
		"display=page&response_type=token");
	
КонецПроцедуры

Со списком прав доступа можно ознакомиться на этой странице: http://vk.com/dev/permissions

Единственное, что можно упомянуть - это то, что если вы не хотите постоянно авторизироваться (по умолчанию access_token действует сутки, после чего его необходимо вновь получать), используйте параметр доступа offline. В таком случае срок действия access_token будет неограничен и авторизация потребуется только один раз.

После того, как пользователь верно введен пароль и разрешит приложению использовать необходимые данные будет произведен переход по адресу типа http://api.vk.com/blank.html#access_token=a1dfc7ef2b763d776350375f8a22678a59f28e1ac7e090b4a8486274564d38e9e8a069d10e596223d80d7&expires_in=0&user_id=5184504. Остается отследить такой переход и извлеч из строки адреса необходимую информацию (обымно требуется только access_token).

Для этого необходимо обрабатывать событие "ДокументСформирован" элемента "ПолеHTMLДокумента".

Ниже приведен пример обработки данного события.

Процедура ПолеHTMLДокумента1ДокументСформирован(Элемент)
	
	access_token = "";
	
	Если Элемент.Документ.location.host = "api.vk.com" Тогда
		hash = Сред(Элемент.Документ.location.hash, 2);
		МассивСтрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(hash, "&");
		
		Для каждого Параметр ИЗ МассивСтрок Цикл
			
			ИмяПараметра = "";
			ЗначениеПараметра = "";
			
			Поз = Найти(Параметр, "=");
			Если Поз = 0 Тогда
				ИмяПараметра = Параметр;
				ЗначениеПараметра = "";
			Иначе
				ИмяПараметра = НРег(СокрЛП(Лев(Параметр,Поз-1)));
				ЗначениеПараметра = СокрЛП(Сред(Параметр, Поз+1));
			КонецЕсли;
			
			Если ИмяПараметра = "access_token" Тогда
				access_token = ЗначениеПараметра;
			КонецЕсли;
			
		КонецЦикла;
		
		Константы.access_token = access_token;
		
		Закрыть();
	КонецЕсли;
	
КонецФункции

Отправка запросов к API ВКонтакте.

После того, как получен access_token можно выполнять запросы к API.

Для этого производится GET запрос по определенному адресу и читается ответ. Общий вид HTTP адреса выглядит следующим образом:

https://api.vk.com/method/ИМЯ_МЕТОДА.xml?параметр1=значение1&параметрN=значениеN&access_token=a1dfc7ef2b763d776350375f8a22678a59f28e1ac7e090b4a8486274564d38e9e8a069d10e596223d80d7

Например, для размещения записи "Привет, ВКонтакт!" на стене пользователя http://vk.com/id5184504 будет такой адрес:

https://api.vk.com/method/wall.post.xml?owner_id=5184504&message=Привет, ВКонтакт!&access_token=a1dfc7ef2b763d776350375f8a22678a59f28e1ac7e090b4a8486274564d38e9e8a069d10e596223d80d7

Примечание. Если необходимо произвести действие со стеной группы, то в owner_id устанавливается значение со знаком "-".

Ниже приведен код процедуры, выполняющий запросы к API (следует заметить что используется HTTPS соединение).

Процедура ВызватьМетодAPI(ИмяМетода, Параметры, access_token) Экспорт
	
	ИмяВыходногоФайла = ПолучитьИмяВременногоФайла("xml");
	
	Соединение = Новый HTTPСоединение("api.vk.com",,,,, Истина);
	
	Соединение.Получить("method/" + ИмяМетода + ".xml?" +
				?(ТипЗнч(Параметры) = Тип("Строка"), Параметры + ?(ЗначениеЗаполнено(Параметры), "&", "") + "access_token="+access_token,
				СформироватьСтрокуПараметровЗапроса(Параметры, access_token)),
				ИмяВыходногоФайла);
	
КонецПроцедуры

Описание всех методов вы можете найти на странице для разработчиков ВКонтакте: http://vk.com/dev/methods

Отправка фотографий.

Как производить отправку фотографий можно прочитать в документации ВКонтакте (или посмотреть в демонстационной конфигурации). В этой статье я хочу остановиться лишь на одном моменте.

Изображение отправляется методом POST. Отправляемый файл имеет следующую структуру:

--0123456789
Content-Disposition: form-data; name="photo"; filename="image.jpg"
Content-Type: image/jpeg




--0123456789

 

где 0123456789 - Boundary: некая последовательность символов. Так же необходимо установить HTTP заголовки Content-Type и Content-Length.

Так как в 1С нет методов для работы с двоичными файлами был придуман следующий способ. Формируются 2 текстовый файла: с началом конченого файла:

--0123456789
Content-Disposition: form-data; name="photo"; filename="image.jpg"
Content-Type: image/jpeg

и окончанием

 

--0123456789

Итого получается 3 файла:

1. текстовый файл с началом
2. само изображение
3. текстовый файл с окончанием

Используя метод "ОбъединитьФайлы" соединяем 3 файла в один и отправляем уже полученный файл.

Ниже приведен код демонстирующий отправку файла. 

ИмяВходногоФайла = ПолучитьИмяВременногоФайла("in");
ИмяВходногоФайла1 = ПолучитьИмяВременногоФайла("in1");
ИмяВходногоФайла2 = ПолучитьИмяВременногоФайла("in2");
ИмяВходногоФайла3 = ПолучитьИмяВременногоФайла("in2");
ИмяВыходногоФайла = ПолучитьИмяВременногоФайла("out");

Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");

ВходнойФайл = Новый ЗаписьТекста(ИмяВходногоФайла1, КодировкаТекста.ANSI, Символы.ПС);
ВходнойФайл.ЗаписатьСтроку("--"+Boundary);
ВходнойФайл.ЗаписатьСтроку("Content-Disposition: form-data; name=""photo""; filename=""image.jpg""");
ВходнойФайл.ЗаписатьСтроку("Content-Type: image/jpeg");
ВходнойФайл.ЗаписатьСтроку("");
ВходнойФайл.Закрыть();

Изображение.Записать(ИмяВходногоФайла2);

ВходнойФайл = Новый ЗаписьТекста(ИмяВходногоФайла3, КодировкаТекста.ANSI, Символы.ПС);
ВходнойФайл.ЗаписатьСтроку("");
ВходнойФайл.ЗаписатьСтроку("--"+Boundary);
ВходнойФайл.Закрыть();

МассивФайлов = Новый Массив;
МассивФайлов.Добавить(ИмяВходногоФайла1);
МассивФайлов.Добавить(ИмяВходногоФайла2);
МассивФайлов.Добавить(ИмяВходногоФайла3);

ОбъединитьФайлы(МассивФайлов, ИмяВходногоФайла);

ФайлОтправки = Новый Файл(ИмяВходногоФайла);
РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());

ЗаголовокHTTP = Новый Соответствие;
ЗаголовокHTTP.Вставить("Content-Type", "multipart/form-data; boundary="+Boundary);
ЗаголовокHTTP.Вставить("Content-Length", РазмерФайлаОтправки);

Соединение = Новый HTTPСоединение(АдресЗагрузки);
Соединение.ОтправитьДляОбработки(ИмяВходногоФайла, АдресРесурса, ИмяВыходногоФайла, ЗаголовокHTTP);

Прикрепление карты к сообщению на стене.

В текущей реализации API отсутствует возможность прикрепления карты к сообщению. Что бывает не очень удобно. Например, если в сообщении идет речь о какой-нибудь проводимой акции, то хорошо бы было к нему прикрепить карту с местом проведения акции. Данная задача была решена мной следующим образом: обращением к Google Maps API получается изображение карты, а потом оно прикрепляется к сообщению как обычная картина.

Для того, чтобы получить изображение карты с нужным местом необходимо отправить запрос по адресу

http://maps.google.com/maps/api/staticmap?center=LAT,LONG&zoom=14&size=320x100&maptype=roadmap&markers=color:red%7Ccolor:red%7Clabel:C%7CLAT,LONG&sensor=false

где LAT и LONG географические координаты места. Описание остальных параметров можно найти в описании Google Maps API. Скажу лишь, что приведенные в данном примере по моему мнению являются оптимальными и их можно не менять. В ответ приходит изображение карты.

Ниже приведен пример использования.

// после выполнения вызова в этом файле будет изображение с картой
ИмяФайлаКарты = ПолучитьИмяВременногоФайла("jpg");

Соединение = Новый HTTPСоединение("maps.google.com");
Соединение.Получить("maps/api/staticmap?center="+lat+","+long+"&zoom=14&size=320x100&maptype=roadmap" +
    "&markers=color:red%7Ccolor:red%7Clabel:C%7C"+lat+","+long+"&sensor=false", ИмяФайлаКарты);

 

Демонстрационная конфигурация.

Обновлено 01.04.2020. Актуальная версия демонстрационной конфигурации, содержащая новую библиотеку интеграции с ВК находится по адресу //infostart.ru/public/1217822/

Для демонстрации работы с API и более лучшего понимания всего вышесказанного была создана демонстрационная конфигурация. В этой конфигурации реализован механизм авторизации и отправка сообщения на стену с возможностью прикрепления изображения. Кроме того, в конфигурации существует общий модуль "РаботаССайтомВКонтакте" в котором реализованы готовые вызовы следующих методов API в виде соответсвующих процедур и функций 1С:

  • размещение и удаление записей на стене;
  • добавление, чтение и удаление комментариев к записям;
  • работа с рекламой - получение списка рекламных кабинетов, работа с рекламными кампаниями и рекламными объявлениями (создание, изменение и удаление);
  • работа со списком пользоваталей и получение информации о них;
  • работа с географическими местами;
  • размещение фотографий.

т.е., например, чтобы получить информацию о пользователях можно воспользоваться следующим кодом

РаботаССайтомВКонтакте.ПолучитьИнформациюОПользователях("a1dfc7ef2b763d776350375f8a22678a59f28e1ac7e090b4a8486274564d38e9e8a069d10e596223d80d7", "5184504");

первый параметр access_token, второй - id пользователя.

Возвращаемым значением функций является Структура либо массив структур в завимости от формата ответа сервера. Ключами структуры являются параметры возвращаемые в ответе сервером. Приведенный ниже пример демонстрирует вывод имен пользователей с ID 123456 и 654321.

ДанныеОПользователях = ПолучитьИнформациюОПользователях(access_token, "123456,654321");
Для каждого ДанныеОПользователе Из ДанныеОПользователях Цикл
	Сообщить("Имя пользователя " + ДанныеОПользователе.uid +
		" - " + ДанныеОПользователе.first_name);
КонецЦикла;

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

Общий модуль "РаботаССайтомВКонтакте" и обработку "АвторизацияНаСайте" можно как есть перенести в рабочую конфигурацию и начать использовать API ВКонтакте.

Демонстрационная база работает как в режиме управляемых форм так и в обычном приложении.

Примечание.

Код демонстрационной конфигурации может использоваться в других разработках без каких-либо органичений.

См. также

Интеграция Альфа Авто 5 / Альфа Авто 6 и AUTOCRM / Инфотек

Сайты и интернет-магазины WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    16088    13    18    

13

Интеграция 1С — Битрикс24. Обмен задачами

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс24. Разработка имеет двухстороннюю синхронизацию 1С и Битрикс24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    18182    10    15    

16

Автоматическая загрузка файлов (например, прайс-листов) из электронной почты, FTP, HTTP, их обработка и выгрузка на FTP (на сайт) и для других целей

Прайсы WEB-интеграция Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Автомобили, автосервисы Оптовая торговля, дистрибуция, логистика Управленческий учет Платные (руб)

Программа с заданным интервалом времени (или по ручной команде) скачивает файлы (например, прайс-листы поставщиков) из различных источников: письма электронной почты, FTP или HTTP-адреса, и сохраняет их в каталог упорядоченной структуры. При этом извлекает файлы из архивов, может переименовывать файлы и менять их формат (csv, xls, txt). Можно настроить выгрузку обработанных файлов на сайт (через FTP-подключение). Программа будет полезна компаниям, у которых есть большое количество поставщиков и/или прайс-листы поставщиков обновляются часто (необязательно прайс-листы, файлы могут быть любого назначения). Собранные таким образом актуальные версии прайс-листов можно выгрузить с помощью программы себе на сайт (или на любой FTP-сервер) или выполнить другие необходимые задачи.

25200 руб.

28.05.2015    85403    26    51    

50

Модуль для обмена "1С:Предприятие 8. УАТ. ПРОФ" с FortMonitor

WEB-интеграция 8.3.8 Конфигурации 1cv8 Автомобили, автосервисы Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Расширение предназначено для конфигурации "1С:Предприятие 8. Управление Автотранспортом. ПРОФ". Функционал модуля: 1. Заполнение регистров сведений по подсистеме "Мониторинг", а именно: события по мониторингу, координаты по мониторингу, пробег и расход по мониторингу, текущее местоположение ТС по мониторингу 2. Заполнение путевого листа: пробег по мониторингу, время выезда/заезда, табличная часть ГСМ, места стоянок по геозонам. 3. Отчеты по данным загруженным в регистры сведений. 4. Предусмотрена автоматическая загрузка данных в фоновом режиме (условия работы данной загрузке читайте в описании товара) Модуль работает без включенной константы по настройкам мониторинга. Модуль формы предоставляется с открытым кодом, общий модуль защищен. Любой заинтересованный пользователь, имеет возможность скачать демо-версию расширения.

22656 руб.

25.05.2021    12998    33    8    

12

Интеграция с сервисом vetmanager

WEB-интеграция Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Внешняя обработка разрабатывалась для загрузки документов из Ветменеджер в 1С: Бухгалтерия 3.0

12000 руб.

02.02.2021    16625    43    49    

23
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Yashazz 4732 24.07.13 17:33 Сейчас в теме
Класс! Обожаю задачки подобной интеграции, спасибо!

И вопрос из серии "некогда самому глянуть" - где-инбудь нормальное описание API там есть?
2. lamelioss 143 24.07.13 17:53 Сейчас в теме
автору +, тема интересна =)
3. Elisy 948 31.07.13 05:23 Сейчас в теме
Не смотрели Facebook на тему создания приложений? Можно ли из FB загружать список друзей с телефонами в 1С и отправлять сообщения пользователям?
4. musatov1c.ru 6 19.08.13 09:52 Сейчас в теме
Интересно. Спасибо за выкладку. Есть запрос на ведение рекламной деятельности через контакт, которую бы можно было учитывать и обсчитывать. Данная разработка может быть путем решения данной задачи.
5. Boudybuilder 35 03.11.13 23:59 Сейчас в теме
Интересная обработка.
Буду качать.

Раз уж есть эта тема , так давайте ее обсудим поподробнее.

Имеем 3 самых больших СоцСети: "ОК" , "ВК" и "FB". Ну и Твиттер тут можно вставить с ними в один ряд, так как его используют на всех сайта для размещения постов.
Самое наверное интересное для меня было бы - так это создать обработку универсальную для всех вышеперечисленных ресурсов.

Но для чего она нам могла бы быть полезной?! Давайте , кто знает о полезностях взаимодействий сайта или 1С с даными сетями , пишите сюда. Не ленитьсь.

Мне кажется , что самое главное - это посты! Выкласть информацию с фоткой на стенку группы , чтобы все ее учасники могли увидеть.

Второе , это сбор контактной информации учасников ,если таковое возможно и предусмотрено АРІ.

Дальше что может быть?
jobkostya1c_ERP; +1 Ответить
6. 3762515 22.07.14 17:10 Сейчас в теме
(5) Boudybuilder, а что за соцсеть "ОК"?
KroVladS; kuzyara; +2 Ответить
16. NewLifeMan 02.04.16 13:32 Сейчас в теме
7. Yashazz 4732 31.07.14 11:04 Сейчас в теме
(0) Не работает даже попытка получения ключа, т.е. по адресной строке https://oauth.vk.com/authorize итд - говорит, что "не удалось загрузить authorize из oauth.vk.com, и всё. Что неправильно?
8. Vix 28 30.08.14 11:19 Сейчас в теме
вошли на сайт, а выход с него как организовать?
9. Boudybuilder 35 29.10.14 00:28 Сейчас в теме
Кто знает , какими символами делать перевод строки. А то уже все перепробовали а вкотнакте все одной строчкой на стенке.
10. ltfriend 964 30.10.14 08:29 Сейчас в теме
(9) Boudybuilder, Перевод строки выполняется обычным способом. Только нужно сообщение кодировать в кодировке URL (urlencode). В предоставленной демо конфигурации можно сделать следующим образом:
ТекстСообщения = РаботаСВнешнимВебСервером.URLEncode(ТекстСообщения);
11. jobkostya1c_ERP 100 01.02.15 09:08 Сейчас в теме
Запомню. Довольно интересная разработка.
12. vladnet 363 22.04.15 19:39 Сейчас в теме
Спасибо за разработку!

В функции:

Функция СформироватьСтрокуПараметровЗапроса(Параметры, access_token)

Надо проверять на тип число:

СтрокаПараметров = СтрокаПараметров + Параметр.Ключ + "=" + ?(ТипЗнч(Параметр.Значение)=Тип("Число"), Формат(Параметр.Значение, "ЧГ=0"), Параметр.Значение) + "&";
13. Midasu 17.08.15 19:29 Сейчас в теме
Не могу разобраться с загрузкой изображения.
Не пойму что должно быть в АдресЗагрузки и АдресРесурса.
Конкретно нужно установить картинку конференции в переписках.
Методы photos.getChatUploadServer и messages.setChatPhoto описаны в api, но как они с файлами взаимодействуют мне не ясно.
В первом методе получаю upload_url, а как туда фото загрузить не ясно, ибо во втором методе его нужно установить.

UPD: А что за Изображение.Записать(...)? Изображение - реквизит типа Картинка? Но зачем оно?
14. s3nsay 21.09.15 20:24 Сейчас в теме
Ребята скиньте у кого есть эта конфигурация на почту leonov_den89@mail.ru, а то средств не хватает на загрузку.
15. dj_serega 392 04.02.16 12:46 Сейчас в теме
"Так как в 1С нет методов для работы с двоичными файлами был придуман следующий способ."
уже в планах :) так что планируйте дорабатывать публикацию :)
http://v8.1c.ru/o7/201602bin/index.htm
17. Xershi 1490 08.10.16 00:48 Сейчас в теме
Дополнил конфигурацию справочником всех прав, для получения токена, но автоматическое получение крашит приложение.
У меня авторизация двухфакторная. но через браузер легко получил.

Еще хотел узнать как понять какое апи использую, у них в новых версиях параметры у методов другие, но версию же я не задавал или тут нужно платформу сайта смотреть?
18. Xershi 1490 09.10.16 15:05 Сейчас в теме
(17) Xershi, сам разобрался. При формировании начального запроса они добавили опционально версию апи, сейчас это
&v=5.57

Плюс перешли на шифрованное соединение и поменяли формат прикрепляемых фоток. Изучив их апи все стало на свои места!
Спасибо за реализацию формирования и парсилки запроса!
19. KRaSH13 15.10.16 00:09 Сейчас в теме
(18) Xershi,
Сервер = "api.vk.com";
Ресурс = СтрШаблон("%1/method/messages.send?user_id=%2&message=%3&access_token=%4&v=5.57", Сервер, IDАккаунта, Сообщение, Токен);

Соединение = Новый HTTPСоединение(Сервер,443,,,,,Новый ЗащищенноеСоединениеOpenSSL());
Запрос = Новый HTTPЗапрос(Ресурс);
Ответ = Соединение.Получить(Запрос);
СообщитьПользователю(Строка(Ответ.КодСостояния));

Остальные параметры тоже есть, токен получен. Ответ на запрос постоянно "404", что бы ни делал. Не пойму в чем проблема, бьюсь 3й час.
20. Xershi 1490 15.10.16 00:18 Сейчас в теме
(19) KRaSH13, у него там метод подключения через ком идет. Я только добавил букву s к отсечению! Так что качай конфу и смотри код.
21. ltfriend 964 15.10.16 11:21 Сейчас в теме
(19) KRaSH13, Зачем вы в "Ресурс" добавляете адрес сервера?
Нужно так
Ресурс = СтрШаблон("method/messages.send?user_id=%2&message=%3&access_token=%4&v=5.57", IDАккаунта, Сообщение, Токен);
22. capitan 2484 22.10.16 21:16 Сейчас в теме
Автор красавчик )


Функция ЗагрузитьФотографиюНаСтену(access_token, uid="", gid="", Изображение) Экспорт

АдресЗагрузки = СтрЗаменить(РаботаССайтомВКонтакте.ПолучитьАдресДляЗагрузкиФотографийНаСтену(access_token, uid, gid), "http://", "");

АдресЗагрузки = СтрЗаменить(РаботаССайтомВКонтакте.ПолучитьАдресДляЗагрузкиФотографийНаСтену(access_token, uid, gid), "https://", "");


23. ltfriend 964 26.10.16 10:08 Сейчас в теме
(22) capitan, Ну так, стараюсь ))
24. Artem1405 25 07.04.17 13:45 Сейчас в теме
А в этой конфигурации только как загружать фото или есть пример скачивания на диск новостей с картинками?
25. a2kat 25.04.17 15:39 Сейчас в теме
Уважаемые форумчане! Перешлите на kg.og@mail.ru конфигурацию работы с API VK please!
26. Serega-artem 16 11.05.17 14:31 Сейчас в теме
Автору огромное спасибо, пригодилось!

Мои пять копеек. Если при загрузке фото на сервер возвращается:

<html> <head><title>301 Moved Permanently</title></head> <body bgcolor="white"> <center><h1>301 Moved Permanently</h1></center> <hr><center> Apache </center> </body> </html>


То вместо

Новый HTTPСоединение(АдресЗагрузки)


Пишем:

ssl4 = Новый ЗащищенноеСоединениеOpenSSL( неопределено, неопределено );
Соединение = Новый HTTPСоединение(АдресЗагрузки,,,,,,ssl4)
27. Santa4527 18.05.17 00:43 Сейчас в теме
Может кто то сталкивался при выгрузки на стену изображения ошибка

Ошибка при загрузке изображения на стену: {ОбщийМодуль.РаботаССайтомВКонтакте.Модуль(1529)}: Ошибка при вызове метода контекста (ОтправитьДляОбработки): Ошибка работы с Интернет: Couldn't resolve host name

8.3.8.1652
Режим совместимости Версия 8.3.7

просто текст отправляет в vk
28. ltfriend 964 21.05.17 13:27 Сейчас в теме
(27) Выложена обновлённая версия демонстрационной конфигурации, где исправлены некоторые ошибки (в том числе и ошибка загрузки изображений).
29. vizgallova 23.05.17 12:56 Сейчас в теме
30. kmpok 01.08.17 15:04 Сейчас в теме
Может кому пригодится. Сделал функцию отправки фотографий на сервер с использованием двоичных данных без записи файлов на диск.
Входящие параметры:
Изображение = двоичные данные картинки.
АдресЗагрузкиФото = Адрес, полученный ранее методом photos.getWallUploadServer. Без "https://"

Функция ВыполнитьОтправкуФото(Изображение, АдресЗагрузкиФото)
	
	Boundary 	 = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");
	
	Тело		 = Новый ПотокВПамяти();
	ЗаписьДанных = Новый ЗаписьДанных(Тело,КодировкаТекста.ANSI);
	ЗаписьДанных.ЗаписатьСтроку("--"+Boundary);
	ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""photo""; filename=""photo.jpeg""");
	ЗаписьДанных.ЗаписатьСтроку("Content-Type: image/jpeg");
	ЗаписьДанных.ЗаписатьСтроку("");
	ЗаписьДанных.Записать(Изображение);
	ЗаписьДанных.ЗаписатьСтроку("");
	ЗаписьДанных.ЗаписатьСтроку("--"+Boundary);

	ДвоичныеДанныеДляОтправки = Тело.ЗакрытьИПолучитьДвоичныеДанные();
			
	ЗаголовокHTTP = Новый Соответствие;
	ЗаголовокHTTP.Вставить("Content-Type", "multipart/form-data; boundary="+Boundary);
	ЗаголовокHTTP.Вставить("Content-Length", XMLСтрока(ДвоичныеДанныеДляОтправки.Размер()));
		
	НТТР = Новый HTTPСоединение(АдресЗагрузкиФото,,,,,,Новый ЗащищенноеСоединениеOpenSSL);
	   
	ЗапросHTTP      = Новый HTTPЗапрос("",ЗаголовокHTTP);
	ЗапросHTTP.УстановитьТелоИзДвоичныхДанных(ДвоичныеДанныеДляОтправки);
	
	ОтветHTTP       = НТТР.ОтправитьДляОбработки(ЗапросHTTP);
		
	СтрокаJSON 	  = ОтветHTTP.ПолучитьТелоКакСтроку();	
	ЧтениеJSON 	  = Новый ЧтениеJSON;
	ЧтениеJSON.УстановитьСтроку(СтрокаJSON);
	
	ПараметрыОтвета = ПрочитатьJSON(ЧтениеJSON);
	
	Возврат ПараметрыОтвета;
		
КонецФункции	
Показать
Rokov; GalMig; fuxic; puabrueha; jobkostya1c_ERP; +5 Ответить
31. kmpok 02.08.17 14:54 Сейчас в теме
Как реализовать отправку смайлов в сообщении? кто-нибудь сталкивался?
Дело в том, что символьные коды смайлом идут с &, а данный символ используется при перечислении параметров.В результате чего логика строки запроса нарушается.
32. Gang031 09.01.18 16:40 Сейчас в теме
А что делать, если вк потребует ввод капчи? если много сообщений допустим отправляешь, то может потребовать
33. Luck_DMST 24 07.02.18 16:35 Сейчас в теме
Спасибо огромное, очень выручили!
34. r0m1n 06.03.18 18:13 Сейчас в теме
У кого выходит ошибка что-то типа "v version is required" - теперь в запросе необходимо явно указывать номер версии API ВК (https://vk.com/dev/version_update), поэтому добавляем соответствующий параметр при вызове любого метода ВК.
35. Serega-artem 16 21.03.18 22:02 Сейчас в теме
(34) Золотой Вы человек! Спасибо большое, полчаса мозг ломал. Немного конкретизирую:

В процедуре СформироватьСтрокуПараметровЗапроса(Параметры, access_token)

Находим строку

СтрокаПараметров = СтрокаПараметров + "access_token=" + access_token";

И приводим её к такому виду:

СтрокаПараметров = СтрокаПараметров + "access_token=" + access_token+"&v=5.73";

Где 5.73 - версия API
36. Wrols 89 07.08.18 07:53 Сейчас в теме
Несколько моментов по поводу размещении публикации поста для группы:

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

2. При размещении записи на стене с картинкой происходит сначала загрузка фотографии, в результате которой возвращается owner_id, отличающийся от ID пользователя группы. Именно этот owner_id и нужно передавать в attachments.

Процедура РазместитьЗапись(Команда)
	
	Если Не ПустаяСтрока(Объект.file_name) Тогда
		
		Если Лев(Объект.owner_id, 1) = "-" Тогда
			uid = "";
			gid = Сред(Объект.owner_id, 2);
			//{{AZ
			from_group = "1";
			//}}az
		Иначе
			uid = Объект.owner_id;
			gid = "";
			//{{AZ
			from_group = "";
			//}}az
		КонецЕсли;
		
		Попытка
			Параметрыизображения = РаботаССайтомВКонтакте.ЗагрузитьФотографиюНаСтену(Объект.access_token, uid, gid, Новый ДвоичныеДанные(Объект.file_name));
			
			//{{AZ
			//attachments = РаботаССайтомВКонтакте.СохранитьЗагруженнуюФотографиюНаСтене(Объект.access_token,
			//					Параметрыизображения.server, Параметрыизображения.photo, Параметрыизображения.hash, uid, gid).id;

			ПараметрыВложения = РаботаССайтомВКонтакте.СохранитьЗагруженнуюФотографиюНаСтене(Объект.access_token,
								Параметрыизображения.server, Параметрыизображения.photo, Параметрыизображения.hash, uid, gid);
			//}}az
		Исключение
			Сообщить("Ошибка при загрузке изображения на стену: " + ОписаниеОшибки());
			Возврат;
		КонецПопытки;
		
	КонецЕсли;
	
	Попытка
		//{{AZ
		//post_id = РаботаССайтомВКонтакте.РазместитьЗаписьНаСтене(Объект.access_token, Объект.owner_id, Объект.message, attachments,, from_group);
		post_id = РаботаССайтомВКонтакте.РазместитьЗаписьНаСтене(Объект.access_token, Объект.owner_id, Объект.message, ПараметрыВложения,, from_group);
		//}}az
		Сообщить("Запись на стене успешно размещена. post_id = " + post_id);
	Исключение
		Сообщить("Ошибка при размещении записи на стене: " + ОписаниеОшибки());
	КонецПопытки;
	
КонецПроцедуры

Функция РазместитьЗаписьНаСтене(access_token, owner_id="", message, ПараметрыВложения= Неопределено, services="", from_group="", signed="", friends_only="") Экспорт
	
	//{{AZ
	Если ПараметрыВложения <> Неопределено Тогда
		attachments = "photo" + ПараметрыВложения.owner_id + "_" + ПараметрыВложения.id;
	Иначе
		attachments = "";
	КонецЕсли;
	//}}az
	ПараметрыЗапроса = Новый Структура("owner_id,message,attachments,services,from_group,signed,friends_only",
										owner_id,message,attachments,services,from_group,signed,friends_only);
										
	ПараметрыЗапроса.message = РаботаСВнешнимВебСервером.URLEncode(ПараметрыЗапроса.message);
										
	ОтветСервера = ВызватьМетодAPI("wall.post", ПараметрыЗапроса, access_token);
	
	Если ОтветСервера.Свойство("error_code") Тогда
		// произошла ошибка
		ВызватьИсключение СформироватьТекстОшибкиAPI("Произошла ошибка при размещении записи", ОтветСервера);
	КонецЕсли;
	
	Возврат ОтветСервера.post_id;
										
КонецФункции

Показать
37. пользователь 27.01.19 17:59
Сообщение было скрыто модератором.
...
38. user1137665 29.01.19 13:51 Сейчас в теме
Ребята подскажите что я делаю не так??. не удается выгрузить запись на стену
Прикрепленные файлы:
39. echo77 1887 22.07.19 22:08 Сейчас в теме
У меня ошибка еще при авторизации: не удалось скачать authorize из oauth.vk.com
Это про что вообще?
Прикрепленные файлы:
40. megaZ 29.10.19 12:21 Сейчас в теме
На платформе 8.3.15.1700 не работает. Подозреваю, что связано с тем, что код писался еще под платформу, где использовался IE в качестве браузера, а с недавних пор платформа использует Webkit.
Переход по ссылке таким образом "Элементы.HTMLСтраница.Документ.location.href = " не работает, переделал на "HTMLСтраница = ". Далее некорректно ведет себя браузер после загрузки страницы (Процедура HTMLСтраницаДокументСформирован). В Элемент.Документ.location.href лежит просто "https://api.vk.com/blank.html" без параметров, соответственно в Элемент.Документ.location.hash пусто.
41. megaZ 29.10.19 19:47 Сейчас в теме
(40) А нет, на 8.3.13, где уже WebKit все работает. Видимо просто баг платформы 8.3.15.1700
42. prozet-z 28.12.19 19:15 Сейчас в теме
(41), на платформе 8.3.16.1063 точно так же, в Элемент.Документ.location.hash пусто. Как токен тогда получить-то?
43. ltfriend 964 30.12.19 09:50 Сейчас в теме
(42) действительно, Документ.location.hash с использованием WebKit содержит пустое значение. Хотя при тестировании из браузера в адресной строке присутствуют нужные данные. То ли глюк в реализации от 1С (что мне кажется более вероятным), то ли нужно получать как-то по другому. Быстро найти решение, как это исправить не удалось. Пытаюсь разобраться.
На данный момент можно использовать кривой костыль. Открывать ссылку для авторизации в браузере и заставить пользователя копировать URL после авторизации из браузера в текстовое поле и его уже парсить.
Если кто поделиться решением проблемы - буду признателен.
44. ltfriend 964 30.12.19 12:59 Сейчас в теме
(42) причина найдена. Нужно в строке URL в параметре redirect_uri заменить значение на httpS://api.vk.com/blank.html
45. prozet-z 30.12.19 19:03 Сейчас в теме
(44), точно! А я уж начал в мануалах WebKit копаться)
Автор, большое спасибо за публикацию! Я с её помощью синхронизировал отображение товаров в группе в ВК с остатками товаров в магазине на 2500 позиций. Статья очень полезна.
46. CheBurator 3121 21.03.20 11:00 Сейчас в теме
"началом конченого файла:"
это точно! все эти соцсети - конченые
47. пользователь 30.03.20 16:07
Сообщение было скрыто модератором.
...
48. user970589 10 03.10.20 19:00 Сейчас в теме
пытаюсь сам создать. И в самом начале получаю ошибку.
Метод объекта не обнаружен (Перейти).
Полагаю можно опустить, что в УФ ставим Элементы, а не элементыформы, но и там метода не нашлось. Что не так? У всех же получилось? )
49. user970589 10 04.10.20 17:19 Сейчас в теме
Покопался. Что выходит.
Элементы.HTMLСтраница.Документ.location.href- значение не присваивается. Любое. Беру любую переменную - присваиваю значение. В эту не могу.
Вот так должно быть правильно:
Элементы.HTMLСтраница.Документ.location.href ="https://oauth.vk.com/authorize?client_id="+Объект.IDПриложения+"&scope="+Объект.ПраваДоступа+"&redirect_url=http://api.vk.com/blank.html&display=page&response_type=token";
Итог - абоут бланк ((
50. пользователь 14.10.21 13:18
Сообщение было скрыто модератором.
...
Оставьте свое сообщение