PHP SOAP Sayı: Nesne başvurusu bir nesnenin örneğine ayarlanmadı

3 Cevap php

Ben php ve SoapClient sınıfını kullanarak https://ws.farebuzz.com/FlightGateway.asmx?WSDL bir arabirim oluşturmak için çalışıyorum.

Ben kimlik doğrulama başlığı üzerinde başardı ama ben bir yöntemi çağırmak çalıştığınızda ben hep alıyorum .. şaşırıp:

Yakalanmamış SoapFault istisna: [sabun: Server] Sunucu isteği işleyemedi. ---> Nesne başvurusu bir nesnenin örneğine ayarlanmadı.

Ben (bir nesne gibi) bu gibi aradım:

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);

ve benzeri bir dizi olarak:

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

ama aynı hata var. Herkes yardımcı olabilir?

Teşekkürler

Sorin

3 Cevap

Bu kullanmayı deneyin:

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

Ben bir. Net webcoder erişmeye çalışıyor sorunlarınız oldu ve bu benim için çözüldü.

WSDL bu şekilde adlandırılan gerektiğini belirtiyor:

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

searchRequest adı olduğunu unutmayın important.

Bu hizmet için çeşitli zorunlu girişler de vardır, bu mevcut olduğundan emin olmak gerekir. Sizin kod bakarak, bazı eksik.

Burada FlightSearchRequest karmaşık tür bir göz atın. minOccurs=1 gereklidir yapan her param.

<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>

Ben doğru WSDL anlamak, SearchFlights nesne FlightSearchRequest nesneyi içermesi gerekiyordu. Bu parametreleri içeren ikincisi.

Bu deneyin:

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