TWS API: Примеры исходных кодов для самостоятельной интеграции 1C
Предлагаемые исходные коды были протестированы в версии 1С 8.3 на управляемых формах.
Общее описание
Для интеграции с Системой TWS предполагается использование двух функций: TWSСтарт и TWSЗапрос.
Перед началом обмена данными необходимо вызывать функцию TWSСтарт. Она вернёт объект ХттпСоединение, который будет использоваться во всех последующих вызовах функции TWSЗапрос. Функция TWSСтарт выполняет процедуру авторизации (запросы R0 и R1), а также устанавливает текущего пользователя (запрос R10) и заполняет параметр сеанса “TWSSessionKey”, который необходим для будущих запросов.
Для работы функций необходимо создать:
Константы:
- СерверTWS – URL сервера TWS для соединения (“www.tws.by“).
- TWSApiKey – ключ API (отображается администраторам в Виртуальном Офисе).
- TWSVirtualOfficeID – ID виртуального офиса (отображается администраторам в Виртуальном Офисе).
- TWSIDПользователя – ID пользователя в виртуальном офисе (отображается администраторам в Виртуальном Офисе).
- TWSПарольПользователя – пароль пользователя.
Параметр сеанса:
- TWSSessionKey – заполняется программно при начале работы с Системой TWS.
На стадии разработки можно использовать ключ API, ID и т.п. из Демо-Офиса. Для “боевого” использования эти данные потом просто заменятся в константах на реальные данные из вашего Виртуального Офиса.
После авторизации бизнес-логика приложения реализуется вызовами функции TWSЗапрос. Она принимает соединение, номер запроса, список параметров запроса, а также флаг, определяющий, надо ли показывать пользователю сообщение об ошибке.
Примеры исходных кодов
Функция TWSСтарт
Функция TWSСтарт ()
ПараметрыСеанса.TWSSessionKey = "";
ХттпСоединение = Новый HTTPСоединение(
Константы.СерверTWS.Получить(), // Адрес сервера
443, // Номер порта
,
,
,
120, // Таймаут соединения в секундах
Новый ЗащищенноеСоединениеOpenSSL); // ЗащищенноеСоединение
Ответ = TWSЗапрос(ХттпСоединение,"r0");
Хэш = Новый ХешированиеДанных(ХешФункция.SHA256);
Хэш.Добавить(СокрЛП(Ответ.Token)+СокрЛП(Константы.TWSApiKey.Получить()));
Параметр = Новый СписокЗначений;
Параметр.Добавить(СокрЛП(Константы.TWSVirtualOfficeID.Получить()),"VirtualOfficeID");
Параметр.Добавить(Ответ.Token,"Token");
Параметр.Добавить(Нрег(СтрЗаменить(Строка(Хэш.ХешСумма)," ","")),"Hash");
Ответ = TWSЗапрос(ХттпСоединение,"r1",Параметр);
ПараметрыСеанса.TWSSessionKey = Ответ.SessionKey;
// R10 - установка текущего пользователя, при необходимости
Параметр = Новый СписокЗначений;
Параметр.Добавить(СокрЛП(Константы.TWSIDПользователя.Получить()),"UserID");
Параметр.Добавить(СокрЛП(Константы.TWSПарольПользователя.Получить()),"Password");
Ответ = TWSЗапрос(ХттпСоединение,"r10",Параметр);
Возврат ХттпСоединение;
КонецФункции
Функция TWSЗапрос
Функция TWSЗапрос (Соединение, Запрос, Параметр=Неопределено, ВыводитьФлаг=Истина)
Если не ПустаяСтрока(ПараметрыСеанса.TWSSessionKey) Тогда
Если Параметр = Неопределено Тогда
Параметр = Новый СписокЗначений;
КонецЕсли;
Параметр.Добавить(ПараметрыСеанса.TWSSessionKey,"SessionKey");
КонецЕсли;
СтрокаЗапроса = "";
АдресЗапроса = "/tws/api/" + Запрос;
Если Параметр <> Неопределено Тогда
Первый = 1;
Для каждого Элемент Из Параметр Цикл
Если Первый Тогда
Амп = "";
Первый = 0;
Иначе
Амп = "&";
КонецЕсли;
СтрокаЗапроса = СтрокаЗапроса + Амп
+ Элемент.Представление +"="+ Элемент.Значение;
КонецЦикла;
КонецЕсли;
Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded;");
HttpЗапрос1 = Новый HttpЗапрос(АдресЗапроса,Заголовки) ;
HttpЗапрос1.УстановитьТелоИзСтроки(СтрокаЗапроса);
Ответ = Соединение.ОтправитьДляОбработки(HttpЗапрос1);
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку("utf-8"));
Попытка
От = ПрочитатьJSON(Чтение);
Исключение
Сообщить(Ответ.ПолучитьТелоКакСтроку("utf-8")) ;
ВызватьИсключение;
КонецПопытки;
Чтение.Закрыть();
// Обработка ошибок
Если От.error_code <> 0 Тогда
Если ВыводитьФлаг Тогда
Сообщить("Код ошибки " + От.error_code + ": "+ От.error_message);
КонецЕсли;
КонецЕсли;
Возврат От;
КонецФункции