0

我正在编写一个执行 SOAP 请求的 PHP 应用程序。有时他们的服务器没有启动或出现某种问题,我的应用程序出现如下错误:

Undefined property: stdClass::$getSomethingJSONResult

SOAP 请求失败的原因可能有很多,我希望能够检查这些错误情况,以便程序可以处理它。

我有两个在 PHP 中使用的 SOAP 函数。一个用于登录 SOAP 服务器,另一个用于查询以获取 soapFunction。它们看起来像这样:

// --------------------- FUNCTIONS -----------------------
function login_soap($username,$password) {

global $soapClient;

$soapURL = "http://SOAPServerSomeplace.asmx?WSDL";
$ns = 'http://microsoft.com/webservices/'; //Namespace of the WS.
$soapParameters = array('userName' => $username, 'password' => $password);

$soapClient = new SoapClient($soapURL);

$header = new SoapHeader($ns,'UserCredentials',$soapParameters,false);

$soapClient->__setSoapHeaders($header);

}
// -------------------------------------------------------
function getSomething($option) {

global $soapClient;

$soapFunctionParameters = array('this' => $option) ;
$soapFunction = "getSomethingJSON" ;

$this_json = $soapClient->$soapFunction($soapFunctionParameters);
$stdClassObject = json_decode($this_json->getSomethingJSONResult);
$this_obj = $stdClassObject->this;
return $this_obj;   
}
// -------------------------------------------------------

我想知道我是否可以这样做:

if (login_soap($username,$password)) {
echo "This worked." . "\n";
} else {
echo "This failed." . "\n";
}

还是使用 getSomething($option)?

我不知道如何模拟 SOAP 请求失败来测试这一点,但我认为 SOAP 请求失败会导致 PHP 中止。我需要捕获它,这样它就不会中止 PHP,所以我可以指导它做其他事情。

我首先关心的是确保 SOAP 请求有效。然后检查它返回的 JSON 文件,以确保它具有程序继续之前所需的所有数据。检查我发现的 JSON 文件,但不是 SOAP 请求。谢谢!

4

2 回答 2

0

如果出现错误,SOAP 将抛出 SoapFault Exception。您只需要捕获异常,就可以处理错误。

http://www.php.net/manual/de/class.soapfault.php

于 2013-08-04T21:58:32.153 回答
0

如果出现错误,SoapClient 可以抛出异常。

如果禁用抛出异常,则仅返回那些异常对象。您必须检查返回值是否是 的实例SoapFault,但更好的方法是抛出它们,并使用 try/catch。

更是如此,因为 SoapClient 无法检测到 HTTP 错误。如果您还想捕获这些错误,则必须将错误作为异常抛出(但是,如果启用了 XDebug,它将不起作用,但这应该只在开发中使用)。

于 2013-08-04T21:59:40.297 回答