Помогите разобраться с WS-ссылками Доброго времени суток. Есть некий сервис с API, данные с которого надо получать через SOAP. Есть рабочий код на php, нужен "аналог" для 1С. Есть описание: Метод "getTicketsByDate" Входные параметры: На вход метод принимает объект класса stdClass со следующими свойствами: $object->login – Ваш логин в системе. $object->password – Ваш пароль в системе. $object->from – Начало периода в формате timestamp, по умолчанию с самого начала UNIX-time. $object->to – Конец периода в формате timestamp, по умолчанию текущая дата. Есть пример кода на php, который работает как надо: <?php $client = new Soapclient('89.20.149.116/pcsupport/tm/soap?wsdl'); $data = new stdClass(); $data->login = "login"; $data->password = "password"; $data->from = "1370894743"; $data->to = "1371729943"; $result = $client->getTicketsByDate($data); ?> Поставил SoapUI чтобы протестировать, проверка прошла удачно, все возвращается как надо. Пытаюсь сделать в 1С. В конфигурацию добавил новую WS-ссылку - SOAP. Написал такой код: WSОпределения = WSСсылки.SOAP.ПолучитьWSОпределения(); Пакеты = WSОпределения.ФабрикаXDTO.Пакеты.Получить("http://89.20.149.116/pcsupport/tm/soap"); ТипОбъекта = Неопределено; Для i = 0 По Пакеты.Количество() - 1 Цикл Если СокрЛП(Пакеты.Получить(i).Имя) = "get_tickets_by_date_data" Тогда ТипОбъекта = Пакеты.Получить(i); КонецЕсли; КонецЦикла; Если ТипОбъекта <> Неопределено Тогда Тип_dateTime = ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "dateTime"); Тип_string = ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "string"); ВебСервис = WSСсылки.SOAP.СоздатьWSПрокси("http://89.20.149.116/pcsupport/tm/soap", "getTicketsByDatewsdl", "getTicketsByDatewsdlPort"); getTicketsByDateData = ВебСервис.ФабрикаXDTO.Создать(ТипОбъекта); getTicketsByDateData.login = ФабрикаXDTO.Создать(Тип_string, "НашЛогин"); getTicketsByDateData.password = ФабрикаXDTO.Создать(Тип_string, "НашПароль"); getTicketsByDateData.from = ФабрикаXDTO.Создать(Тип_dateTime, НачалоГода(ТекущаяДата())); getTicketsByDateData.to = ФабрикаXDTO.Создать(Тип_dateTime, ТекущаяДата()); Результат = ВебСервис.getTicketsByDate(getTicketsByDateData); КонецЕсли; Ошибка при вызове метода контекста (getTicketsByDate) Результат = ВебСервис.getTicketsByDate(getTicketsByDateData); по причине: Ошибка вызова операции сервиса: {http://89.20.149.116/pcsupport/tm/soap**:getTicketsByDatewsdl:getTicketsByDate() по причине: Неверный формат Не могу понять из-за чего. Заранее благодарен за помощь. |
эээ... как минимум вот это лишнее: ФабрикаXDTO.Создать(Тип_string, "НашЛогин"); здесь просто надо присваивать getTicketsByDateData.login = "НашЛогин"; и т.д. |
и вообще куча лишнего: ТипОбъекта = Неопределено; Для i = 0 По Пакеты.Количество() - 1 Цикл Если СокрЛП(Пакеты.Получить(i).Имя) = "get_tickets_by_date_data" Тогда ТипОбъекта = Пакеты.Получить(i); КонецЕсли; КонецЦикла; можно заменить на Пакеты.Получить("get_tickets_by_date_data"); |
вообщем все это заменить на: [code] Прокси = WSСсылки.ТвояСсылка.СоздатьWSПрокси(ТвоиПараметры); ТипWSПараметра = Прокси.ФабрикаXDTO.Пакеты.Получить(ТвоиПараметры).Получить("get_tickets_by_date_data"); WSПараметр = Прокси.ФабрикаXDTO.Создать(ТипWSПараметра); WSПараметр.Login = Пользователь; WSПараметр.Password = Пароль; WSПараметр.from = НачалоГода(ТекущаяДата(); WSПараметр.to = ТекущаяДата(); Результат = Прокси.getTicketsByDate(WSПараметр); [/code] |
Согласен, код далек от идеала. В первый раз работаю с ws-ссылками, поэтому не все до конца понимаю. 1-Uho >и так пробовал, ошибка все равно прежняя. 3-Uho >переделал код согласно примера, ничего не изменилось: Прокси = WSСсылки.SOAP.СоздатьWSПрокси("http://89.20.149.116/pcsupport/tm/soap" , "getTicketsByDatewsdl", "getTicketsByDatewsdlPort"); ТипWSПараметра = Прокси.ФабрикаXDTO.Пакеты.Получить("http://89.20.149.116/pcsupport/tm/soap").Получить("get_tickets_by_date_data"); WSПараметр = Прокси.ФабрикаXDTO.Создать(ТипWSПараметра); WSПараметр.Login = Пользователь; WSПараметр.Password = Пароль; WSПараметр.from = НачалоГода(ТекущаяДата()); WSПараметр.to = ТекущаяДата(); Результат = Прокси.getTicketsByDate(WSПараметр); ошибка: Ошибка при вызове метода контекста (getTicketsByDate) Результат = Прокси.getTicketsByDate(WSПараметр); по причине: Ошибка вызова операции сервиса: {http://89.20.149.116/pcsupport/tm/soap**:getTicketsByDatewsdl:getTicketsByDate() по причине: Неверный формат. |
возможно ошибка в этих параметрах: "getTicketsByDatewsdl", "getTicketsByDatewsdlPort" |
Копировал из структуры (хотя возможно не то, повторюсь в первый раз с подобным сталкиваюсь) [url]http://prntscr.com/4hmqkd[/url] |
6-lex81 > тогда вроде правильно |
Текущее время: 01:02. Часовой пояс GMT +3. |