Я хочу создать заголовок WSS для аутентификации на защищенных веб-сервисах.
Я могу сделать это с помощью уродливого:
$auth = ' <wsse:Security SOAP-ENV:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> <wsu:Timestamp wsu:Id="Timestamp-28" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> <wsu:Created>' . $timestamp . '</wsu:Created> <wsu:Expires>' . $timestampExpires . '</wsu:Expires> </wsu:Timestamp> <wsse:UsernameToken wsu:Id="UsernameToken-27" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> <wsse:Username>' . $user . '</wsse:Username> <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">' . $passdigest . '</wsse:Password> <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">' . $encodedNonce . '</wsse:Nonce> <wsu:Created>' . $timestamp . '</wsu:Created> </wsse:UsernameToken> </wsse:Security>';
Теперь я пытаюсь сделать это чище, используя SimpleXML.
Но если я попытаюсь сделать простой:
$xml = new SimpleXMLElement('<wsse:Security/>', 0, false, 'wsse');
Я получил :
warning: SimpleXMLElement :: __ construct () [simplexmlelement .– construct]: ошибка пространства имен: префикс пространства имен wsse on Security не определен в
Я думаю, что я что-то пропустил, чтобы создать xmls с именами, не могли бы вы дать мне несколько советов?
Я нашел способ решить свою проблему:
$root = new SimpleXMLElement('<root/>'); $security = $root->addChild('wsse:Security', 'test', 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd'); $root->registerXPathNamespace('wsse', 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd'); $auth = $root->xpath('/root/wsse:Security'); echo htmlentities($auth[0]->asXML());
Дисплеи:
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">test</wsse:Security>
Кроме того, в моем XML есть ошибка, я поместил SOAP-ENV:mustUnderstand="1"
но я никогда не определяю пространство имен SOAP-ENV
.