2013-03-15 26 views
1

從調試另一應用中,我發現,它發送下面的XML SOAP服務器(在本示例代碼部分被最小化,則XML是大約200行長:如何使用PHP的SoapClient創建這個xml?

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

我希望有人能幫助我。提前致謝!

+0

嘛XML肯定會有所不同,但他們真的不是。如果您「理解」了您的頭腦中的命名空間(或在一張紙上/在文本編輯器中),您會發現兩個XML文檔的模式都是相同的。如果服務沒有給您預期的結果,請告訴我們您期待的結果以及服務當前返回的內容(如果有錯誤消息,請粘貼完整的錯誤消息) – vstm 2013-03-15 15:47:12

+0

這就是問題所在。它只是返回一個客戶端代碼應該意味着數據被處理。但是,它沒有改變,所以我想我的XML是錯誤的。 – henk 2013-03-15 15:55:41

+1

那麼我看到的唯一區別是'relatie'結構的'pc'屬性是「I」而不是「W」。如果你將'pc'設置爲'「W」'這些請求應該是相同的。你嘗試添加'$ aRelatieInfo ['relatie'] ['pc'] =「W」;'? – vstm 2013-03-15 16:05:05

回答

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));