簡體   English   中英

PHP SOAP:如何在xml標頭和主體標簽內獲取參數

[英]PHP SOAP:How to get param inside xml header and body tag

在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>

請幫忙怎么做?

埃里克

但是問題是要在標頭(如xmlns:NS1 ...)和正文(如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" 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM