2009-05-27 16 views
11

Próbuję zbudować interfejs do https://ws.farebuzz.com/FlightGateway.asmx?WSDL przy użyciu klasy php i SoapClient.Problem SOAP PHP: Odwołanie do obiektu nie jest ustawione na wystąpienie obiektu

udało mi się dostać na nagłówku uwierzytelniania ale utknąłem przy próbie wywołania metody .. Ja zawsze się:

Uncaught SoapFault wyjątek: [soap: Server] Serwer nie może przetworzyć żądanie. --- > Odwołanie do obiektu nie jest ustawione na instancję obiektu.

Próbowałem nazywając go tak (jako obiekt):

class SearchFlights{ 
    public $NumberOfAdults; 
     public $ClassOfService; 
    public $TypeOfTrip; 
    public $FromCity; 
    public $ToCity; 
} 

$parameters = new SearchFlights(); 
$parameters->NumberOfAdults = 2; 
$parameters->ClassOfService = 'ECONOMY'; 
$parameters->FromCity = 'ECONOMY'; 
$parameters->ToCity = '1te'; 
$parameters->TypeOfTrip = 'NONE'; 
$this->client->SearchFlights($parameters); 

i jako tablica jak:

$parameters = array('ToCity' => 'testttt',...); 

ale mam ten sam błąd. Czy ktoś może pomóc?

Dzięki

Sorin

Odpowiedz

5

Spróbuj użyć tego:

$this->client->SearchFlights(array('parameters' => $parameters)); 

miałem problemy próbuje uzyskać dostęp do usługa .NET i to rozwiązało to dla mnie.

0

Jeśli poprawnie zrozumiem WSDL, obiekt SearchFlights powinien zawierać obiekt FlightSearchRequest. To ta ostatnia zawiera parametry.

Spróbuj tego:

$parameters->FlightSearchRequest->NumberOfAdults = 2; 
$parameters->FlightSearchRequest->ClassOfService = 'ECONOMY'; 
// etc... 
$this->client->SearchFlights($parameters); 
0

Byłem też ciekaw poznać odpowiedź na to pytanie i wreszcie poznałam przyczynę tego: Węzły, które wysyłamy za pośrednictwem żądanie SOAP powinny być znane nas z typami danych i czy są one obowiązkowe, czy nie. Tak więc, jeśli którykolwiek z tych węzłów, po których następują ścisłe instrukcje tego WSDL, nie powinien być przestrzegany, otrzymamy błąd, który powie, że "Odwołanie do obiektu nie jest ustawione na instancję obiektu". Dam ci przykład, z którym miałem do czynienia: Miałem ten sam problem, i dowiedziałem się, że nie wysłałem żadnej wartości do węzła, który był wyjątkiem co najmniej jednej wartości lub jednego wystąpienia, a następnie Sprawdzam to na moim końcu, jeśli udało mi się wysłać tę wartość w przeciwnym razie pusty ciąg, który mówi WSDL, że jest to co najmniej 1 wystąpienie i ma wartość. W końcu rozwiązałem ten błąd. Podstawową linią jest to, że węzły, które są obowiązkowe i nie zostały wysłane idealnie, zostaną podniesione do tego wyjątku lub wyślą pusty ciąg do tych węzłów. Dzięki

+1

Brak wymaganych parametrów obowiązkowych nie jest przyczyną tego problemu. Jest to kolejny problem, który będzie widoczny, gdy pierwszy problem zostanie rozwiązany, co jest niewłaściwą strukturą wejściową. – MrCode

6

Twoje stany WSDL, że musi być wywołana w ten sposób:

$this->client->SearchFlights(array('searchRequest' => $parameters)); 

Zauważ, że nazwa searchRequest jest ważne.

Istnieją również różne obowiązkowe dane wejściowe dla tej usługi, należy upewnić się, że są one obecne. Patrząc na twój kod, brakuje niektórych.

Proszę spojrzeć na typ kompleksu FlightSearchRequest tutaj. Każdy parametr, który ma minOccurs=1 jest wymagany.

<s:complexType name="FlightSearchRequest"> 
    <s:sequence> 
     <s:element minOccurs="1" maxOccurs="1" name="TypeOfTrip" type="tns:TripType"/> 
     <s:element minOccurs="0" maxOccurs="1" name="FromCity" type="s:string"/> 
     <s:element minOccurs="0" maxOccurs="1" name="ToCity" type="s:string"/> 
     <s:element minOccurs="0" maxOccurs="1" name="ReturnFromCity" type="s:string"/> 
     <s:element minOccurs="0" maxOccurs="1" name="ReturnToCity" type="s:string"/> 
     <s:element minOccurs="1" maxOccurs="1" name="DepartureDate" type="s:dateTime"/> 
     <s:element minOccurs="1" maxOccurs="1" name="ReturnDate" type="s:dateTime"/> 
     <s:element minOccurs="1" maxOccurs="1" name="NumberOfAdults" type="s:int"/> 
     <s:element minOccurs="1" maxOccurs="1" name="NumberOfChildren" type="s:int"/> 
     <s:element minOccurs="1" maxOccurs="1" name="NumberOfInfantsInLap" type="s:int"/> 
     <s:element minOccurs="1" maxOccurs="1" name="NumberOfInfantsOnSeat" type="s:int"/> 
     <s:element minOccurs="1" maxOccurs="1" name="NumberOfSeniors" type="s:int"/> 
     <s:element minOccurs="0" maxOccurs="1" name="AirlinePreference" type="s:string"/> 
     <s:element minOccurs="1" maxOccurs="1" name="ClassOfService" type="tns:FlightClass"/> 
     <s:element minOccurs="1" maxOccurs="1" name="IsNonStop" type="s:boolean"/> 
     <s:element minOccurs="1" maxOccurs="1" name="ConsolidatorFaresOnly" type="s:boolean"/> 
     <s:element minOccurs="0" maxOccurs="1" name="FpAffiliate" type="s:string"/> 
     <s:element minOccurs="0" maxOccurs="1" name="FpSubAffiliate" type="s:string"/> 
    </s:sequence> 
</s:complexType> 
Powiązane problemy