Версия для печати темы (https://pro1c.org.ua/index.php?s=86c4820bb5f6acee9725a29d52be0c91&showtopic=41241)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Работа с "Интайм" по API

Автор: DrLivsi 23.10.17, 10:16

Всем привет!
Нужна помощь в подключении к апи Интайм. Раньше с таким не сталкивался, не могу понять как выполнить подключение. Или может у кого-то уже есть обработка.
Пока меня хватило на вот такой код:

Процедура Подключение(Форма) Экспорт
Попытка
        WSDLОпределение = Новый WSОпределения("http://esb.intime.ua:8080/services/intime_api_3.0?wsdl");
        WSСервис = WSDLОпределение.Сервисы[0];
        прокси = Новый WSПрокси(WSDLОпределение, WSСервис.URIПространстваИмен, WSСервис.Имя, WSСервис.ТочкиПодключения[0].Имя);
    Исключение
        WSDLОпределение = Неопределено;
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
КонецПроцедуры

но что дальше с этим делать не пойму.
Конфа самописная 8.3.8.2088 обычные формы. Буду благодарен за любую помощь.

Автор: podcast 23.10.17, 10:28

DrLivsi @ Сегодня, 11:16 * ,
Есть конфа CAS вроде называется там Упр.формы, должно помочь, или обработку новой почты, но там сильно накручено.

Автор: Bernet 23.10.17, 10:42

DrLivsi @ Сегодня, 11:16 * ,
Вот вроде как пример бесплатный даже есть (сам лично не проверял) http://pro1c.org.ua/redirect.php?http://danila.org.ua/rabota-s-api-kompanii-in-taym/

Автор: DrLivsi 23.10.17, 11:02

Bernet @ Сегодня, 11:42 * ,

Я ее видел, но она для версии API 2.0 а интайм уже работает с API 3.0

На сайте есть описание функций:
http://pro1c.org.ua/redirect.php?https://intime.ua/upload/images/document/api_3_0.pdf

но как к ним "достучатся"?

Автор: Bernet 23.10.17, 11:27

DrLivsi @ Сегодня, 12:02 * ,
Ключ вы получили? Ну в принципе я ничего сложного не вижу, подключаетесь к их веб-сервису и дальше юзаете те функции, которые вам нужны. В документации они параметры описали. Или у вас ещё на этапе создания WSОпределения ругается?

Автор: DrLivsi 23.10.17, 12:05

Bernet @ Сегодня, 12:27 * ,
Ключ получил, WSОпределение создает нормально, дальше ругается на первой строке, может я тип не тот указываю

AuthData = Прокси.ФабрикаXDTO.Тип("http://inr.intime.ua/in-time/integration30","AuthData");
ЭлементЗапросаAuthData = WSDLОпределение.ФабрикаXDTO.Создать(AuthData);
            
ЭлементЗапросаAuthData.KEY = АПИКлюч;

Автор: DrLivsi 23.10.17, 14:25

Вот что сейчас получилось:

Попытка
        Форма.WSDLОпределение = Новый WSОпределения("http://esb.intime.ua:8080/services/intime_api_3.0?wsdl");
        WSСервис = Форма.WSDLОпределение.Сервисы[0];
        Форма.прокси = Новый WSПрокси(Форма.WSDLОпределение, WSСервис.URIПространстваИмен, WSСервис.Имя, WSСервис.ТочкиПодключения[0].Имя);
    Исключение
        Форма.WSDLОпределение = Неопределено;
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
    
    Если Форма.WSDLОпределение = Неопределено Тогда
        Сообщить("Не удалось подключится");
         Возврат;
    КонецЕсли;
    
    
    WSОперации = WSСервис.ТочкиПодключения[0].Интерфейс.Операции;
        
    ОперацияПолучитьСтраны = WSОперации.Получить("get_country_by_id");
    
    ДанныеXDTO = Форма.WSDLОпределение.ФабрикаXDTO.Создать(ОперацияПолучитьСтраны.Параметры[0].Тип.Свойства.Получить("api_key").Тип, АПИКлюч);
    
    ОтветОтСервера = Форма.прокси.get_country_by_id(ДанныеXDTO); // Вызываем операцию


При выполнении последней строки вылетает ошибка:

При вызове веб-сервиса произошла ошибка. Ошибка SOAP сервера: DS Code: INCOMPATIBLE_PARAMETERS_ERROR
Nested Exception:-
javax.xml.stream.XMLStreamException: DS Fault Message: Error in 'CallQuery.extractParams', cannot find parameter with type:query-param name:api_key
DS Code: INCOMPATIBLE_PARAMETERS_ERROR
Source Data Service:-
Name: intime_api_3.0
Location: /intime_api_3.0.dbs
Description: N/A
Default Namespace: http://pro1c.org.ua/redirect.php?http://ws.wso2.org/dataservice
Current Request Name: get_country_by_id
Current Params: {}

Код ошибки: INCOMPATIBLE_PARAMETERS_ERROR
Техническая информация:
<detail xmlns:axis2ns3335="http://ws.wso2.org/dataservice" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<axis2ns3334:DataServiceFault xmlns:axis2ns3334="http://ws.wso2.org/dataservice">
<axis2ns3334:current_params>{}</axis2ns3334:current_params>
<axis2ns3334:source_data_service>
<axis2ns3334:data_service_name>intime_api_3.0</axis2ns3334:data_service_name>
<axis2ns3334:description>N/A</axis2ns3334:description>
<axis2ns3334:location>/intime_api_3.0.dbs</axis2ns3334:location>
<axis2ns3334:default_namespace>http://ws.wso2.org/dataservice</axis2ns3334:default_namespace>
</axis2ns3334:source_data_service>
<axis2ns3334:ds_code>INCOMPATIBLE_PARAMETERS_ERROR</axis2ns3334:ds_code>
<axis2ns3334:current_request_name>get_country_by_id</axis2ns3334:current_request_name>
</axis2ns3334:DataServiceFault>
</detail>

Автор: DrLivsi 24.10.17, 8:56

Решил. Вот может кому-то пригодится

Попытка
        Форма.WSDLОпределение = Новый WSОпределения("http://esb.intime.ua:8080/services/intime_api_3.0?wsdl");
        WSСервис = Форма.WSDLОпределение.Сервисы[0];
        Форма.прокси = Новый WSПрокси(Форма.WSDLОпределение, WSСервис.URIПространстваИмен, WSСервис.Имя, WSСервис.ТочкиПодключения[0].Имя);
    Исключение
        Форма.WSDLОпределение = Неопределено;
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
    
    Если Форма.WSDLОпределение = Неопределено Тогда
        Сообщить("Не удалось подключится");
         Возврат;
    КонецЕсли;
    
    // Получаем все операци
    WSОперации = WSСервис.ТочкиПодключения[0].Интерфейс.Операции;
    
    //Получаем тип параметра, который передается в метод G
    Форма.WSDLОпределение.ФабрикаXDTO.Пакеты.Получить("http://ws.wso2.org/dataservice").Получить("get_country_by_id");
    
    //Создаем параметр на основе типа и заполняем значение параметра api_key
    WSПараметр       = Форма.Прокси.ФабрикаXDTO.Создать(ТипWSПараметра);
    WSПараметр.api_key    = АПИКлюч;
    WSПараметр.id    = "";
    
    //Вызываем метод веб-сервиса, записываем результат в переменную list_of_countries
    list_of_countries = Форма.Прокси.get_country_by_id(WSПараметр);
    
    Для Каждого Country Из list_of_countries.Entry_get_country_by_id Цикл
        Сообщить(Country.code+" "+Country.name_en+" "+Country.name_ru);
    КонецЦикла;


DrLivsi @ Сегодня, 9:48 * ,

Небольшая ошибка в строке
//Получаем тип параметра, который передается в метод G
    Форма.WSDLОпределение.ФабрикаXDTO.Пакеты.Получить("http://ws.wso2.org/dataservice").Получить("get_country_by_id");

нужно вот так:
//Получаем тип параметра, который передается в метод G
    ТипWSПараметра = Форма.WSDLОпределение.ФабрикаXDTO.Пакеты.Получить("http://ws.wso2.org/dataservice").Получить("get_country_by_id");

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua