调用WSDL提供的函数时,PHP5SOAP客户端返回NULL

调用WSDL提供的函数时,PHP5SOAP客户端返回NULL,php,xml,web-services,soap,wsdl,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 $sharedSecre

我正在尝试使用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中,我只是简单地将响应转换为XML文档。我也应该在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:我正在使用PHP5库。也许使用nu soap之类的其他库会有所帮助?网上似乎有更多关于它的文档


更新:

使用数组传递参数不起作用,SOAP需要单独的参数。调用_getLastRequest()返回一个字符串,该字符串连接$key和$req,不包含其他XML。调用uu getLastResponse()返回一个空字符串。没有抛出任何异常。PHP似乎不知道如何处理我给它的参数,即使它已经解析了WSDL文件,因为我在调用u getFunctions()时得到了列出的我使用的函数

任何帮助都将不胜感激


更新“:仍然没有有效的解决方案。我很困惑…

当我开始在php中使用SoapClient库时,我发现这整件事非常令人困惑。设置这些内容格式的正确方法如下:

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

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

$response = $client->basicSearch( $params );
在没有看到响应的情况下,我无法告诉您如何引用返回参数,但其存储方式是作为stdClass对象的成员变量。这样您就可以像这样引用报表

$reponse->paramName

如果您将数组(“trace”=>1)选项集保留在其中,一个很好的技巧是您可以调用这两个函数

$respXML = $client->__getLastResponse();
$requXML = $client->__getLastRequest();
。。。查看发送的实际xml,查看其格式是否正确。小心,SoapClient有很多错误。不过比努索普好得多,不要去捡垃圾。

是的

$client=newsoapclient($wsdl_url,数组(“trace”=>1))


“trace”参数有助于

请注意,回显数组将始终显示“array”,因为这是数组转换为字符串的方式。尝试使用print_r()或var_dump()。是的,现在我列出了正确的函数。谢谢你,我真的知道并且错过了。问题已更新。您的代码示例未检查客户端可能引发的异常-为了示例的简单性,是否对此进行了修改?如果没有,我建议通过try/catch添加检查,因为它可能会给您一些有用的错误消息。为了调试,try/catch不是更好,因为所有抛出的异常都会显示出来,我不同意注释/格式备注:只有在使用
$client->\uuu soapCall($functionName,$arguments)
方法时,才能将参数作为数组传递,该方法主要用于非WSDL用途。如果您使用WSDL,您应该直接按名称调用函数,并像OP一样单独传递参数。但我同意使用trace选项和_getLastRequest()检查实际返回值。正如Henrik Opel提到的,array方法似乎不起作用。PHP抱怨缺少必需的参数。当我使用trace和uuu getLastRequest()和uuu getLastResponse()时,我得到了第一个参数和第二个参数的串联作为我的请求,以及一个空字符串作为响应,就好像PHP不知道如何处理我的请求一样。调用_getFunctions()返回我使用的函数,因此WSDL将被读取。。。这整件事让人困惑。我发现了我的不同之处——这取决于wsdl的体系结构以及发布soap服务端点的语言/包,您可能会遇到这样一种情况,即参数应该是数组/对象。我在工作中使用的soap服务是由EJB发布的——它们返回stdobject,并期望参数作为数组传递,而不是按顺序传递。。。。不管怎样,我只是想跟进一下。