PHP SOAP: как получить параметр внутри xml-заголовка и тега body

В PHP мне нужно создать запрос soap-xml вроде

   <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">

<SOAP-ENV:Header xmlns:NS1="urn:UCoSoapDispatcherBase" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<NS1:TAuthenticationHeader xsi:type="NS1:TAuthenticationHeader">
<UserName xsi:type="xsd:string">user</UserName>
<Password xsi:type="xsd:string">pass</Password>
</NS1:TAuthenticationHeader>
</SOAP-ENV:Header>
<SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<NS2:ExecuteRequest xmlns:NS2="urn:UCoSoapDispatcherCustomLink-ICustomLinkSoap">
<ARequest xsi:type="xsd:string">
<?xml version="1.0" encoding="windows-1252"?> <EoCustomLinkRequestDateTime Type="TEoCustomLinkRequestDateTime"></EoCustomLinkRequestDateTime>
</ARequest>
</NS2:ExecuteRequest>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Но проблема в том, чтобы получить параметры в заголовке (например, xmlns: NS1 …) и теле (например, xmlns: NS2 …) теги
С моим скриптом я получаю замену NS1 и NS2 в первом теге после заголовка и тела. результаты в <NS1:TAuthenticationHeader> …. а также . </NS2:ExecuteRequest>

Мой скрипт php:

<?php

$wsdl_url = 'http://xxx.xxx.xxx.xxx:yyyy/wsdl/ICustomLinkSoap';
$location = 'http://xxx.xxx.xxx.xxx:yyyy/soap/ICustomLinkSoap';
$action = 'ExecuteRequest';
$version = SOAP_1_1;
$one_way = 0;$soapClient = new SoapClient($wsdl_url, array(
'cache_wsdl'    => WSDL_CACHE_NONE,
'trace'         => true,
'encoding'  => 'ISO-8859-1',
'exceptions'    => true,

));

$auth = (object)array(
'UserName'=>'xxxx',
'Password'=>'yyyy'
);
$header = new SoapHeader($wsdl_url,'TAuthenticationHeader',$auth,false);
$soapClient->__setSoapHeaders($header);

$request1  = '
<ARequest>
&lt;?xml version="1.0" encoding="windows-1252"?&gt;

&lt;EoCustomLinkRequestDateTime Type="TEoCustomLinkRequestDateTime" xsi:noNamespaceSchemaLocation="GdxEoStructures.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt;

&lt;/EoCustomLinkRequestDateTime&gt;</ARequest>
';

$xmlVar = new SoapVar($request1, XSD_ANYXML);

$result = $soapClient->__SoapCall(
'ExecuteRequest',
array($xmlVar)
);

// show result in xml-file
$f = fopen("./soap-request2.xml", "w");
xx = serialize($soapClient->__getLastRequest());
fwrite($f, $xx);

?>

Результат:

    <?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"xmlns:ns1="urn:UCoSoapDispatcherCustomLink-ICustomLinkSoap"xmlns:ns2="http://xxx.xxx.xxx.xxx:yyy/wsdl/ICustomLinkSoap"xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">

<SOAP-ENV:Header>
<ns2:TAuthenticationHeader>
<UserName>xxxx</UserName>
<Password>yyyy</Password>
</ns2:TAuthenticationHeader>
</SOAP-ENV:Header>

<SOAP-ENV:Body>
<ns1:ExecuteRequest>
<ARequest>
&lt;?xml version="1.0" encoding="windows-1252"?&gt;
&lt;EoCustomLinkRequestDateTime Type="TEoCustomLinkRequestDateTime" xsi:noNamespaceSchemaLocation="GdxEoStructures.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt;
&lt;/EoCustomLinkRequestDateTime&gt;
</ARequest>
</ns1:ExecuteRequest>
</SOAP-ENV:Body>

</SOAP-ENV:Envelope>

Помогите пожалуйста как это сделать?

Эрик

0

Решение

Но проблема в том, чтобы получить параметр в заголовке (например, xmlns: NS1 …) и
теги body (например, xmlns: NS2 …). С моим скриптом меняются NS1 и NS2.
в первом теге после заголовка и тела. результаты в
…. а также .

Это не проблема, потому что поменял местами не только пространства имен элементов, но и его определения во главе SOAP-ENV: Envelope

Ваш первый XML

xmlns:NS1="urn:UCoSoapDispatcherBase"xmlns:NS2="urn:UCoSoapDispatcherCustomLink-ICustomLinkSoap"

Сравните с сгенерированным php

xmlns:ns1="urn:UCoSoapDispatcherCustomLink-ICustomLinkSoap"xmlns:ns2="http://xxx.xxx.xxx.xxx:yyy/wsdl/ICustomLinkSoap"
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]