【问题标题】:PHP SOAP:How to get param inside xml header and body tagPHP SOAP:如何在 xml 标头和正文标记中获取参数
【发布时间】:2016-06-18 10:30:41
【问题描述】:

在 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。结果 &lt;NS1:TAuthenticationHeader&gt; .... 和 . &lt;/NS2:ExecuteRequest&gt;

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

请帮忙看看怎么做?

埃里克

【问题讨论】:

    标签: php xml soap nameservers soapheader


    【解决方案1】:

    但问题是在标头中获取参数(如 xmlns:NS1...)和 body (like xmlns:NS2...) tags 使用我的脚本,我得到 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" 
    

    【讨论】:

      猜你喜欢
      • 2019-03-28
      • 2012-02-18
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多