ошибка внутреннего сервера при запуске soapclient

Это должно быть легко для профессионалов. Я использую библиотеку php soapClient для простого вызова (см. Код ниже).

<?php error_reporting(E_ALL); ini_set('display_errors', '1'); $url = "http://webservices.daehosting.com/services/TemperatureConversions.wso?WSDL"; $client = new SoapClient($url, array("trace" => 1, "exception" => 0)); var_dump($client->__getFunctions()); $SOAPCall = "CelciusToFahrenheit"; $SoapCallParameters = "30"; $obj = $client->CelciusToFahrenheit($SoapCallParameters); var_dump($obj); var_dump($client->getLastRequest()); ?> </body> 

Когда я выполню, я получаю следующую ошибку. Я просмотрел журналы ошибок Apache и вижу ту же ошибку.

 Fatal error: Uncaught SoapFault exception: [HTTP] Internal Server Error in C:\wamp\www\phpSandbox\index.php:16 Stack trace: #0 [internal function]: SoapClient->__doRequest('<?xml version="...', 'http://webservi...', '', 1, 0) #1 C:\wamp\www\phpSandbox\index.php(16): SoapClient->__call('CelciusToFahren...', Array) #2 C:\wamp\www\phpSandbox\index.php(16): SoapClient->CelciusToFahrenheit('30') #3 {main} thrown in C:\wamp\www\phpSandbox\index.php on line 16 

Я также прочитал кое-что из людей, сталкивающихся с подобными проблемами, но не смог найти решение.

Я точно знаю, что библиотека soapClient активирована, потому что работает следующий код

 var_dump($client->__getFunctions()); 

вывод:

 array (size=4) 0 => string 'CelciusToFahrenheitResponse CelciusToFahrenheit(CelciusToFahrenheit $parameters)' (length=80) 1 => string 'FahrenheitToCelciusResponse FahrenheitToCelcius(FahrenheitToCelcius $parameters)' (length=80) 2 => string 'WindChillInCelciusResponse WindChillInCelcius(WindChillInCelcius $parameters)' (length=77) 3 => string 'WindChillInFahrenheitResponse WindChillInFahrenheit(WindChillInFahrenheit $parameters)' (length=86) 

любая помощь для устранения этой ошибки и возможного объяснения ошибки будет замечательной.

Internal Server Error обычно означает, что сервер получил ваш запрос, но ему не понравился один из параметров.

Посмотрите на свой WSDL. Я вижу, что CelciusToFahrenheit ожидает один параметр с этим определением:

 <xs:complexType> <xs:sequence> <xs:element name="nCelcius" type="xs:decimal"/> </xs:sequence> </xs:complexType> 

Объектом является сложный тип. Поэтому попробуйте следующее:

 $SoapCallParameters = new stdClass(); $SoapCallParameters->nCelcius = 30; $obj = $client->CelciusToFahrenheit($SoapCallParameters);