Пробую получить данные из сервиса почты России о данных трекномера используя их новый API - постоянно выпадает на ошибках соединения к WEB-сервису (Сам их сайт подвисает - вообщем одним словом ПОЧТА). Если и проходит до создания прокси то дальше не успеваю разобраться с их методом getOperationHistory возвращает неверный формат входных данных.
Сейчас написал вот это:
Логин = "**************";
Пароль = "*************";
// Инициализация отправки данных в почту РОСССИИ
Попытка
Определения = Новый WSОпределения("http://tracking.russianpost.ru/rtm34?wsdl",Логин,Пароль);
Исключение
Определения = Неопределено;
КонецПопытки;
Если НЕ Определения = Неопределено Тогда
Попытка
Прокси = Новый WSПрокси(Определения, "http://russianpost.org/operationhistory", "OperationHistory12","OperationHistory12Port");
Исключение
Прокси = Неопределено;
КонецПопытки;
КонецЕсли;
Если НЕ Прокси = Неопределено Тогда
Прокси.Пользователь = Логин;
Прокси.Пароль = Пароль;
Попытка
OperationHistoryRequest = Прокси.ФабрикаXDTO.Создать(Прокси.ФабрикаXDTO.Тип("http://russianpost.org/operationhistory/data","OperationHistoryRequest"));
OperationHistoryRequest.BarCode = ТрекКод;
OperationHistoryRequest.MessageType = 0;
AuthorizationHeader = Прокси.ФабрикаXDTO.Создать(Прокси.ФабрикаXDTO.Тип("http://russianpost.org/operationhistory/data","AuthorizationHeader"));
AuthorizationHeader.mustUnderstand = Истина;
AuthorizationHeader.login = Логин;
AuthorizationHeader.password = Пароль;
ДанныеИзСервиса = Прокси.GetOperationHistory(OperationHistoryRequest, AuthorizationHeader);
Исключение
ОписаниеОшибки = ОписаниеОшибки();
Сообщить(ОписаниеОшибки);
ДанныеИзСервиса = Неопределено;
КонецПопытки;
КонецЕсли;;
Показать
Может кто-нибудь уже реализовывал так подскажите что я делаю не так.
Исправил метод: ДанныеИзСервиса = Прокси.getOperationHistory(OperationHistoryRequest) - почему-то GetOperationHistory не проходит разница только в одной букве и то по регистру. Сейчас возвращает:
Ошибка при вызове метода контекста (getOperationHistory): Ошибка вызова операции сервиса: {http://russianpost.org/operationhistory}:OperationHistory12:getOperationHistory(): Неверный формат.
(3) SeverBaP, загрузил в 1С веб-сервис, по идее параметр запроса включает в себя и OperationHistoryRequest, и AuthorizationHeader, поэтому пробовал вот так:
Попытка
Определения = Новый WSОпределения("http://tracking.russianpost.ru/rtm34?wsdl",Логин,Пароль);
Исключение
Определения = Неопределено;
КонецПопытки;
Если НЕ Определения = Неопределено Тогда
Попытка
Прокси = Новый WSПрокси(Определения, "http://russianpost.org/operationhistory", "OperationHistory12", "OperationHistory12Port");
Исключение
Прокси = Неопределено;
КонецПопытки;
КонецЕсли;
//========Заполняем структуру OperationHistoryRequest
ТипЗапроса = Прокси.ФабрикаXDTO.Пакеты.Получить(
"http://russianpost.org/operationhistory/data").Получить("OperationHistoryRequest");
Запрос = Прокси.ФабрикаXDTO.Создать(ТипЗапроса);
Запрос.Barcode = ТрекНомер;
Запрос.MessageType = 0;
//========Заполняем структуру AuthorizationHeader
ТипАвторизация = Прокси.ФабрикаXDTO.Пакеты.Получить("http://russianpost.org/operationhistory/data").Получить("AuthorizationHeader");
Авторизация = Прокси.ФабрикаXDTO.Создать(ТипАвторизация);
Авторизация.mustUnderstand = 0;
Авторизация.login = Логин;
Авторизация.password = Пароль;
//=======================Собираем параметр запроса для getOperationHistory
ТипПараметры = Прокси.ФабрикаXDTO.Пакеты.Получить("http://russianpost.org/operationhistory").Получить("getOperationHistory");
ПараметрыЗапроса = Прокси.ФабрикаXDTO.Создать(ТипПараметры);
ПараметрыЗапроса.OperationHistoryRequest = Запрос;
ПараметрыЗапроса.AuthorizationHeader = Авторизация;
ДанныеИзСервиса = Прокси.getOperationHistory(ПараметрыЗапроса);
Показать
Но тоже ругается на неверный формат.... А в SoapUI не тестировали, работает хоть этот веб-сервис?
// Инициализация отправки данных в почту РОСССИИ
Попытка
Определения = Новый WSОпределения("http://tracking.russianpost.ru/rtm34?wsdl",Логин,Пароль);
Исключение
ОписаниеОшибки = ОписаниеОшибки();
Сообщить(ОписаниеОшибки);
Определения = Неопределено;
КонецПопытки;
Если НЕ Определения = Неопределено Тогда
Попытка
Прокси = Новый WSПрокси(Определения, "http://russianpost.org/operationhistory", "OperationHistory12","OperationHistory12Port");
Исключение
Прокси = Неопределено;
КонецПопытки;
КонецЕсли;
Если НЕ Прокси = Неопределено Тогда
Прокси.Пользователь = Логин;
Прокси.Пароль = Пароль;
Попытка
OperationHistoryRequest = Прокси.ФабрикаXDTO.Создать(Прокси.ФабрикаXDTO.Тип("http://russianpost.org/operationhistory/data","OperationHistoryRequest"));
OperationHistoryRequest.BarCode = ТрекКод;
OperationHistoryRequest.MessageType = 0;
ДанныеИзСервиса = Прокси.getOperationHistory(OperationHistoryRequest);
Исключение
ОписаниеОшибки = ОписаниеОшибки();
Сообщить(ОписаниеОшибки);
ДанныеИзСервиса = Неопределено;
КонецПопытки;
КонецЕсли;;
Показать
Но нет все же неверный формат.
Это из описания сервиса:
<operation name="getOperationHistory">
<input wsam:Action="http://russianpost.org/operationhistory/OperationHistory12/getOperationHistoryRequest" message="tns:getOperationHistory"/>
<output wsam:Action="http://russianpost.org/operationhistory/OperationHistory12/getOperationHistoryResponse" message="tns:getOperationHistoryResponse"/>
<fault message="tns:OperationHistoryFault" name="OperationHistoryFault" wsam:Action="http://russianpost.org/operationhistory/OperationHistory12/getOperationHistory/Fault/OperationHistoryFault"/>
<fault message="tns:AuthorizationFault" name="AuthorizationFault" wsam:Action="http://russianpost.org/operationhistory/OperationHistory12/getOperationHistory/Fault/AuthorizationFault"/>
</operation>
(9) SeverBaP, ну и нагородил огород.
Ты не правильно передаешь параметры.
Посмотри тут http://screenpresso.com/=jkhOb какого типа должен быть параметр.
Я пробовал создать на основании этого текста объектXDTO и отправить его, так вот, - он выдавал ошибку неверный логин пароль... мне кажется надо его просто доработать и выяснить с фабрикой что не так
(17) SeverBaP, в (4) все-таки рабочий вариант, а вот сервис у них, строго говоря, косячный... Вот что выдает 1С:
Ошибка вызова операции сервиса: {<noindex><a class="is-fancybox" href="/redirect.php?url=aHR0cDovL3J1c3NpYW5wb3N0Lm9yZy9vcGVyYXRpb25oaXN0b3J5" target="_blank" rel="nofollow">http://russianpost.org/operationhistory}:OperationHistory12:getOperationHistory()
по причине:
Неизвестная ошибка. Ошибка преобразования данных XDTO:
Чтение объекта типа: {<noindex><a class="is-fancybox" href="/redirect.php?url=aHR0cDovL3J1c3NpYW5wb3N0Lm9yZy9vcGVyYXRpb25oaXN0b3J5L2RhdGE=" target="_blank" rel="nofollow">http://russianpost.org/operationhistory/data}Address - [1,527]
Проверка свойства 'Description':
форма: Элемент
имя: {<noindex><a class="is-fancybox" href="/redirect.php?url=aHR0cDovL3J1c3NpYW5wb3N0Lm9yZy9vcGVyYXRpb25oaXN0b3J5L2RhdGE=" target="_blank" rel="nofollow">http://russianpost.org/operationhistory/data}Description
тип: {<noindex><a class="is-fancybox" href="/redirect.php?url=aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWE=" target="_blank" rel="nofollow">http://www.w3.org/2001/XMLSchema}string
по причине:
Ошибка преобразования данных XDTO:
Чтение объекта типа: {<noindex><a class="is-fancybox" href="/redirect.php?url=aHR0cDovL3J1c3NpYW5wb3N0Lm9yZy9vcGVyYXRpb25oaXN0b3J5L2RhdGE=" target="_blank" rel="nofollow">http://russianpost.org/operationhistory/data}Address - [1,527]
Проверка свойства 'Description':
форма: Элемент
имя: {<noindex><a class="is-fancybox" href="/redirect.php?url=aHR0cDovL3J1c3NpYW5wb3N0Lm9yZy9vcGVyYXRpb25oaXN0b3J5L2RhdGE=" target="_blank" rel="nofollow">http://russianpost.org/operationhistory/data}Description
тип: {<noindex><a class="is-fancybox" href="/redirect.php?url=aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWE=" target="_blank" rel="nofollow">http://www.w3.org/2001/XMLSchema}string
по причине:
Ошибка проверки данных XDTO:
Структура объекта не соответствует типу: {<noindex><a class="is-fancybox" href="/redirect.php?url=aHR0cDovL3J1c3NpYW5wb3N0Lm9yZy9vcGVyYXRpb25oaXN0b3J5L2RhdGE=" target="_blank" rel="nofollow">http://russianpost.org/operationhistory/data}Address
Проверка свойства 'Description':
форма: Элемент
имя: {<noindex><a class="is-fancybox" href="/redirect.php?url=aHR0cDovL3J1c3NpYW5wb3N0Lm9yZy9vcGVyYXRpb25oaXN0b3J5L2RhdGE=" target="_blank" rel="nofollow">http://russianpost.org/operationhistory/data}Description
тип: {<noindex><a class="is-fancybox" href="/redirect.php?url=aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWE=" target="_blank" rel="nofollow">http://www.w3.org/2001/XMLSchema}string
Не установлено значение одного из следующих свойств: Index
Показать
То бишь 1С говорит, что свойство Index не может быть пустым. Прогоняем этот запрос в SoapUI и видим, что индекс-то там пустой! Грузим WS-ссылку в конфу для простоты навигации и видим, что действительно свойство Index не может быть пустым! Так что 1С со своей строгой проверкой с данной ошибкой справится в рамках XDTO не может. Попутно попробовал отследить трек-номер из их примера: свойство MaxMassRU объявлено обязательным, но в ответе напрочь отсутствует... Так что методом (4) пока совершенно безнадежно пользоваться. Остается только использовать метод ваш из (9), либо пытаться с разрабами сервиса связаться.
(20) Serginio, с формальной точки зрения 1С понимает все, вот только отказывается работать, если структура ответа/запроса отличается от того, что заявлено в описании web-сервиса
Вообщем решил попробовать через WS-ссылки, добавил напрямую с указанием адреса "http://tracking.russianpost.ru/rtm34?wsdl" присвоил имя: "APIЕдиничныйДоступКТрекеру".
Изменил код на тот который похож на сообщение 6:
И о чудо он выдает ошибку:
Ошибка при вызове метода контекста (getOperationHistory)
ДанныеИзСервиса = СервисПочты.getOperationHistory(getOperationHistory);
по причине:
Ошибка вызова операции сервиса: {http://russianpost.org/operationhistory}:OperationHistory12:getOperationHistory()
по причине:
Неизвестная ошибка. Ошибка проверки данных XDTO:
Структура объекта не соответствует типу: {http://russianpost.org/operationhistory/data}ItemParameters
Проверка свойства 'MaxMassRU':
форма: Элемент
имя: {http://russianpost.org/operationhistory/data}MaxMassRU
тип: {http://www.w3.org/2001/XMLSchema}integer
Отсутствует обязательное свойство
по причине:
Ошибка проверки данных XDTO:
Структура объекта не соответствует типу: {http://russianpost.org/operationhistory/data}ItemParameters
Проверка свойства 'MaxMassRU':
форма: Элемент
имя: {http://russianpost.org/operationhistory/data}MaxMassRU
тип: {http://www.w3.org/2001/XMLSchema}integer
Отсутствует обязательное свойство
Ступор .... да и в самом примере который у них сейчас на сайте есть в примерах каталог "Правильные схемы для работы единичного доступа" где эти пакеты для импорта правильные - он работает. Но почему тогда они не могут у себя в сервисе поправить то?????
Может кто-нибудь напишит насчет этого им в поддержку???
(26) SeverBaP, так я уже писал про отсутствие обязательного свойства в (18) и подключался к сервису из внешней обработки...хотя отличий-то никаких нет, что в конфуз ws-ссылку добавлять, что программно подключаться. И я думаю, вряд ли что-то они сломают, если у этих несчастных свойств снимут параметр "Обязвтельный"...к тому же, как видно, из заполнение совсем не обязательно, во всяком случае, пока)
Кинул письмо: "Воспользовался вашим сервисом с новым примером, да он работает. Но возникает вопрос почему для работы используются схемы в каталоге "Правильные схемы для работы единичного доступа", а не те которые заявлены в самом сервисе?" жду кирпич в ответ...
Ответ: "Схемы которые лежат "в самом сервисе" сохранены как есть, чтобы поддержать совместимость с предыдущей версией сервиса. Есть много клиентов кто работает имеенно с ней."
(31) Serginio, Есть уже реализованные методы получения данных по треккоду: первый описан в 9 сообщении, второй то что у них сейчас в примерах API есть. Суть в том что сервис почты России сейчас с режимом поддержки старого формата и поэтому 1с не может это проработать. Так что не надо какие-то еще костыли делать.
(32) В отличие от 9 WCF производит сериализацию и десериализацию автоматически. И ты работаешь с объектами а не XML
А это значительно проще, чем с родными 1С XDTO
(33) Serginio, Скорее читает по конструкции Попытка Исключение и летит дальше. Ну не понятен узел, ну и мир ему, главное закрыт и можно чесать дальше. Пакеты XDTO придумал не Родной 1с. Если видит в определении веб сервиса "Адрес" и он обязателен, ну Вы знаете куда 1с пошлет такой пакет если не увидит то что ему доложил сторонний Веб сервис
(32) SeverBaP, с первым вариантом из сообщения 9 все более-менее понятно. А второй вариант? Где эти примеры найти? В примерах на сайте https://tracking.pochta.ru/support/about/examples есть пример для 1С, но там получаем ошибку из 26 сообщения...
(34) solary, Все дело в 5 поправке пакете. Его нужно локально подправить и подгрузить. Вернее указать в сервисе локальный адрес файла определения, где нужно указать, что объекты не обязятельны.
Ну в общем; либо виноваты сами - Нефига покупать на ибей и у китайцев:) - валится как раз на международке, либо у Питерских разработчиков Веб сервиса програмщина круче 1с, что ваще думать не надо:(
Увы помочь смогу только по памяти. Аксес денайт. Нужна пара xml файлов с этого сайта. Сам сервис и пятый пакет
//++_Установим соединение
текСервис = WSСсылки.ЕдиничныйДоступКТрекеру.СоздатьWSПрокси(текURI, текНаименованиеВебСервиса, текНаименованиеПорта,,,Новый ЗащищенноеСоединениеOpenSSL);
текФабрика = текСервис.ФабрикаXDTO;
текПакет = текФабрика.Пакеты.Получить(текURI);
//++_Получим элементы свойства AuthorizationHeader
текAuthorizationHeader = текФабрика.Создать("http://russianpost.org/operationhistory/data","AuthorizationHeader");
текAuthorizationHeader.login = рЛогин; //++_логин полученный при регистрации https://tracking.pochta.ru
текAuthorizationHeader.password = рПароль; //++_пароль полученный при регистрации https://tracking.pochta.ru
//++_Получим элементы свойства PostalOrderEventsForMailInput
текPostalOrderEventsForMailInput = текФабрика.Создать("http://www.russianpost.org/RTM/DataExchangeESPP/Data","PostalOrderEventsForMailInput");
текPostalOrderEventsForMailInput.Barcode = ЗаказПокупателя.НомерДляОтслеживание;
текPostalOrderEventsForMailInput.Language = "RUS";
//++_Получим элементы свойства PostalOrderEventsForMail и поместим в него элементы свойств AuthorizationHeader и PostalOrderEventsForMailInput
текПакетPostalOrderEventsForMail = текФабрика.Пакеты.Получить("http://russianpost.org/operationhistory").Получить("PostalOrderEventsForMail");
текPostalOrderEventsForMail = текФабрика.Создать(текПакетPostalOrderEventsForMail);
текPostalOrderEventsForMail.PostalOrderEventsForMailInput = текPostalOrderEventsForMailInput;
текPostalOrderEventsForMail.AuthorizationHeader = текAuthorizationHeader;
//++_Получим ответ от сервера
ОтветОтСервера = текСервис.PostalOrderEventsForMail(текPostalOrderEventsForMail);
Показать
Правда всё равно вылетает ошибка:
При вызове веб-сервиса произошла ошибка. Ошибка вызова операции сервиса: {<noindex><a class="is-fancybox" href="/redirect.php?url=aHR0cDovL3J1c3NpYW5wb3N0Lm9yZy9vcGVyYXRpb25oaXN0b3J5" target="_blank" rel="nofollow">http://russianpost.org/operationhistory}:OperationHistory12:PostalOrderEventsForMail()
по причине:
При вызове веб-сервиса произошла ошибка. Неизвестная ошибка. Ошибка преобразования данных XDTO:
Чтение объекта типа: {<noindex><a class="is-fancybox" href="/redirect.php?url=aHR0cDovL3d3dy5ydXNzaWFucG9zdC5vcmcvUlRNL0RhdGFFeGNoYW5nZUVTUFAvRGF0YQ==" target="_blank" rel="nofollow">http://www.russianpost.org/RTM/DataExchangeESPP/Data}PostalOrderEventsForMaiOutput - [1,971]
Проверка дополнительного свойства:
форма: Элемент
имя: PostalOrderEvent
по причине:
Ошибка преобразования данных XDTO:
Чтение объекта типа: {<noindex><a class="is-fancybox" href="/redirect.php?url=aHR0cDovL3d3dy5ydXNzaWFucG9zdC5vcmcvUlRNL0RhdGFFeGNoYW5nZUVTUFAvRGF0YQ==" target="_blank" rel="nofollow">http://www.russianpost.org/RTM/DataExchangeESPP/Data}PostalOrderEventsForMaiOutput - [1,971]
Проверка дополнительного свойства:
форма: Элемент
имя: PostalOrderEvent
по причине:
Ошибка проверки данных XDTO:
Структура объекта не соответствует типу: {<noindex><a class="is-fancybox" href="/redirect.php?url=aHR0cDovL3d3dy5ydXNzaWFucG9zdC5vcmcvUlRNL0RhdGFFeGNoYW5nZUVTUFAvRGF0YQ==" target="_blank" rel="nofollow">http://www.russianpost.org/RTM/DataExchangeESPP/Data}PostalOrderEventsForMaiOutput
Показать
Правда есть подозрение, что это по причине кривого сервиса ПР... Буду мучать их техподдержку.
Друзья, починил WSСсылку (Подменил на свою валидную схему xsd). Если кому надо создать ws-ссылку, что б нормально по SOAP получать информацию - велкам в личку - пришлю конфигурацию с ws-ссылкой)
У кого-нибудь есть рабочий вариант? У меня ошибка авторизации во всех примерах ниже. В ЛК почты указан только логин на настройках, пробовал его и в логин И В ПАРОЛЬ и в оба... никак (