1

別のアプリケーションのデバッグから、次の 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>

ご覧のとおり、2 番目の xml は最初の 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)

誰かが私を助けてくれることを願っています。前もって感謝します!

4

1 に答える 1

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 ) );
于 2013-03-15T15:42:30.163 に答える