如何从客户端的SOAP头读取数据


How to read data from SOAP header in client side

我有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>

并且不知道如何从头部读取数据(获取令牌值(。我正在使用PHP5中的SoapClient

来源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的soap对象的类,并执行一些缓存和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;