2009-07-06 20 views
7

में हेडर को एकत्रित/प्रसंस्करण शीर्षलेख मैं PHP5 के मूल SOAP विधियों का उपयोग कर एक वेब सेवा बना रहा हूं। जब तक मैंने एसओएपी हेडर का उपयोग करके प्रमाणीकरण को संभालने की कोशिश नहीं की तब तक सब ठीक हो गया।PHP साबुन सर्वर

मैं आसानी से कैसे सोप हेडर के नाम/पासवर्ड जोड़ने के लिए मिल सकता है, क्लाइंट साइड:

$myclient = new SoapClient($wsdl, $options); 

$login = new SOAPHeader($wsdl, 'email', 'mylogin'); 
$password = new SOAPHeader($wsdl, 'password', 'mypassword'); 
$headers = array($login, $password); 

$myclient->__setSOAPHeaders($headers); 

लेकिन मैं कहीं भी सर्वर संग्रह और इन हेडर के प्रसंस्करण के लिए तरीकों नहीं मिल सकता है -साइड। मुझे लगता है कि मेरे सोपसेवर में एक विधि को परिभाषित करने का एक आसान तरीका होना चाहिए जो हेडर को संभालता है ...

उत्तर

5

SoapClient HTTP प्रमाणीकरण को लागू करने के लिए उपयोगकर्ता नाम और पासवर्ड का उपयोग करता है। बेसिक और डाइजेस्ट प्रमाणीकरण समर्थन (see source)

सर्वर पक्ष पर PHP में HTTP प्रमाणीकरण को लागू करने के बारे में जानकारी के लिए, this manual page देखें।

यदि आप HTTP प्रमाणीकरण का उपयोग नहीं करना चाहते हैं, तो SoapServer मैन्युअल पृष्ठ पर this user-contributed sample देखें जो दिखाता है कि आप उपयोगकर्ता नाम टोकन हेडर में कुछ प्रमाण-पत्र कैसे पारित कर सकते हैं।

+0

मैं बस का उपयोग कर हेडर को पकड़ने के लिए कोशिश कर रहा हूँ एसओएपी लाइब्रेरी, इसलिए HTTP प्रमाणीकरण के बिना। और मैंने आपके द्वारा उल्लेखित उपयोगकर्ता द्वारा योगदान किए गए नमूने का प्रयास किया है, लेकिन यह केवल तब काम करता है जब मैं * डब्ल्यूएसडीएल परिभाषा का उपयोग नहीं कर रहा हूं। शायद मुझे हेडर को परिभाषित करना होगा डब्ल्यूएसडीएल, मैं खोज रखूंगा। आपके इनपुट के लिए धन्यवाद। – altermativ

+0

हां, आपको हेडर को WSDL फ़ाइल में परिभाषित करने की आवश्यकता है। – Ant

1

आप रॉ पोस्ट डेटा पढ़ने का प्रयास कर सकते हैं।

if ($_SERVER['REQUEST_METHOD'] == 'POST') 
{ 
    $xml = file_get_contents('php://input'); 
    print(htmlspecialchars($xml); 
    // XML processing 
} 

$ xml में आपके पास संपूर्ण SOAP XML अनुरोध होगा।

सोपसेवर में SOAP शीर्षलेख पढ़ने के लिए विधियां नहीं हैं।

- संपादित करें:, मैनुअल से उदाहरण योगदान काम करने के लिए प्रतीत नहीं होता हैडर प्रबंधन विधि कभी नहीं

1

आप PHP के वर्तमान संस्करण का उपयोग करने के कहा जाता हो जाता है। PHP 5.2.4 के साथ मुझे एक ही समस्या थी, लेकिन 5.2.17 या 5.3.8 के साथ SOAP हेडर हैंडलिंग के लिए कॉलबैक (php.net पर उपयोगकर्ता द्वारा योगदान किए गए नमूने में वर्णित) को कॉल किया जाता है और सब कुछ ठीक काम करता है।

5

एक आधुनिक PHP संस्करण के साथ यह डब्लूएसडीएल में कुछ भी जोड़ने के लिए आवश्यक है क्योंकि हेडर एसओएपी लिफाफा विनिर्देश का हिस्सा हैं।

उपयोगकर्ता उदाहरण पॉल डिक्सन द्वारा उद्धृत बस काम नहीं करता योगदान क्योंकि हैडर UserToken टिप्पणी में लिखा के रूप में नहीं है, शीर्षक, सुरक्षा है ताकि है नाम वर्ग विधि चाहिए है की है। फिर आपको UserToken stdClass ऑब्जेक्ट प्रॉपर्टी के साथ एक अच्छी stdClass ऑब्जेक्ट मिलता है जिसमें उपयोगकर्ता नाम और पासवर्ड गुण होते हैं।

उदाहरण कोड (एक PHP वर्ग है कि सोप सेवा को लागू करता है पर डालने की:

public function Security($header ){ 
     $this->Authenticated = true; // This should be the result of an authenticating method 
     $this->Username = $header->UsernameToken->Username; 
     $this->Password = $header->UsernameToken->Password; 
    } 

वर्क्स आधारित WSSE साबुन सुरक्षा के लिए उपयोगकर्ता नाम/पासवर्ड एक आकर्षण की तरह

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