Неустранимая ошибка: исключить исключение SoapFault: Ошибка аутентификации

В моем wsdl-файле у меня есть блок аутентификации пользователя:

<!-- User authentication --> <element name="UserAuthentication"> <complexType> <sequence> <element name="iId" type="xsd:int" /> <element name="sPassword" type="xsd:string" /> <element name="sType" type="api:UserType" /> </sequence> </complexType> </element> 

Я пытаюсь создать экземпляр SOAP-вызова, например:

 $client = new SoapClient("http://api.example.com/v2/example?wsdl", array( 'iId' => 123456, 'sPassword' => 'fhfhfhfhfhfhfh46464dtdts64iyiyi', 'sType' => 'ghfh57477gghdkskdk68585jghhddhdghds')); 

с реальными значениями. Сценарий сообщает:

 SoapFault exception: [ns1:Client.AUTH_1] Authentication Failed in 

Что мне не хватает?

Вы передаете свои данные запроса внутри параметров SoapClient а не как параметры для вызова мыла.

Код должен выглядеть так (предполагая, что вызов мыла – это Authenticate ):

 $client = new SoapClient("http://api.example.com/v2/example?wsdl"); $response = $client->Authenticate(Array( 'iId' => 123456, 'sPassword' => 'fhfhfhfhfhfhfh46464dtdts64iyiyi', 'sType' => 'ghfh57477gghdkskdk68585jghhddhdghds')); )); 

И, в любом случае, вы должны использовать try..catch чтобы исключить try..catch из-за вашего кода.

 try { // code here } catch(Exception $e) { // error handling goes here die("Error: ". $e->getMessage()."\n"); } 

Без полной спецификации WSDL трудно сказать, в чем проблема. Но я предполагаю, что вы смотрите на спецификации. неправильно. Вероятно, это те заголовки, которые нужно отправить, а не фактические методы, которые нужно вызвать.

Поэтому попробуйте что-то вроде этого:

 // SOAP client options $options = array( 'soap_version' => SOAP_1_2, 'trace' => true, ); // initialise the SOAP client $apiURL = 'http://api.example.com/v2/example?wsdl'; $namespace = 'http://api.example.com/v2/example?wsdl'; $client = new SoapClient($apiURL, $options); // the SOAP headers $headers = array(); $ua = array( 'iId' => 123456, 'sPassword' => 'fhfhfhfhfhfhfh46464dtdts64iyiyi', 'sType' => 'ghfh57477gghdkskdk68585jghhddhdghds', ); $headers[] = new SoapHeader($namespace, 'UserAuthentication', $ua); // we could add multiple headers if needed $client->__setSoapHeaders($headers); // call the API function $response = $client->__soapCall("whateverYourTryingToCall", null);