2012-11-20 11 views
13

PHP सोप क्लाइंट हेडर। मुझे बाल नोड्स में नेमस्पेस प्राप्त करने में समस्या हो रही है। है एक्सएमएल उत्पन्नसोपहेडर चाइल्ड नोड्स में PHP नेमस्पेस

$security = new stdClass; 
$security->UsernameToken->Password = 'MyPassword'; 
$security->UsernameToken->Username = 'MyUsername'; 
$header[] = new SOAPHeader('http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd', 'Security', $security); 
$client->__setSoapHeaders($header); 

यहाँ:

<ns2:Security> 
    <UsernameToken> 
    <Password>MyPassword</Password> 
    <Username>MyUsername</Username> 
    </UsernameToken> 
</ns2:Security> 

यहाँ एक्सएमएल मैं इसे उत्पन्न करना चाहते है:

<ns2:Security> 
    <ns2:UsernameToken> 
    <ns2:Password>MyPassword</ns2:Password> 
    <ns2:Username>MyUsername</ns2:Username> 
    </ns2:UsernameToken> 
</ns2:Security> 

मैं नाम स्थान प्राप्त करने की आवश्यकता यहाँ कोड मैं का उपयोग कर रहा है उपयोगकर्ता नाम टोकन, पासवर्ड और उपयोगकर्ता नाम नोड्स में संदर्भ। किसी भी तरह की सहायता की सच में प्रशंसा की जाएगी।

धन्यवाद।

उत्तर

9

यह पता लगाया। मैंने नेस्टेड साबुन और सरणी का इस्तेमाल किया।

$ns_s = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd'; 
$node1 = new SoapVar('MyUsername', XSD_STRING, null, null, 'Username', $ns_s); 
$node2 = new SoapVar('MyPassword', XSD_STRING, null, null, 'Password', $ns_s); 
$token = new SoapVar(array($node1,$node2), SOAP_ENC_OBJECT, null, null, 'UsernameToken', $ns_s); 
$security = new SoapVar(array($token), SOAP_ENC_OBJECT, null, null, 'Security', $ns_s); 
$header[] = new SOAPHeader($ns_s, 'Security', $security, false); 

कि पूरी तरह से बहुत अधिक प्रयास और विचार ले लिया ...

11

Davidright answer है। और वह यह भी सही है कि रास्ता बहुत अधिक प्रयास करता है और पर विचार करता है। यहां एक भिन्नता है जो इस विशेष wsse सुरक्षा शीर्षलेख पर काम करने वाले किसी के लिए कुरूपता को समाहित करती है।

स्वच्छ ग्राहक कोड

$client = new SoapClient('http://some-domain.com/service.wsdl'); 
$client->__setSoapHeaders(new WSSESecurityHeader('myUsername', 'myPassword')); 

और कार्यान्वयन ...

class WSSESecurityHeader extends SoapHeader { 

    public function __construct($username, $password) 
    { 
     $wsseNamespace = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd'; 
     $security = new SoapVar(
      array(new SoapVar(
       array(
        new SoapVar($username, XSD_STRING, null, null, 'Username', $wsseNamespace), 
        new SoapVar($password, XSD_STRING, null, null, 'Password', $wsseNamespace) 
       ), 
       SOAP_ENC_OBJECT, 
       null, 
       null, 
       'UsernameToken', 
       $wsseNamespace 
      )), 
      SOAP_ENC_OBJECT 
     ); 
     parent::SoapHeader($wsseNamespace, 'Security', $security, false); 
    } 

} 
+0

धन्यवाद मैं इस प्रयोग किया जाता है, लेकिन करने के लिए पासवर्ड अनुभाग बदल दिया है: नई SoapVar ($ पासवर्ड, XSD_STRING, 'टाइप', 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText', 'पासवर्ड', $ wsseNamespace)), जो आपको देता है: yourpassword Craig

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