PHP的SOAP请求无效

时间:2014-04-28 10:58:41

标签: php web-services soap wsdl

我有一个@ http://www.xxxxx/zzzzzzzz/service.asmx可用的Web服务,我正在尝试使用这两个参数发送方法 - some_function的SOAP请求,但仍然无法获得连接。

这是我的代码:

<?php

$param = array('cedula'=>'XXXX','contrasena'=>'YYYYYY');

$client = new SoapClient("http://www.xxxxx/zzzzzzzz/service.asmx?wsdl");
$result = $client->__soapCall('some_function', $param);

print $result;

?>

我得到的错误是:

  

致命错误:未捕获的SoapFault异常:[soap:Server]服务器无法处理请求。 ---&GT;你调用的对象是空的。在/home/zzzz/XXXXXXXXXX.com/uni/index.php:6堆栈跟踪:#0 /home/zzzz/XXXXXXXXXX.com/uni/index.php(6):SoapClient-&gt; __ soapCall('some_function',阵列#1 {main}在第6行的/home/zzzz/XXXXXXXXXX.com/uni/index.php中抛出

请建议更正。非常感谢提前:))

3 个答案:

答案 0 :(得分:2)

谢谢@dootzky&amp; @lulco。我解决了这个问题。下面的代码对我来说非常好:

<?php

ini_set("soap.wsdl_cache_enabled", "0"); // disabling WSDL cache
$wsdl_path = "http://www.xxxxxxx/zzzzzzzzzz/service.asmx?WSDL";

$login_id = 'XXXX';
$password = 'YYYYYY';

$client = new SoapClient($wsdl_path, array('trace' => 1));

try {
    echo "<pre>\n";
    $result = $client->SOME_FUNCTION(array("request" => array("cedula" => $login_id, "contrasena" => $password)))
    print_r($result);
    echo "\n";
}
catch (SoapFault $exception) {
    echo $exception;      
} 

?>

答案 1 :(得分:0)

我认为您非常接近使用此代码。我也赞扬StackOverflow上的这个答案,看起来非常类似于你的要求:

"Object reference not set to an instance of an object" error connecting to SOAP server from PHP

所以也许你应该直接拍摄方法,如下:

$client->SOME_FUNCTION(array("request" => array('cedula'=>'XXXX','contrasena'=>'YYYYYY'));

希望有所帮助! :)

答案 2 :(得分:0)

我认为在服务SOME_FUNCTION的wsdl中可能存在问题。

以下是服务列表: http://www.xxxxxx/zzzzzzzzzz/service.asmx

所有这些都有效,但SOME_FUNCTION并不适用。转到网址http://www.xxxxxx/zzzzzzzzzz/service.asmx?op=SOME_FUNCTION并尝试设置参数,然后点击调用。它将不起作用并抛出异常&#34;对象引用未设置为对象的实例。&#34;。 然后尝试另一个服务,它将工作并返回一些结果。

OTHER_FUNCTION服务的示例:


$param = array('estatus'=>'XXXX');

$client = new SoapClient("http://www.xxxxxx/zzzzzzzzzz/service.asmx?wsdl");
$result = $client->__soapCall('OTHER_FUNCTION', $param);

print_r($result);