2014-12-04 17 views
1

的結構我在XML的例子:如何定義SOAP

<?xml version="1.0" encoding="windows-1250"?> 
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
    <ImportPackagesExt xmlns="PPLIEGate"> 
     <FirCode>ppltest</FirCode> 
     <Packages> 
     <Items> 
      <anyType xsi:type="Package"> 
      <PackageID>40080145103</PackageID> 
      <ZipCode>16300</ZipCode> 
      <Country>CZ</Country> 
      <ErrorCode>0</ErrorCode> 
      <ErrorMessage></ErrorMessage> 
      </anyType> 
      <anyType xsi:type="Package"> 
      <PackageID>40010529207</PackageID> 
      <ZipCode>15500</ZipCode> 
      <Country>CZ</Country> 
      <ErrorCode>0</ErrorCode> 
      <ErrorMessage></ErrorMessage> 
      </anyType> 
     </Items> 
     </Packages> 
    </ImportPackagesExt> 
    </soap:Body> 
</soap:Envelope> 

不過這我的PHP腳本返回一個錯誤。

$packs = [ 
    [ 
     'PackageID' => '40080145103', 
     'ZipCode' => '16300', 
     'Country' => 'CZ', 
     'ErrorCode' => 0, 
     'ErrorMessage' => '', 
    ], 
    [ 
     'PackageID' => '40010529207', 
     'ZipCode' => '15500', 
     'Country' => 'CZ', 
     'ErrorCode' => 0, 
     'ErrorMessage' => '', 
    ], 
]; 

$items = []; 
foreach ($packs as $pack) { 
    $items[] = new SoapVar($pack, SOAP_ENC_ARRAY, XSD_ANYTYPE, null, 'Package'); 
} 

$packages = [ 
    'FirCode' => $firCode, 
    'Packages' => [ 
     'Items' => $items, 
     'ErrorCode' => 0, 
    ], 
    'DepID' => '00', 
]; 
$response = $soap->ImportPackagesExt($packages); 

錯誤說:服務器無法處理請求。 --->無法投射'System.Xml.XmlNode []'類型的對象來鍵入'Package'。

我仍然不知道如何定義「包」的結構。

+0

不相關,但爲什麼要用肥皂?沒有人喜歡它,(幾乎)沒有人需要它,最討厭它。返回JSON的restful API更加愉快 – 2014-12-04 10:22:18

+0

我必須使用它,因爲它是運營商提供的唯一API :-( – Lawondyss 2014-12-04 10:41:35

回答

0

明白了。變量$ items也必須作爲SoapVar的一個實例傳遞。

$parameters = [ 
    'FirCode' => $firCode, 
    'Packages' => [ 
     'Items' => new SoapVar($items, SOAP_ENC_OBJECT), 
     'ErrorCode' => 0, 
     'ErrorMessage' => '', 
    ], 
    'DepID' => '00', 
];