2014-12-04 94 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', 
];