У меня есть ответ SOAP, который выглядит как
<soap:Envelope> <soap:Header> <AuthorizationToken soap:mustUnderstand="1"> <Token>5c31cca8-8303-4d01-a564-a99569a0963a</Token> </AuthorizationToken> </soap:Header> <soap:Body> <AuthenticateResponse> <AuthenticateResult>http://www.avectra.com/OnDemand/2005/</AuthenticateResult> </AuthenticateResponse> </soap:Body> </soap:Envelope>
и не знаю, как читать данные из заголовка (получить значение токена). Я использую SoapClient
из PHP5.
С http://drupalcode.org/project/netforum.git/blob/refs/heads/master:/xwebSecureOD.class.inc похоже, что это должно работать:
$soapclient->__soapCall($fname, $arguments, null, $this->getAuthHeaders(), $responseHeaders); $responseHeaders['AuthorizationToken']->Token;
Эта ссылка имеет класс, который расширяет объект мыла PHP и выполняет некоторые операции кэширования и drupal, но вы должны иметь возможность удалить эти фрагменты и оставить новый класс, который прозрачно обрабатывает раздвижной маркер авторизации, используемый netFORUM.
Согласно руководству :
$soapclient->__soapCall("soapmethod", array(parameters), null, $input_headers, &$output_headers);
$ output_headers затем должны содержать заголовки из ответного сообщения.
Я получил это от JackTheKnife на http://hardforum.com/showthread.php?t=1651481
$result = $service->getLastResponse(); $xmlString = preg_replace("/(<\/?)(\w+):([^>]*>)/", "$1$2$3", $result); $xml = simplexml_load_string($xmlString); $token = $xml->soapHeader[0]->AuthorizationToken[0]->Token;