views:

315

answers:

2

Hi,

I am having a problem getting a custom soap header to work with PHP5. Can anybody guide me please.

What I require is something like this

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

What I get is :

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

I would like to remove the namespace tags. The code I use to get this is:

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

In your example, you are creating only one SoapHeader entry (with namespace, but named 'null'). Your desired result contains two separate header entries (without namespace), so you might try:

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

You'd then pass the $headers array to the soap call (either directly, or upfront via __setSoapHeaders).

Henrik Opel
A: 

Null doesn't seem to pass.. with 'null' I still get name space as in second example.. how to exclude this NS... thanks for your help in advance..

$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

Dee