2010-03-26 4 views
6

J'ai un problème pour obtenir un en-tête de savon personnalisé pour travailler avec PHP5. Quelqu'un peut-il me guider s'il vous plaît.En-tête personnalisé utilisant des fonctions de savon PHP

Ce que je require est quelque chose comme ça

<SOAP-ENV:Header> 
    <USER>myusername</USER> 
    <PASSWORD>mypassword</PASSWORD> 
</SOAP-ENV:Header> 

Ce que je reçois est:

<SOAP-ENV:Header> 
    <ns2:null> 
    <USER>myusername</USER> 
    <PASSWORD>mypassword</PASSWORD> 
    </ns2:null> 
</SOAP-ENV:Header> 

Je voudrais supprimer les balises d'espace de noms. Le code que j'utilise pour obtenir c'est:

class Authstuff { 
    public $USER; 
    public $PASSWORD; 

    public function __construct($user, $pass) { 
    $this->USER = $user; 
    $this->PASSWORD = $pass; 
    } 
} 

$auth = new Authstuff('myusername', 'mypassword'); 
$param = array('Authstuff' => $auth); 
$authvalues = new SoapVar($auth,SOAP_ENC_OBJECT); 

$header = new SoapHeader('http://soapinterop.org/echoheader/',"null",$authvalues); 

nul ne semble pas passer .. avec « null » Je reçois toujours un espace de nom comme deuxième exemple .. comment exclure ce NS. .. merci pour votre aide à l'avance ..

$headers = array(); 
$headers[] = new SoapHeader(null, 'USER', $username); 
$headers[] = new SoapHeader(null, 'PASSWORD', $password); 

$client->__setSoapHeaders($headers); 
try { 
    $result = $client->getAvailableLicensedDNCount('ASX01'); 
    print_r($result); 

Fatal error: SoapHeader::SoapHeader(): Invalid parameters. Invalid namespace. in /usr/home/deepesh/SoapCalls/deepesh7.php on line 29

Répondre

2

dans votre exemple, vous créez une seule entrée SoapHeader (avec espace de noms, mais nommé « null »). Votre résultat souhaité contient deux entrées d'en-tête séparés (sans espace), alors vous pouvez essayer:

$headers = array(); 
$headers[] = new SoapHeader(NULL, 'USER', $auth->USER); 
$headers[] = new SoapHeader(NULL, 'PASSWORD', $auth->PASSWORD); 

Vous souhaitez ensuite passer le tableau $headers à l'appel de savon (soit directement, soit dès le départ par __setSoapHeaders).

3

je avais besoin quelque chose de similaire et a été en mesure d'utiliser un XSD_ANYXML SoapVar pour y parvenir:

$auth = "<username>$username</username>"; 
    $auth .= "<password>$password</password>"; 
    $auth_block = new SoapVar($auth, XSD_ANYXML, NULL, NULL, NULL, NULL); 

    $header = new SoapHeader('http://schemas.xmlsoap.org/soap/envelope/', 'Header', $auth_block); 
    $soap_client->__setSoapHeaders($header); 

Cela a donné lieu à:

<SOAP-ENV:Header> 
    <username>12345</username> 
    <password>12</password> 
</SOAP-ENV:Header> 
+0

Merci !! Sauvé ma journée! –

Questions connexes