2012-01-10 23 views
7

थोड़ी देर के लिए एक PHP डेवलपर होने के बावजूद, अब मुझे वेब सेवाओं का पहला स्वाद मिल रहा है। मैं थोड़ी मदद पाने की उम्मीद कर रहा था, क्योंकि जिस पुस्तक का मैं उपयोग कर रहा हूं वह बहुत मदद नहीं कर रहा है। जिन कंपनियों में हम व्यवसाय कर रहे हैं उनमें से एक मुझे प्रारूप में एक एक्सएमएल दस्तावेज दिया गया है जिसमें मैं होना चाहिए (मैं इसका एक हिस्सा पोस्ट करूंगा)। इस विशेष विषय में मेरे अनुभवहीनता के कारण, मुझे सच में यकीन नहीं है कि क्या करना है। मुझे यह जानने की जरूरत है कि यह संदेश अपने लाइव पोस्ट पेज पर कैसे भेजें, प्रतिक्रिया कैसे प्राप्त करें, और क्या मुझे किसी भी प्रकार का डब्लूएसडीएल पेज बनाने की ज़रूरत है? किसी भी मदद या दिशा की बहुत सराहना की जाएगी, और कृपया, केवल PHP मैनुअल के लिए एक लिंक न भेजें। मैं स्पष्ट रूप से वहां गया हूं, क्योंकि यह आम तौर पर सहायता के लिए जाने-माने स्थान है।PHP SOAP HTTP अनुरोध

POST /sample/order.asmx HTTP/1.1 
Host: orders.sample.com 
Content-Type: application/soap+xml; charset=utf-8 
Content-Length: length 

<?xml version="1.0" encoding="utf-8"?> 
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> 
    <soap12:Header> 
    <AuthenticationHeader xmlns="http://sample/"> 
     <Username>string</Username> 
     <Password>string</Password> 
    </AuthenticationHeader> 
    <DebugHeader xmlns="http://sample/"> 
     <Debug>boolean</Debug> 
     <Request>string</Request> 
    </DebugHeader> 
    </soap12:Header> 
    <soap12:Body> 
    <AddOrder xmlns="http://sample/"> 
     <order> 
     <Header> 
      <ID>string</ID> 
      <EntryDate>dateTime</EntryDate> 
      <OrderEntryView> 
      <SeqID>int</SeqID> 
      <Description>string</Description> 
      </OrderEntryView> 
      <ReferenceNumber>string</ReferenceNumber> 
      <PONumber>string</PONumber> 
      <Comments>string</Comments> 
      <IpAddress>string</IpAddress> 
     </Header> 
     </order> 
    </AddOrder> 
    </soap12:Body> 
</soap12:Envelope> 

ऊपर दिया गया AddOrder XML दस्तावेज़ मुझे दिया गया था (मैंने अधिकांश शरीर को हटा दिया)। कृपया मुझे बताएं कि अब और विस्तार की आवश्यकता है, क्योंकि मैं जितना संभव हो उतना विशिष्ट होना चाहता हूं, इसलिए मैं यह समझने में सक्षम हूं कि यह

उत्तर

7

शुरू कर दिया आप विकल्पों में से एक जोड़ी है! आप अनुरोध बनाने के लिए साबुन ऑब्जेक्ट्स का उपयोग कर सकते हैं, जो डब्लूएसडीएल के आधार पर रिमोट सर्वर से बात करने का सही तरीका जानेगा। आप देख सकते हैं कि PHP manual पर यह कैसे करें।

वैकल्पिक रूप से, आप काम करने के लिए कर्ल का उपयोग कर सकते हैं। इसके बाद आप में परिणाम होना चाहिए

$curlData = "<?xml version="1.0" encoding="utf-8"?>... etc"; 
$url='http://wherever.com/service/'; 
$curl = curl_init(); 

curl_setopt ($curl, CURLOPT_URL, $url); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($curl,CURLOPT_TIMEOUT,120); 
curl_setopt($curl,CURLOPT_ENCODING,'gzip'); 

curl_setopt($curl,CURLOPT_HTTPHEADER,array (
    'SOAPAction:""', 
    'Content-Type: text/xml; charset=utf-8', 
)); 

curl_setopt ($curl, CURLOPT_POST, 1); 
curl_setopt ($curl, CURLOPT_POSTFIELDS, $curlData); 

$result = curl_exec($curl); 
curl_close ($curl); 

