Проблемы с отправкой SOAP-заголовка заголовков в php

Я очень новичок в SOAP (т. Е. Нет подсказки!)

Я попросил клиента взаимодействовать с существующей службой SOAP, требующей проверки подлинности через мои заголовки SOAP (простое имя пользователя и пароль)

У меня есть 3 метода в моем распоряжении,

IsAlive IsAliveSecure ChangeUserDetails

IsAlive просто возвращает true, и я не могу назвать это проблемой

IsAliveSecure возвращает true при правильной авторизации, и я не могу заставить его возвращать true.

в основном мне нужно отправить следующий запрос:

POST /ripplecomprovisioning.asmx HTTP/1.1 Host: provisioning.example.ie Content-Type: text/xml; charset=utf-8 Content-Length: length SOAPAction: "http://www.blueface.ie/provisioning/IsAliveSecure" <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Header> <SoapAuthHeader xmlns="http://www.example.ie/provisioning/"> <Username>myusername</Username> <Password>mypassword</Password> </SoapAuthHeader> </soap:Header> <soap:Body> <IsAliveSecure xmlns="http://www.example.ie/provisioning/" /> </soap:Body> </soap:Envelope> 

Мой вопрос: как отправить запрос, отформатированный так, как указано выше в php?

это то, что я пробовал, но не добился успеха:

$ soapClient = новый SoapClient ("https://provisioning.example.ie/ripplecomprovisioning.asmx?WSDL");

 // Prepare SoapHeader parameters $sh_param = array( 'Username' => 'myusername', 'Password' => 'mypassword'); $headers = new SoapHeader('ripplecomprovisioning', 'SoapAuthHeaders', $sh_param); // Prepare Soap Client $soapClient->__setSoapHeaders(array($headers)); $result = $soapClient->isAlive(); echo var_dump($result); echo "<br /><br />"; $result = $soapClient->IsAliveSecure(); echo var_dump($result); 

выход из приведенного выше выглядит следующим образом:

 object(stdClass)#3 (1) { ["IsAliveResult"]=> bool(true) } <br /><br /> Fatal error: Uncaught SoapFault exception: [soap:Server] System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.UnauthorizedAccessException: Attempted to perform an unauthorized operation. at example.VoIP.Provisioning.RipplecomProvisioningServices.IsAliveSecure() --- End of inner exception stack trace --- in /var/www/ripplecomweb/authentication/soap.php:20 Stack trace: #0 [internal function]: SoapClient->__call('IsAliveSecure', Array) #1 /var/www/ripplecomweb/authentication/soap.php(20): SoapClient->IsAliveSecure() #2 {main} thrown in /var/www/ripplecomweb/authentication/soap.php on line 20 

Любая помощь с этим была бы весьма признательна. Я не могу позволить себе провалиться!

благодаря

Кев

Ну, было бы намного проще, если бы мы увидели WSDL службы. Но попробуйте выполнить следующие действия:

1.Проверьте WSDL для метода isAliveSecure, чтобы узнать, нужно ли ему что-то передавать.

2. Посмотрите, как выглядит ваш запрос:

 var_dump($soapClient->__getLastRequest()); var_dump($soapClient->__getLastRequestHeaders()); 

(убедитесь, что вы создаете $soapClient с опцией 'trace' => TRUE для этих методов или они не будут работать -> см. руководство по PHP ).

3. Попробуйте отправить запрос в том виде, в котором вы уверены, что это должно быть правильно вручную через командную строку, например:

 curl -v -k -d @/path/to/the/file/with/the/request/xml http://service_url