Я пытаюсь сделать вызов не WSDL в PHP (5.2.5) следующим образом. Я уверен, что я пропустил что-то простое. Этот вызов имеет один параметр, строку, называемую «часовой пояс»:
$URL = 'http://www.nanonull.com/TimeService/TimeService.asmx'; $client = new SoapClient(null, array( 'location' => $URL, 'uri' => "http://www.Nanonull.com/TimeService/", 'trace' => 1, )); // First attempt: // FAILS: SoapFault: Object reference not set to an instance of an object $return = $client->__soapCall("getTimeZoneTime", array(new SoapParam('ZULU', 'timezone')), array('soapaction' => 'http://www.Nanonull.com/TimeService/getTimeZoneTime') ); // Second attempt: // FAILS: Generated soap Request uses "param0" instead of "timezone" $return = $client->__soapCall("getTimeZoneTime", array('timezone'=>'ZULU' ), array('soapaction' => 'http://www.Nanonull.com/TimeService/getTimeZoneTime') );
Спасибо за любые предложения
-Dave
Решение @Dave C не сработало для меня. Оглядевшись, я придумал другое решение:
$URL = 'http://www.nanonull.com/TimeService/TimeService.asmx'; $client = new SoapClient(null, array( 'location' => $URL, 'uri' => "http://www.Nanonull.com/TimeService/", 'trace' => 1, )); $return = $client->__soapCall("getTimeZoneTime", array(new SoapParam(new SoapVar('ZULU', XSD_DATETIME), 'timezone')), array('soapaction' => 'http://www.Nanonull.com/TimeService/getTimeZoneTime') );
Надеюсь, это может помочь кому-то.
Благодарю. Вот полный пример, который теперь работает:
$URL = 'http://www.nanonull.com/TimeService/TimeService.asmx'; $client = new SoapClient(null, array( 'location' => $URL, 'uri' => "http://www.Nanonull.com/TimeService/", 'trace' => 1, )); $return = $client->__soapCall("getTimeZoneTime", array(new SoapParam('ZULU', 'ns1:timezone')), array('soapaction' => 'http://www.Nanonull.com/TimeService/getTimeZoneTime') );
Проблема заключается где-то в отсутствии информации о пространстве имен в параметре. Я использовал первый пример вашего примера, поскольку он был ближе всего к тому, что я придумал.
Если вы измените строку:
array(new SoapParam('ZULU', 'timezone')),
чтобы:
array(new SoapParam('ZULU', 'ns1:timezone')),
он должен дать вам результат, которого вы ожидали.
Вы можете попытаться добавить еще один array()
вызова своих параметров:
$params = array('timezone'=>'ZULU' ); $return = $client->__soapCall("getTimeZoneTime", array($params), array('soapaction' => 'http://www.Nanonull.com/TimeService/getTimeZoneTime') );
Я не могу проверить это, но вы могли бы.