: आप जहां के लिए डेटा पोस्ट करने के लिए (जो ऐसा लगता है कि ऊपर के उदाहरण में है) की तरह तो आप सिर्फ इस तरह कुछ कर सकते हैं पता करने के लिए की आवश्यकता होगी, $ परिणाम var। फिर आप इसे एक्सएमएल दस्तावेज़ में बदलने की कोशिश कर सकते हैं, हालांकि कभी-कभी मुझे एन्कोडिंग के कारण पता चला है कि यह काम नहीं करता है:

$xml = new SimpleXMLElement($result); 
print_r($xml); 
+0

मुझे यहां $ url कैसे पता चलेगा? धन्यवाद। –

1

सेवा प्रदाता के रूप में, अन्य कंपनी को आपको डब्लूएसडीएल दस्तावेज़ की आपूर्ति करनी चाहिए जो कम्प्यूटर पठनीय शर्तों में सेवा का वर्णन करता है। आम तौर पर उन्हें http://their.service.url/wsdl या इसी तरह के यूआरएल के माध्यम से प्रदान किया जाता है।

एक बार जब आप यह सुनिश्चित कर लें कि आपको सेवा के साथ बातचीत करने के लिए SoapClient उदाहरण बनाने में सक्षम होना चाहिए।

1

वैसे यह निश्चित रूप से एक एसओएपी अनुरोध है, इसलिए आपको इसके साथ सही तरीके से काम करने के लिए SOAP का उपयोग करने की आवश्यकता होगी या आप एक प्रमुख सिरदर्द के लिए हैं।

मुझे SOAP और PHP के साथ कई मुठभेड़ हुई हैं और हर बार मुझे बाहरी पुस्तकालय पर भरोसा करना पड़ता था। सबसे हालिया मुझे उपयोग करना था Zend_Soap_Client था।

लेकिन फिर, क्या आपके पास डब्ल्यूएसडीएल उपलब्ध है? क्लाइंट लाइब्रेरी का उपयोग करके SOAP webservice का उपयोग करने में सक्षम होने के लिए आपको WSDL की आवश्यकता है।

http://framework.zend.com/manual/en/zend.soap.html

और यहाँ मेरे कोड मैं का इस्तेमाल किया, मैं आशा है कि यह मिल जाएगा का एक नमूना आप

ini_set('soap.wsdl_cache_enabled', 0); 
set_include_path(dirname(__FILE__).'/../../libraries/:'.get_include_path()); 
require_once 'Zend/Loader/Autoloader.php'; 
Zend_Loader_Autoloader::getInstance(); 

//Include the classes for the webservice 
include('CatalogOrder.php'); 
include('CatalogOrderItem.php'); 
include('CatalogOrderWebservice.php'); 

//Check the mode 
if(isset($_GET['wsdl'])) { 

    $autodiscover = new Zend_Soap_AutoDiscover(array(
     'classmap' => array(
      'CatalogOrder' => "CatalogOrder", 
      'CatalogOrderItem' => "CatalogOrderItem" 
     ) 
    )); 
    $autodiscover->setComplexTypeStrategy(new Zend_Soap_Wsdl_Strategy_ArrayOfTypeComplex()); 
    $autodiscover->setClass('CatalogOrderWebService'); 
    $autodiscover->handle(); 

//Return the consume form and process the actions of the consumer 
} elseif(isset($_GET['consume'])) { 

    // pointing to the current file here 
    $soap = new Zend_Soap_Client("http://".$_SERVER['HTTP_HOST']."/admin/export/WebService.php?wsdl", array(
     'classmap' => array(
      'CatalogOrder' => "CatalogOrder", 
      'CatalogOrderItem' => "CatalogOrderItem" 
     ), 
     'encoding' => 'iso-8859-1' 
    )); 
    include('CatalogOrderWebserviceConsumer.php'); 

//Process SOAP requests 
} else { 

    // pointing to the current file here 
    $soap = new Zend_Soap_Server("http://".$_SERVER['HTTP_HOST']."/admin/export/WebService.php?wsdl", array(
     'classmap' => array(
      'CatalogOrder' => "CatalogOrder", 
      'CatalogOrderItem' => "CatalogOrderItem" 
     ), 
     'encoding' => 'iso-8859-1' 
    )); 
    $soap->setClass('CatalogOrderWebService'); 
    $soap->handle(); 

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