Как вызвать метод в WSDL с помощью SoapClient - PullRequest
0 голосов
/ 25 апреля 2019

У меня проблема с SOAP, и я на 100% уверен, что это моя сторона, а не веб-служба.

Я могу успешно подключиться к wsdl.

$wsdl="http://webservices_qa.linksunlimited.com/LinksWebService.svc?wsdl";
$client = new SoapClient($wsdl, array('trace'=>1));
$functions = $client->__getFunctions();
var_dump($functions);

Показывает мне функции, чтобы я знал, что могу добраться до него.

ini_set('default_socket_timeout', 2000000);

$wsdl="http://webservices_qa.linksunlimited.com/LinksWebService.svc?wsdl";

$client = new SoapClient($wsdl, array('trace'=>1));
$result = $client->GetProductCatalog((object)$links_credentials);
//$result = $client->GetProductCatalog($links_credentials); 
//$client->__soapCall("GetProductCatalog", $links_credentials);
//$result = $client->__soapCall("GetProductCatalog", (object)$links_credentials); //when i try this i get null

Я должен ожидать большой ответ, около 1,6 МБ.

Я получаю: Серверу не удалось обработать запрос из-за внутренней ошибки. Для получения дополнительной информации об ошибке либо включите IncludeExceptionDetailInFaults (либо из ServiceBehaviorAttribute, либо из поведения конфигурации) на сервере, чтобы отправить информацию об исключении обратно клиенту, либо включите трассировку в соответствии с документацией Microsoft .NET Framework SDK и проверить журналы трассировки сервера.

РЕДАКТИРОВАТЬ: Когда я пытаюсь

$result = $client->__soapCall("GetProductCatalog",$links_credentials);

Я получаю "Средство форматирования выдало исключение при попытке десериализации сообщения: ошибка в десериализации тела сообщения запроса для операции" GetProductCatalog ". Завершить элемент" Body "из пространства имен" http://schemas.xmlsoap.org/soap/envelope/' Ожидается. Найденный элемент " param1 'из пространства имен' '. Строка 2, позиция 158. "

Я чувствую, что я рядом ....

1 Ответ

0 голосов
/ 26 апреля 2019

Хорошо, проблема в том, что параметры должны быть многомерными. так в конечном итоге выглядит как

$result = $client->GetProductCatalog(array('requestCredentials'=>array('UserKey'=>$user, 'UserPassword'=>$pass)));
print_r($result->GetProductCatalogResult);

Это не было заметно в их документации.

...