SOAP

2014-12-04 8 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을 반환하는 편안한 API가 훨씬 더 즐겁습니다. –

+0

통신사가 제공하는 유일한 API이기 때문에 저는 이것을 사용해야합니다 .-( – Lawondyss

답변

0

알 수 있습니다. 변수 $ items는 SoapVar의 인스턴스로 전달되어야합니다.

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