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);
                КонецЕсли;
        КонецЕсли;

        Возврат От;
КонецФункции