2013-02-19 5 views
0

Я пытаюсь вызвать веб-сервис через SOAP. Я чувствую, что запрос PHP выглядит правильно. Ниже приведен код PHP SOAP и XML. Пожалуйста, дайте мне знать, что может быть неправильным. Я технически продолжаю получать ответ от объекта, не имеет свойства.SOAP PHP issue «Кодирование: объект не имеет свойства« schema »

Это сообщение об ошибке:

Fatal error: Uncaught SoapFault exception: [Client] SOAP-ERROR: Encoding: object has no 'schema' property

$client = new SoapClient(
    'Link.asmx?wsdl', 
    array(
     'soap_version' => SOAP_1_1, 
     'trace'  => 1, 
    ) 
); 

$result = $client->OTA_VehAvailRate(
    array(
     'OTA_VehAvailRateRQ' => array(
      'VehAvailRQCore' => array(
       'VehRentalCore' => array(
        'type'   => 'VehicleRentalCoreType', 
        'PickUpLocation' => array(
         'LocationCode' => 'ERLAX01', 
        ), 
        'PickUpDateTime' => '2013-03-14T12:00:00', 
        'ReturnDateTime' => '2013-03-16T12:00:00', 
        'ReturnLocation' => array(
         'LocationCode' => 'ERLAX01', 
        ), 
       ), 
       'VendorPrefs' => array(
        'VendorPref' => array(
         'Code'  => '*****', 
         'CodeContext' => '******', 
        ), 
       ), 
       'VehPrefs'  => array(
        'VehPref' => array(
         'Code' => 'HFG', 
        ), 
       ), 

       'RateQualifier' => array(
        'PromotionCode' => '', 
        'RateQualifier' => '', 
       ), 
      ), 
     ) 
    ) 
); 

print_r($result); 

Вот XML Schema.

<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
    <SOAP-ENV:Body> 
     <tns:OTA_VehAvailRate xmlns:tns="http://www.opentravel.org/OTA/2003/05" xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:tnsC="http://www.w3.org/1999/xhtml" xmlns:vs="http://schemas.microsoft.com/Visual-Studio-Intellisense" xmlns:tnsB="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
      <AA:OTA_VehAvailRateRQ xmlns:AA="http://www.opentravel.org/OTA/2003/05" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" Version="0"> 
       <AA:VehAvailRQCore> 
        <AA:VehRentalCore xs:type="AA:VehicleRentalCoreType" PickUpDateTime="2013-03-14T12:00:00" ReturnDateTime="2013-03-16T12:00:00"> 
         <AA:PickUpLocation LocationCode="ERLAX01" /> 
         <AA:ReturnLocation LocationCode="ERLAX01" /> 
        </AA:VehRentalCore> 
        <AA:VendorPrefs> 
         <AA:VendorPref Code="****" CodeContext="******" /> 
        </AA:VendorPrefs> 
        <AA:VehPrefs> 
         <AA:VehPref Code="HEG" /> 
        </AA:VehPrefs> 
        <AA:RateQualifier PromotionCode="" RateQualifier="" /> 
       </AA:VehAvailRQCore> 
      </AA:OTA_VehAvailRateRQ> 
     </tns:OTA_VehAvailRate> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

Пожалуйста, дайте мне знать, что я делаю неправильно. спасибо

POST /OTA2011A/OTASrvc.asmx HTTP/1.1 
Content-Type: text/xml; charset=utf-8 
Content-Length: length 
SOAPAction: "http://www.opentravel.org/OTA/2003/05/OTA_VehAvailRate" 

<?xml version="1.0" encoding="utf-8"?> 
<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> 
    <OTA_VehAvailRate xmlns="http://www.opentravel.org/OTA/2003/05"> 
     <OTA_VehAvailRateRQ> 
     <xsd:schema>schema</xsd:schema>xml</OTA_VehAvailRateRQ> 
    </OTA_VehAvailRate> 
    </soap:Body> 
</soap:Envelope> 
+0

Возможно, вам не хватает чего-то из спецификации, возможно, вам нужно передать свойство схемы или что-то подобное. – silkfire

+0

также разделяют схему. – SparKot

+0

Эта ошибка часто вызвана передачей элементов в неправильном порядке. – EmmyS

ответ

0

Если вы работаете на OTA, я действительно предлагаю вам попробовать https://github.com/goetas-webservices/soap-client

Полно PHP SOAP-клиент, который не опирается на ext-soap из PHP. Он уже поддерживает PSR7, мультиклиент и позволяет создавать классы для ввода типов через вашу среду IDE.

https://github.com/goetas-webservices/soap-client-demo - это демонстрационный проект, который позволяет вам увидеть, как использовать клиента для использования универсального веб-сервиса SOAP.

Проект основан на https://github.com/goetas-webservices/xsd2php, который внутренне использует OTA в качестве тестового набора (и набор тестов проходит).