Предлагаемые исходные коды были протестированы в версии 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); КонецЕсли; КонецЕсли; Возврат От; КонецФункции