如何使用SoapClient调用WSDL中的方法

时间:2019-04-25 15:45:13

标签: php soap soap-client

我在使用SOAP时遇到问题,我100%确信它是我自己的事,而不是Web服务。

我可以成功连接到wsdl。

$wsdl="http://webservices_qa.linksunlimited.com/LinksWebService.svc?wsdl";
$client = new SoapClient($wsdl, array('trace'=>1));
$functions = $client->__getFunctions();
var_dump($functions);

向我展示了功能,所以我知道我可以使用它。

ini_set('default_socket_timeout', 2000000);

$wsdl="http://webservices_qa.linksunlimited.com/LinksWebService.svc?wsdl";

$client = new SoapClient($wsdl, array('trace'=>1));
$result = $client->GetProductCatalog((object)$links_credentials);
//$result = $client->GetProductCatalog($links_credentials); 
//$client->__soapCall("GetProductCatalog", $links_credentials);
//$result = $client->__soapCall("GetProductCatalog", (object)$links_credentials); //when i try this i get null

我应该期望得到很大的响应,大约1.6MB。

我得到: 由于内部错误,服务器无法处理请求。有关错误的更多信息,请打开服务器上的IncludeExceptionDetailInFaults(从ServiceBehaviorAttribute或从配置行为),以便将异常信息发送回客户端,或者按照Microsoft .NET Framework SDK文档和检查服务器跟踪日志。

编辑:当我尝试

$result = $client->__soapCall("GetProductCatalog",$links_credentials);

我得到“格式化程序尝试对消息进行反序列化时引发异常:对操作'GetProductCatalog'的请求消息正文进行反序列化时出错。预期来自名称空间'http://schemas.xmlsoap.org/soap/envelope/'的结束元素'Body'。找到的元素'来自名称空间“”的param1'。第2行,位置158。”

我觉得我已经接近了。...

1 个答案:

答案 0 :(得分:0)

好,所以问题在于参数必须是多维的。所以最终看起来像

$result = $client->GetProductCatalog(array('requestCredentials'=>array('UserKey'=>$user, 'UserPassword'=>$pass)));
print_r($result->GetProductCatalogResult);

这在他们的文档中根本看不出来。