2010-03-26 25 views
6

Ho riscontrato un problema nel far funzionare un'intestazione soap personalizzata con PHP5. Qualcuno può guidarmi per favore.Intestazione personalizzata utilizzando le funzioni soap PHP

Quello che ho bisogno è qualcosa di simile

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

Quello che ottengo è:

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

Vorrei rimuovere i tag dello spazio dei nomi. Il codice che uso per ottenere questo è:

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

Null non sembra passare .. con 'null' ho ancora spazio nome come nel secondo esempio .. come escludere questo NS. .. grazie per il vostro aiuto in anticipo ..

$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

risposta

2

nel tuo esempio, si sta creando una sola voce SoapHeader (con spazio dei nomi, ma di nome 'null'). Il tuo risultato desiderato contiene due voci di intestazione separati (senza namespace), così si potrebbe provare:

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

Farebbe quindi passa la $headers array per la chiamata del sapone (direttamente, o in anticipo tramite __setSoapHeaders).

3

avevo bisogno di qualcosa di simile ed è stato in grado di utilizzare un XSD_ANYXML SoapVar per raggiungere questo obiettivo:

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

Ciò ha comportato:

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

Grazie !! Ho salvato la mia giornata! –

Problemi correlati