SOAP-клиент PHP 5 возвращает NULL при вызове WSDL-функции - PullRequest
6 голосов
/ 25 августа 2009

Я пытаюсь использовать веб-сервис для поиска конкретных пользователей из моего PHP-приложения. Я использовал тот же веб-сервис в ASP.NET с успехом.

По сути, я делаю все, как мне подсказывает документ PHP, и я использую те же методы / переменные, которые я использовал в ASP.NET (для самого веб-сервиса), но, похоже, не могу получить результат.

Функция указана в __getFunctions () и должна возвращать anyType, что, если я правильно понимаю, эквивалентно mixed в PHP:

array(1) { [0]=>  string(63) "anyType basicSearch(string $sharedSecret, string $searchParams)" } 

Когда я вызываю basicSearch (), он возвращает NULL.

basicSearch () должен возвращать XML-документ с информацией. В ASP.NET я просто использовал ответ, я полагаю, и XmlDocument. Должен ли я сделать это в PHP тоже? С каким представлением документа XML (SimpleXML, DOM и т. Д.)?

Может ли он отображаться как NULL только потому, что PHP не может понять формат?

Я что-то не так делаю в PHP? Или я должен посмотреть на сам веб-сервис и попытаться отладить на этой стороне?

<?php
    $client = new SoapClient($wsdl_url);

    echo $client->__getFunctions();
    echo "<br />\n";
    echo $client->basicSearch($key, $req);
?>

PS: я использую библиотеку PHP 5. Может быть, использование другой библиотеки, такой как nu-soap, поможет? Похоже, в Интернете больше информации об этом.


Обновление:

Использование массива для передачи параметра не работает, SOAP ожидает отдельные аргументы. Вызов __getLastRequest () возвращает строку, объединяющую $ key и $ req без другого XML. Вызов __getLastResponse () возвращает пустую строку. Никаких исключений не выбрасывается. Кажется, что PHP не знает, что делать с аргументами, которые я ему предоставляю, даже если он проанализировал файл WSDL, поскольку я получаю указанную функцию при вызове __getFunctions ().

Буду признателен за любую помощь.

Update ': Решение по-прежнему не работает. Я сбит с толку ...

Ответы [ 2 ]

5 голосов
/ 29 августа 2009

Я обнаружил, что все это довольно запутанно, когда я начал использовать библиотеки SoapClient в php. Правильный способ форматирования этого материала выглядит следующим образом:

$client = new SoapClient( $wsdl_url, array( "trace" => 1 ) );

$params = array(
    "sharedSecret" => "thisIsSomeSecret",
    "searchParams" => "thisIsSomeSearchParam"
);

$response = $client->basicSearch( $params );

Не видя ответа, я не могу сказать вам, как ссылаться на возвращаемые параметры, но способ, которым он хранится, является элементом var объекта stdClass. Так, что вы ссылаетесь на возврат, как это ...

$ reponse-> ParamName;

Хорошая хитрость, если вы сохраняете множество опций массива ("trace" => 1) в том, что вы можете вызывать эти две функции ....

$respXML = $client->__getLastResponse();
$requXML = $client->__getLastRequest();

... чтобы увидеть фактический xml, который отправляется, чтобы увидеть, правильно ли он сформирован. Осторожно, SoapClient довольно глючит. Гораздо лучше, чем nusoap, не идите на этот мусор.

1 голос
/ 09 июля 2010

Yeap

$ client = new SoapClient ($ wsdl_url, array ("trace" => 1));

помогает параметр "trace"

...