К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Помогите разобраться с WS-ссылками

Гость
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()
по причине:
Неверный формат

Не могу понять из-за чего.
Заранее благодарен за помощь.



Uho
1 - 29.08.2014 - 15:37
эээ... как минимум вот это лишнее:
ФабрикаXDTO.Создать(Тип_string, "НашЛогин");

здесь просто надо присваивать
getTicketsByDateData.login = "НашЛогин";

и т.д.
Uho
2 - 29.08.2014 - 15:40
и вообще куча лишнего:

ТипОбъекта = Неопределено;

Для i = 0 По Пакеты.Количество() - 1 Цикл
Если СокрЛП(Пакеты.Получить(i).Имя) = "get_tickets_by_date_data" Тогда
ТипОбъекта = Пакеты.Получить(i);
КонецЕсли;
КонецЦикла;

можно заменить на

Пакеты.Получить("get_tickets_by_date_data");
Uho
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()
по причине:
Неверный формат.
Uho
5 - 29.08.2014 - 16:04
возможно ошибка в этих параметрах: "getTicketsByDatewsdl", "getTicketsByDatewsdlPort"
Гость
6 - 29.08.2014 - 16:10
Копировал из структуры (хотя возможно не то, повторюсь в первый раз с подобным сталкиваюсь)

http://prntscr.com/4hmqkd
Uho
7 - 29.08.2014 - 16:50
6-lex81 > тогда вроде правильно


К списку вопросов






Copyright ©, Все права защищены