2012-11-20 21 views
13

PHP SoapClient Üstbilgileri. Çocuk düğümlerinde ad alanlarına ulaşmada sorun yaşıyorum. Ben ad almak gerekirPHP SoapHeader Çocuk Düğümlerindeki Ad Alanları

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

: Burada

$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); 

oluşturduğu XML oluyor:

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

İşte bunun oluşturmak istediğiniz XML var İşte kullanıyorum kodu UsernameToken, Parola ve Kullanıcı adı düğümlerine başvuru. Herhangi bir yardım gerçekten takdir edilecektir.

Teşekkürler.

cevap

9

Şekil verilmiş. Yuvalanmış SoapVars ve diziler kullandım. tamamen çok fazla çaba ve düşünce aldı

$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 sahiptir. Ve aynı zamanda çok fazla çaba sarf etmesi ve'u düşündüğü doğrudur. İşte bu özel wsse güvenlik başlığını çalıştıran herkes için çirkinliği kapsülleyen bir varyasyon.

Temiz istemci kodu

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

Ve uygulama

... bunu kullandım ama şifre bölümünü değiştirdi

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

Teşekkür: yeni SoapVar ($ parola, XSD_STRING, 'type', 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText', 'Şifre', $ wsseNamespace)), Hangi size verir: şifreniz Craig

İlgili konular