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

6 php xml soap wsdl web-services

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

基本上,我做了PHP文档告诉我的所有事情,并且我使用了我在ASP.NET中使用的相同方法/变量(对于webservice本身),但我似乎无法得到结果.

该函数列在__getFunctions()中并应该返回anyType,如果我理解正确,则mixed在PHP中等效:

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

当我调用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);
?>
Run Code Online (Sandbox Code Playgroud)

PS:我正在使用PHP 5库.也许使用像nu-soap这样的其他库会有帮助吗?似乎有更多关于它的在线文档.


更新:

使用数组传递参数不起作用,SOAP需要单独的参数.调用__getLastRequest()会返回一个字符串连接$ key和$ req而没有其他XML.调用__getLastResponse()会返回一个空字符串.没有任何例外.似乎PHP不知道如何处理我给它的参数,即使它已经解析了WSDL文件,因为我在调用__getFunctions()时得到了我使用的函数.

任何帮助,将不胜感激.

更新':仍然无法解决问题.我很困惑......

Jos*_*osh 5

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

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

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

$response = $client->basicSearch( $params );
Run Code Online (Sandbox Code Playgroud)

在没有看到响应的情况下,我无法告诉您如何引用返回参数,但是它存储的方式是作为stdClass对象的成员var.这样你就像这样引用了回报......

$ reponse-> PARAMNAME;

如果你保持数组("trace"=> 1)选项集是一个很好的技巧,你可以调用这两个函数....

$respXML = $client->__getLastResponse();
$requXML = $client->__getLastRequest();
Run Code Online (Sandbox Code Playgroud)

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