2012-09-10 15 views
5

में पोर्ट नाम निर्दिष्ट करने के लिए कैसे मैं SOAP PHP में पोर्ट का चयन कैसे करूं? मैं ट्रैवलपोर्ट के साथ जीडीएस के रूप में एक यात्रा बुकिंग वेबसाइट विकसित कर रहा हूं। मैंने अभी अपने डब्लूएसडीएल को देखना शुरू कर दिया है और मैं उन्हें अपने सर्वर को PHP के साथ कॉल करने के लिए उपयोग करने की कोशिश कर रहा हूं। मैं इसे करने में सक्षम नहीं हूँ। मुझे पता है कि सर्वर काम करता है, क्योंकि अगर मैं अनुरोध तैयार करता हूं और इसे कर्ल के माध्यम से भेजता हूं, तो मुझे वह प्रतिक्रिया मिलती है जो मैं उम्मीद कर रहा हूं, लेकिन अपने sample code का उपयोग और अनुकूलन करके (गोपनीयता समझौते को स्वीकार करें, और फिर "नमूना कोड" पर क्लिक करें), मैं कहीं नहीं जा रहा हूँ।php WSDL

एसओएपी PHP मॉड्यूल उत्पन्न करने के अनुरोध को देखकर, मुझे लगता है कि समस्या यह है कि यह गलत फ़ंक्शन का उपयोग करता है। मुझे नहीं लगता कि मैं पूरी डबल्यूएसडीएल खुलासा कर सकते हैं, लेकिन यहाँ एक अंश है:

<!-- Service --> 

<service name="AirService"> 
    <port name="AirRepriceSearchPort" 
      binding="tns:AirRepriceSearchBinding"> 
     <soap:address 
       location="http://localhost:8080/kestrel/AirService" /> 
    </port> 

    <port name="AirScheduleSearchPort" 
      binding="tns:AirScheduleSearchBinding"> 
     <soap:address 
       location="http://localhost:8080/kestrel/AirService" /> 
    </port> 

    <port name="AirLowFareSearchPort" 
      binding="tns:AirLowFareSearchBinding"> 
     <soap:address 
       location="http://localhost:8080/kestrel/AirService" /> 
    </port> 

जाहिर स्क्रिप्ट हमेशा LowFareSearch मॉड्यूल AirReprice मॉड्यूल के बजाय के आधार पर अनुरोध उत्पन्न करता है। वास्तव में, अगर मैं डब्लूएसडीएल संपादित करता हूं और पहले तत्व के रूप में "एयरलोफायर सर्चपोर्ट" डालता हूं, तो अनुरोध काम करता है।

मैं कोशिश की है निम्नलिखित:

  • क्या कार्रवाई $client->AirLowFareSearchPort($data) का उपयोग करके लेने के लिए है, लेकिन यह एक वैध कार्य नहीं है निर्दिष्ट करें;

  • मैं $client->__getfunctions() का उपयोग करके सभी कार्यों मिला:

: "। सेवा"

[0]=> 
string(48) "AirRepriceRsp service(AirRepriceReq $parameters)" 
[1]=> 
string(56) "ScheduleSearchRsp service(ScheduleSearchReq $parameters)" 
[2]=> 
string(54) "LowFareSearchRsp service(LowFareSearchReq $parameters)" 
[3]=> 
string(66) "LowFareSearchAsynchRsp service(LowFareSearchAsynchReq $parameters)" 

यह केवल "समारोह" की तरह लग रहा है लेकिन मैं नहीं मिलता है, जहां मैं सामान को ब्रैकेट में रखेगा।

मेरे पास कोई अन्य विचार नहीं है। उम्मीद है कि आप मदद करने में सक्षम होंगे!

अद्यतन:

मैं this article जहां यह समस्या को उजागर करता है पाया है। हालांकि, यह PHP वेब सेवाओं नामक अपने मॉड्यूल को संदर्भित करता है। मुझे SOAP के साथ एक ही चीज़ करने की ज़रूरत है। मुझे वास्तव में आपकी मदद की ज़रूरत है ..

उत्तर

3

डब्ल्यूएसडीएल लोड करने के बाद आपको __setLocation के साथ मैन्युअल रूप से एंडपॉइंट सेट करने में सक्षम होना चाहिए।

उदाहरण:

$client = new SoapClient('http://localhost/supplied_path?wsdl'); 
$client->__setLocation('http://localhost:8080/kestrel/AirService'); 

print_r($client->__getfunctions());