2009-05-27 12 views
11

मैं php और SoapClient क्लास का उपयोग करके https://ws.farebuzz.com/FlightGateway.asmx?WSDL पर एक इंटरफ़ेस बनाने की कोशिश कर रहा हूं।PHP SOAP समस्या: ऑब्जेक्ट संदर्भ किसी ऑब्जेक्ट के उदाहरण पर सेट नहीं है

मैं प्रमाणीकरण हैडर से अधिक पाने में कामयाब रहे, लेकिन मैं अटक कर रहा हूँ जब मैं एक विधि कॉल करने के लिए प्रयास करें .. मैं हमेशा हो रही है:

Uncaught SoapFault अपवाद: [साबुन: सर्वर] सर्वर प्रक्रिया करने में असमर्थ था निवेदन। --- > ऑब्जेक्ट संदर्भ किसी ऑब्जेक्ट के उदाहरण पर सेट नहीं है।

मैं इसे (एक वस्तु के रूप में) इस तरह कॉल करने की कोशिश:

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

और के रूप में की तरह एक सरणी:

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

लेकिन मैं एक ही त्रुटि मिली। क्या कोई मदद कर सकता है?

धन्यवाद

Sorin

उत्तर

5

इस उपयोग करके देखें:

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

मैं एक .net वेब सेवा का उपयोग करने की कोशिश कर समस्या थी और यह मेरे लिए इसे हल।

0

यदि मैं सही ढंग से डब्लूएसडीएल को समझता हूं, तो SearchFlights ऑब्जेक्ट में FlightSearchRequest ऑब्जेक्ट होना चाहिए। यह बाद वाला है जिसमें पैरामीटर शामिल हैं।

इस प्रयास करें:

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

मैं भी इस सवाल का जवाब जानने के लिए उत्सुक था और अंत में मैं इस का कारण पता चल गया: नोड्स जो हम सोप अनुरोध के माध्यम से भेज रहे हैं पता होना चाहिए हमें डेटा प्रकारों के साथ और चाहे वे अनिवार्य हैं या नहीं। तो यहां अगर इनमें से किसी भी नोड्स के बाद डब्लूएसडीएल के सख्त निर्देशों का पालन नहीं किया जाना चाहिए तो हमें त्रुटि मिलेगी जो कहेंगे कि "ऑब्जेक्ट रेफरेंस किसी ऑब्जेक्ट के उदाहरण पर सेट नहीं है"। मैं आपको एक उदाहरण दूंगा जो मुझे सामना करना पड़ा: मुझे एक ही समस्या थी, और मुझे पता चला कि मैं किसी नोड को कोई मूल्य नहीं भेज रहा था, जो कम से कम एक मान या एक घटना को छोड़कर था, फिर मैं इसे अपने अंत में मान्य करता हूं, अगर सफल होता तो मैं उस मूल्य को अन्यथा खाली स्ट्रिंग भेज रहा था, जो डब्लूएसडीएल को बता रहा था कि यह कम से कम 1 घटना है और इसका मूल्य है। अंत में मैंने इस बग को हल कर लिया। आधारभूत आधार यहां है, यदि नोड्स अनिवार्य हैं और पूरी तरह से नहीं भेजे गए हैं तो इस अपवाद में वृद्धि होगी या अन्यथा उन नोड्स में खाली स्ट्रिंग भेजेंगे। धन्यवाद

+1

अनिवार्य पैरामीटर गुम इस समस्या का कारण नहीं हैं। यह एक और समस्या है जो पहली समस्या हल होने पर स्पष्ट होगी, जो गलत इनपुट संरचना है। – MrCode

6

आपका डबल्यूएसडीएल राज्यों यह है कि इस तरह से कहा जा:

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

ध्यान दें कि searchRequest नाम महत्वपूर्ण है।

उस सेवा के लिए कई अनिवार्य इनपुट भी हैं, आपको यह सुनिश्चित करना चाहिए कि वे मौजूद हैं। अपने कोड को देखने से, आप कुछ खो रहे हैं।

FlightSearchRequest जटिल प्रकार पर एक नज़र डालें। प्रत्येक पैरा जिसमें minOccurs=1 आवश्यक है।

<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> 
संबंधित मुद्दे

 संबंधित मुद्दे