PHP

2010-10-14 14 views
5

के साथ SOAP प्रमाणीकरण मुझे एक ऐसी वेब सेवा से कनेक्ट करने की आवश्यकता है जिसके लिए सादा पाठ उपयोगकर्ता नाम और पासवर्ड के रूप में प्रमाणीकरण प्रमाण-पत्र की आवश्यकता हो।PHP

मुझे एसओएपी की मूल समझ है और अन्य खुली वेब सेवाओं से कनेक्ट करने में कामयाब रहा है जिन्हें NuSOAP का उपयोग करके उपयोगकर्ता नाम या पासवर्ड की आवश्यकता नहीं है।

निम्नलिखित मेरे लिए भेजा गया था:

<?php 

// Set up security options 
$security_options = array("useUsernameToken" => TRUE); 
$policy = new WSPolicy(array("security" => $security_options)); 

$security_token = new WSSecurityToken(array(
    "user" => "xxx", 
    "password" => "xxx", 
    "passwordType" => "basic")); 

// Create client with options 
$client = new WSClient(array("wsdl" => "https://xxx.asmx?wsdl", 
    "action" => "http://xxx", 
    "to" => "https://xxx", 
    "useWSA" => 'submission', 
    "CACert" => "cert.pem", 
    "useSOAP" => 1.1, 
    "policy" => $policy, 
    "securityToken" => $security_token)); 

// Send request and capture response 
$proxy = $client->getProxy(); 

$input_array = array("From" => "2010-01-01 00:00:00", 
    "To" => "2010-01-31 00:00:00"); 

$resMessage = $proxy->xxx($input_array); 
?> 

कुछ शोध मैं समझता हूँ कि उपरोक्त क्रियान्वयन WSO2 का उपयोग करता है के बाद। मुझे wso2 का उपयोग किए बिना ऐसा करने में सक्षम होना चाहिए।

मैंने ऊपर के बारे में संसाधनों (Google, मंच, आदि) को देखने के लिए अपनी पूरी कोशिश की है लेकिन कुछ भी नहीं ढूंढ पाए हैं। मैंने SOAP पर कुछ ट्यूटोरियल पढ़े हैं और PHP का उपयोग करके एक एसओएपी क्लाइंट स्थापित करने में सक्षम हैं लेकिन सभी प्रमाणीकरण और "नीतियों" के आसपास मेरा सिर नहीं प्राप्त कर सकते हैं।

इस बारे में एक स्पष्टीकरण कि इसे कैसे प्राप्त किया जाए और शायद इसके बारे में और पढ़ने के लिए कुछ लिंक बहुत सराहना की जाए क्योंकि मैं अपने बालों को फाड़ रहा हूं! आदर्श रूप में मैं एसओएपी प्रमाणीकरण के लिए एक पूर्ण शुरुआत के लिए संसाधनों के कुछ लिंक चाहूंगा।

धन्यवाद। पी। उपर्युक्त में कुछ लिंक/प्रमाण-पत्र गोपनीयता के लिए xxx'd किया जा सकता था।

उत्तर

9

यदि आपके पास php (php version> = 5.0.1) में SOAP एक्सटेंशन सक्षम है, तो आप अपने अनुरोध को संसाधित करने के लिए SoapClient कक्षा का उपयोग कर सकते हैं। प्रमाणित करने के लिए, आप लक्ष्य URL वाले वर्ग के लिए उपयोगकर्ता नाम और पासवर्ड पारित कर सकते हैं:

$soapURL = "https://www.example.com/soapapi.asmx?wsdl" ; 
$soapParameters = Array('login' => "myusername", 'password' => "mypassword") ; 
$soapFunction = "someFunction" ; 
$soapFunctionParameters = Array('param1' => 42, 'param2' => "Search") ; 

$soapClient = new SoapClient($soapURL, $soapParameters); 

$soapResult = $soapClient->__soapCall($soapFunction, $soapFunctionParameters) ; 

if(is_array($soapResult) && isset($soapResult['someFunctionResult'])) { 
    // Process result. 
} else { 
    // Unexpected result 
    if(function_exists("debug_message")) { 
     debug_message("Unexpected soapResult for {$soapFunction}: ".print_r($soapResult, TRUE)) ; 
    } 
} 

आप कार्यों आप कॉल कर सकते हैं के बारे में सुनिश्चित नहीं हैं, तो आप लक्ष्य यूआरएल देख सकते हैं (उदाहरण के लिए में समाप्त होने वाले "। asmx? wsdl ") अपने ब्राउज़र में। आपको एक एक्सएमएल प्रतिक्रिया मिलनी चाहिए जो आपको उपलब्ध एसओएपी कार्यों को बताती है, और उन कार्यों के अपेक्षित पैरामीटर।

+0

मैं ऊपर की कोशिश की है और यह भी $ soapFunctionParameters में अपने मूल कोड से अतिरिक्त पैरामीटर शामिल है, लेकिन मैं अपवाद हो रही है "परम प्राप्तकर्ता के लिए कार्रवाई आवश्यक है, लेकिन संदेश में मौजूद नहीं"। आपको क्या लगता है कि WSPolicy और WSSecurity टोकन फ़ंक्शन करता है? फिर, मैं वास्तव में इस के लिए एक पूर्ण भिखारी हूँ। –

+0

FYI- $ soapFunction पैरामीटर $ soapResult = ... साबुनकॉल() गलत वर्तनी है। मैं इस जानकारी की खोज करते समय इस पर आया और परीक्षण के लिए आपके कोड का उपयोग कर रहा था। यह अपरिहार्य हो सकता है क्योंकि यह 2010 से है। – Travis

+0

@guss साबुन सर्वर तब साबुन के लिए '$ साबुन पैरामीटर' सरणी के साथ पास किए गए लॉगिन डेटा को प्रमाणित करता है? मेरे PHP साबुन सर्वर स्क्रिप्ट में, '$ _SERVER ['PHP_AUTH_USER'] 'सेट नहीं है, तो मुझे कैसे सत्यापित करना चाहिए? –

0

बाहर चेक soap_wsse library

+0

यहां तक ​​कि एक लिंक भी नहीं .... – DanMan

+0

क्षमा करें ... http://www.sis.utoronto.ca/web_services/code_samples.html – a77icu5