2012-06-01 16 views
10

मैं अपने सोप अनुरोध में इस नोड की आवश्यकता है (1.1 का प्रयोग करके):सोपवार नामस्थान को कैसे परिभाषित किया जाए?

<CredentialsHeader xmlns="http://www.url.com/Services/P24ListingService11" 
    <EMail>[email protected]</EMail> 
    <Password>password</Password> 
</CredentialsHeader> 

तो मैं निम्नलिखित PHP:

$client = new SoapClient("https://exdev.www.example.com/Services/example.asmx?WSDL", 
    array(
     "trace"  => 1, 
     "exceptions" => 0, 
     "cache_wsdl" => 0, 
     'soap_version' => SOAP_1_1 
     ) 
); 

$CredentialObject = new SoapVar(array('EMail' => '[email protected]', 'Password' => 'password'), SOAP_ENC_OBJECT); 

कौन उत्पन्न करता है:

<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.example.com/Services/Example"> 
    <SOAP-ENV:Header> 
     <ns1:CredentialsHeader> 
      <EMail>[email protected]</EMail> 
      <Password>password</Password> 
     </ns1:CredentialsHeader> 
    </SOAP-ENV:Header> 
    <SOAP-ENV:Body> 
     <ns1:EchoAuthenticated/> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

सभी मैं ऐसा करने की आवश्यकता है ns1 का उपयोग करके इसे रोकें और वास्तव में xmlns को नोड में परिभाषित करें:

<CredentialsHeader xmlns="http://www.example.com/Services/Example"> 
     <EMail>[email protected]</EMail> 
     <Password>password</Password> 
    </CredentialsHeader> 

मैंने फ़ायरफ़ॉक्स पोस्टर में परीक्षण किया है और एक तथ्य के बारे में पता है कि परिवर्तन समस्या को हल करता है।

उत्तर

10
$CredentialObjectXML = '<CredentialsHeader xmlns="http://www.example.com/Services/Example"> 
     <EMail>'.$UserName.'</EMail> 
     <Password>'.$Password.'</Password> 
    </CredentialsHeader>'; 


$CredentialObject = new SoapVar($CredentialObjectXML,XSD_ANYXML); 

इस तरह आप सीधे एक्सएसडी_एएनवाईएक्सएमएल के साथ एक्सएमएल का उपयोग कर सकते हैं।

आशा है कि यह आपकी समस्या का समाधान करेगा।

+0

सबसे सुंदर नहीं है, लेकिन यह काम किया! धन्यवाद – rickyduck

3

http://www.php.net/manual/tr/soapvar.soapvar.php

पैरामीटर "node_namespace के लिए" मैं लगता है कि आप क्या देख ली जाती है।

+5

आपको एक उदाहरण लिख सकते हैं? मैं उम्र के लिए कोशिश कर रहा हूं कि वह पैरामीटर मेरे उदाहरण पर काम कर रहा है लेकिन नहीं कर सकता! – rickyduck

0

मैं एक ही समस्या थी और पता चला कि अगर आप अपने डबल्यूएसडीएल से क्रेडेंशियल जटिल प्रकार के लिए एक डमी वर्ग के नक्शे, पीएचपी होगा उत्पादन कुछ की तरह:

<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.example.com/Services/Example"> 
    <SOAP-ENV:Header> 
     <ns1:CredentialsHeader> 
      <ns1:EMail>[email protected]</ns1:EMail> 
      <ns1:Password>password</ns1:Password> 
     </ns1:CredentialsHeader> 
    </SOAP-ENV:Header> 
    <SOAP-ENV:Body> 
     <ns1:EchoAuthenticated/> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

यह नहीं वास्तव में क्या अनुरोध किया गया था लेकिन हालांकि है अधिक verbose, यह बराबर है।

कोड इस प्रकार है:

$client = new SoapClient("https://exdev.www.example.com/Services/example.asmx?WSDL", 
    array(
     "trace"   => 1, 
     "exceptions" => 0, 
     "cache_wsdl" => 0, 
     "soap_version" => SOAP_1_1, 
     "classmap"  => array(
      'credential_complex_type' => 'CredentialObject', 
     ), 
    ) 
); 

class CredentialObject {} 

$credentialObject = new CredentialObject(); 
$credentialObject->Email = '[email protected]'; 
$credentialObject->Password = 'password'; 
संबंधित मुद्दे