如何使用PHP的SoapClient创建此xml?

时间:2013-03-15 15:19:17

标签: php soap

从调试另一个应用程序,我发现它将以下xml发送到soap服务器(此示例中的代码部分最小化,xml大约200行:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:m0="http://schemas.ccs.nl/datacatalogus/modellen/modelrelatie">
<SOAP-ENV:Header>
    <m:header xmlns:m="http://schemas.ccs.nl/soap">
        <m:account>account</m:account>
        <m:naam>naam_header</m:naam>
        <m:wachtwoord>wachtwoord</m:wachtwoord>
        <m:bedrijfsnummer>bedrijfsnummer</m:bedrijfsnummer>
        <m:tussenpersoonnummer>tussenpersoonnummer</m:tussenpersoonnummer>
    </m:header>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
    <m:RelatieMuteren xmlns:m="http://schemas.ccs.nl/services/relatieservice">
        <m:relatie pc="W">
            <m0:adres>adres</m0:adres>
        </m:relatie>
    </m:RelatieMuteren>
</SOAP-ENV:Body>

显然,<m0:adres></m0:adres>之间的部分要大得多,并且对应于存储在数组中的数据。但是,如果我尝试使用__soapCall发送请求,PHP将构建以下请求:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
                   xmlns:ns1="http://schemas.ccs.nl/datacatalogus/modellen/modelrelatie"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xmlns:ns2="http://schemas.ccs.nl/services/relatieservice" xmlns:ns3="http://schemas.ccs.nl/soap">
    <SOAP-ENV:Header>
        <ns3:header>
            <ns3:account>account</ns3:account>
            <ns3:naam>naam</ns3:naam>
            <ns3:wachtwoord>wachtwoord</ns3:wachtwoord>
            <ns3:bedrijfsnummer>bedrijfsnummer</ns3:bedrijfsnummer>
            <ns3:tussenpersoonnummer>tussenpersoonnummer</ns3:tussenpersoonnummer>
        </ns3:header>
    </SOAP-ENV:Header>
    <SOAP-ENV:Body>
        <ns2:RelatieMuteren>
            <ns2:relatie pc="I">
                <ns1:adres>Postbus 53</ns1:adres>
            </ns2:relatie>
        </ns2:RelatieMuteren>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

如您所见,第二个xml与第一个完全不同。任何人都可以解释为什么它不同以及我如何创建第一种类型的xml?

我使用以下代码来执行请求:

$client = new SoapClient( "http://www.cdsverzekeringen.nl/ws_prod/services/RelatieService.asmx?WSDL", array( 'trace' => 1 ) );
$aHeader =  array(
    'account' => "PRIVATE", 
    'naam' => "PRIVATE",
    'wachtwoord' => "PRIVATE",
    'bedrijfsnummer' => "PRIVATE",
    'tussenpersoonnummer' => "PRIVATE",
);
$client->__setSoapHeaders( new SoapHeader( "http://schemas.ccs.nl/soap", 'header', $aHeader ) );
$vtResult = $client->__soapCall( "RelatieMuteren", array( $aRelatieInfo ) );

$ aRelatieInfo数组的格式如下:

array
  'relatie' => 
    array
      'adres' => string 'Postbus 53' (length=10)

我希望有人可以帮助我。提前谢谢!

1 个答案:

答案 0 :(得分:0)

如何使用这样的SoabVar API,

$aHeader = '
<m:header xmlns:m="http://schemas.ccs.nl/soap">
    <m:account>account</m:account>
    <m:naam>naam_header</m:naam>
    <m:wachtwoord>wachtwoord</m:wachtwoord>
    <m:bedrijfsnummer>bedrijfsnummer</m:bedrijfsnummer>
    <m:tussenpersoonnummer>tussenpersoonnummer</m:tussenpersoonnummer>
</m:header>';
$soap_var_header = new SoapVar( $aHeader , XSD_ANYXML, null, null, null);

$client->__setSoapHeaders( new SoapHeader( "http://schemas.ccs.nl/soap", 'm', $soap_var_header ) );