当调用WSDL提供的函数时,PHP 5 SOAP客户端返回NULL

时间:2009-08-25 15:04:22

标签: php xml web-services soap wsdl

我正在尝试使用Web服务从我的PHP应用程序中查找特定用户。我已经成功地在ASP.NET中使用了完全相同的Web服务。

基本上,我会像PHP文档告诉我的那样做,并且我使用与ASP.NET中使用的相同的方法/变量(对于web服务本身),但我似乎无法得到结果。

该函数列在__getFunctions()中,应返回anyType,如果我理解正确,则相当于PHP中的mixed

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

当我调用basicSearch()时,似乎返回NULL。

basicSearch()应该返回带有信息的XML文档。在ASP.NET中,我习惯于简单地将响应转换为XmlDocument。我也应该在PHP中这样做吗?使用XML文档的表示形式(SimpleXML,DOM等)?

它是否因为PHP无法理解格式而显示为NULL?

我在PHP中做错了什么?或者我应该查看Web服务本身并尝试在那方进行调试?

<?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()时得到了我使用的函数。

任何帮助都将不胜感激。

更新':仍无法解决方案。我很困惑......

2 个答案:

答案 0 :(得分:5)

当我开始在php中使用SoapClient库时,我发现整个事情非常混乱。格式化这些东西的正确方法如下:

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

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

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

没有看到响应,我不能告诉你如何引用返回参数,但是它存储的方式是作为stdClass对象的成员var。这样你就像这样引用了这个......

$ reponse-&GT; PARAMNAME;

如果你保留数组(“trace”=&gt; 1)一组选项,你可以调用这两个函数,这是一个很好的技巧....

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

...查看发送出来的实际xml,看看它是否格式正确。小心,SoapClient很漂亮。比nusoap好多了,不要去那个垃圾桶。

答案 1 :(得分:1)

叶氏

$ client = new SoapClient($ wsdl_url,array(“trace”=&gt; 1));

“trace”参数帮助