Я очень новичок в 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