Я звоню в сторонний веб-сервис, чтобы узнать подробности пользователя по предоставленным учетным данным. Ниже мой запрос клиента мыла.
$client = new \SoapClient($url, array("exception" => 0));
$auth = '
<wsse:Security SOAP-ENV:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UsernameToken>
<wsse:Username>' . $userName . '</wsse:Username>
<wsse:Password>' . $password . '</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>';
$authvalues = new \SoapVar($auth, XSD_ANYXML);
$header1 = new \SoapHeader("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "Security", $authvalues, true);
$header2 = new \SoapHeader("http://xmlns.myweb.com/FulfillProductRequest/V1", "v1");
$header3 = new \SoapHeader("http://xmlns.myweb.com/ParameterType/V2", "v2");
$header4 = new \SoapHeader("http://xmlns.myweb.com/RequestHeader/V3", "v3");
$header = array();
$header[] = $header1;
$header[] = $header2;
$header[] = $header3;
$header[] = $header4;
$client->__setSoapHeaders($header);
$res = $client->FulfillProduct($FulfillProductRequest);
Когда я звоню в WSDL, если я получаю ответ об успешном завершении, тогда нет никаких проблем.
Но если в soapFault возникнет какая-либо ошибка, мой код покажет фатальную ошибку.
Кто-нибудь есть идеи, как обращаться с SoapFault PLZ.
Спасибо за аванс.
Вы можете попробовать обернуть $res = $client→FulfillProduct($FulfillProductRequest);
в try { } catch() {}
,
Например:
try {
$res = $client→FulfillProduct($FulfillProductRequest);
} catch(Exception $e) {
// An error has occured.
// All information about the error has been stored in variable $e
print_r($e);
}
Имейте в виду, что вы можете установить SoapClient
никогда не выбрасывать исключения с вашими настройками, так что сначала посмотрите на это.
Других решений пока нет …