0
- 29.08.2014 - 14:41
|
Доброго времени суток. Есть некий сервис с 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() по причине: Неверный формат Не могу понять из-за чего. Заранее благодарен за помощь. | |
1
- 29.08.2014 - 15:37
|
эээ... как минимум вот это лишнее: ФабрикаXDTO.Создать(Тип_string, "НашЛогин"); здесь просто надо присваивать getTicketsByDateData.login = "НашЛогин"; и т.д. | |
2
- 29.08.2014 - 15:40
|
и вообще куча лишнего: ТипОбъекта = Неопределено; Для i = 0 По Пакеты.Количество() - 1 Цикл Если СокрЛП(Пакеты.Получить(i).Имя) = "get_tickets_by_date_data" Тогда ТипОбъекта = Пакеты.Получить(i); КонецЕсли; КонецЦикла; можно заменить на Пакеты.Получить("get_tickets_by_date_data"); | |
3
- 29.08.2014 - 15:45
|
вообщем все это заменить на: Код: Прокси = WSСсылки.ТвояСсылка.СоздатьWSПрокси(ТвоиПараметры); ТипWSПараметра = Прокси.ФабрикаXDTO.Пакеты.Получить(ТвоиПараметры).Получить("get_tickets_by_date_data"); WSПараметр = Прокси.ФабрикаXDTO.Создать(ТипWSПараметра); WSПараметр.Login = Пользователь; WSПараметр.Password = Пароль; WSПараметр.from = НачалоГода(ТекущаяДата(); WSПараметр.to = ТекущаяДата(); Результат = Прокси.getTicketsByDate(WSПараметр); | |
4
- 29.08.2014 - 15:59
|
Согласен, код далек от идеала. В первый раз работаю с 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() по причине: Неверный формат. | |
5
- 29.08.2014 - 16:04
| возможно ошибка в этих параметрах: "getTicketsByDatewsdl", "getTicketsByDatewsdlPort" | |
6
- 29.08.2014 - 16:10
|
Копировал из структуры (хотя возможно не то, повторюсь в первый раз с подобным сталкиваюсь) http://prntscr.com/4hmqkd | |
7
- 29.08.2014 - 16:50
| 6-lex81 > тогда вроде правильно | |
| Интернет-форум Краснодарского края и Краснодара |