2012-04-18 8 views
7

के साथ PHP में मूलभूत लेख के पीछे एक डब्लूएसडीएल से PHP कक्षाएं बनाने की आवश्यकता है।डब्ल्यूएसडीएल को मूल एथ

इसमें कई नामस्थान हैं इसलिए यह हाथ से ऐसा करने के लिए बोझिल लग रहा है।

मैंने कुछ औजारों की कोशिश की है लेकिन ऐसा लगता है कि ऑथ सत्र निश्चित नहीं है।

+0

यह लिंक देखें ..... यह लिंक आपकी मदद कर सकता है .. http://stackoverflow.com/a/38784772/5634447 –

उत्तर

1

सोप ग्राहक में बनाया का उपयोग करके आप कुछ इस तरह होना चाहिए:

$options = array(
    'login' => $username, 
    'password' => $password, 
); 
$client = new SoapClient($wsdl, $options); 
+1

यह एक उत्तर कैसे है? Https://bugs.php.net/bug.php?id=27777 HTTP प्रमाणीकरण के अनुसार WSDL फ़ाइलों के लिए इस तरह समर्थित नहीं है। – hakre

4

HTTP प्रमाणीकरण सोप क्लाइंट के साथ काम करता है, फिर भी आप पासवर्ड से सुरक्षित डबल्यूएसडीएल फ़ाइलों

उपयोग नहीं कर सकते देखें https://bugs.php.net/bug.php?id=27777

+0

एक वर्कअराउंड के लिए, देखें http://www.php.net/manual/soapclient.soapclient.php#101503 – hakre

12
$options = array(
    'login' => $username, 
    'password' => $password, 
); 
$client = new SoapClient($wsdl, $options); 

हाँ, यह काम करता है! मैंने एक ऐसे समाधान में कोशिश की जिसे मैं बना रहा था और यह मेरे ग्राहक डब्ल्यूएस से जुड़ता है जो HTTP बेसिक ऑथ के साथ है।

+1

यह एपीआई में प्रमाणीकरण के लिए काम करता है, लेकिन कुछ कारणों से डब्लूएसडीएल को पुनः प्राप्त करने के लिए प्रमाणीकरण का उपयोग नहीं करता है। –

1

मैंने lib nusoap का उपयोग करके इसे हल किया। अगर यह मदद करता है देखें

$params = array(
    "param" => "value" 
); 

$soap_client = new nusoap_client($wsdl_url, true); 
$soap_client->setCredentials(USER_SERVICE, PASS_SERVICE, 'basic'); 
$soap_client->soap_defencoding = 'UTF-8'; //Fix encode erro, if you need 
$soap_return = $soap_client->call("method_name", $params); 
0

यह soapClient

$apiauth =array('UserName'=>'abcusername','Password'=>'xyzpassword','UserCode'=>'1991'); 
$wsdl = 'http://sitename.com/service.asmx?WSDL'; 
$header = new SoapHeader('http://tempuri.org/', 'AuthHeader', $apiauth); 
$soap = new SoapClient($wsdl); 
$soap->__setSoapHeaders($header);  
$data = $soap->methodname($header);   

का उपयोग कर वेब सेवा को प्रमाणित करने के इस कोड को आंतरिक रूप से शीर्ष लेख पार्स के रूप में पालन

<soap:Header> 
    <AuthHeader xmlns="http://tempuri.org/"> 
     <UserName>abcusername</UserName> 
     <Password>xyzpassword</Password> 
     <UserCode>1991</UserCode> 
    </AuthHeader> 
</soap:Header> 
0

मैं हल करने की कोशिश कर रहा है सरल उदाहरण है यह मुद्दा, लेकिन जो मैं समझता हूं, एसएसएल + httpauth वेब सेवाओं के लिए साबुन क्लाइंट कनेक्शन अधिक दर्द हैं। मैंने गुमराह किया है और जो मैं समझता हूं, मेरी समस्या हल हो रही है, आप अपनी समस्या को हल करने के लिए नीचे दिए गए उदाहरण का भी उपयोग कर सकते हैं (यूआरएल और साबुन क्लाइंट सेटअप दोनों में एचटीपीएथ इंफोस का उपयोग करके)।

$username="test"; 
$password="test"; 
$url = "https://".urlencode($username).":".urlencode($password)."@example.com/service.asmx?WSDL"; 

$context = stream_context_create([ 
'ssl' => [ 
// set some SSL/TLS specific options 
'verify_peer' => false, 
'verify_peer_name' => false, 
'allow_self_signed' => true, 
]]); 

$client = new SoapClient($url, [ 
'location' => $url, 
'uri' => $url, 
'stream_context' => $context, 
'login' => $username, 
'password' => $password 
]); 

$params=array(
'operation'=>’arguments', 
'and’=>'other bull', 
'goes’=>'here' 
); 

$response = $client->__soapCall('OperationName', array($params)); 
0

कैसे इस समाधान के बारे में:

  1. डबल्यूएसडीएल डाउनलोड करें और एक स्थानीय फ़ाइल में बचाने
  2. (

कुछ इस तरह स्थानीय फ़ाइल के साथ SoapClient बनाएं एक सरलीकृत संस्करण में):

class MySoap { 

    private $WSDL = 'https://secure-wsdl.url?wsdl'; 

    private $USERNAME = 'dummy'; 
    private $PASSWORD = 'dummy'; 

    private $soapclient; 

    private function localWSDL() 
    { 
     $local_file_name = 'local.wsdl'; 
     $local_file_path = 'path/to/file/'.$local_file_name; 

     // Cache local file for 1 day 
     if (filemtime($local_file_path) < time() - 86400) { 

      // Modify URL to format http://[username]:[password]@[wsdl_url] 
      $WSDL_URL = preg_replace('/^https:\/\//', "https://{$this->USERNAME}:{$this->PASSWORD}@", $this->WSDL); 

      $wsdl_content = file_get_contents($WSDL_URL); 
      if ($wsdl_content === FALSE) { 

       throw new Exception("Download error"); 
      } 

      if (file_put_contents($local_file_path, $wsdl_content) === false) { 

       throw new Exception("Write error"); 
      } 
     } 

     return $local_file_path; 
    } 

    private function getSoap() 
    { 
     if (! $this->soapclient) 
     { 
      $this->soapclient = new SoapClient($this->localWSDL(), array(
       'login' => $this->USERNAME, 
       'password' => $this->PASSWORD, 
      )); 
     } 

     return $this->soapclient; 
    } 

    public function callWs() { 

     $this->getSoap()->wsMethod(); 
    } 
} 

यह मेरे लिए काम करता है :)