The SoapHeader class

(PHP 5, PHP 7, PHP 8)

Introduction

Represents a SOAP header.

Class synopsis

class SoapHeader {
/* Properties */
public string $name;
public mixed $data = null;
/* Methods */
public __construct(
    string $namespace,
    string $name,
    mixed $data = ?,
    bool $mustunderstand = ?,
    string $actor = ?
)
}

Properties

actor

data

mustUnderstand

name

namespace

Table of Contents

add a note

User Contributed Notes 4 notes

up
3
mixmaster1413 at gmail dot com
1 year ago
Something I came across that I feel should be noted here is if you come across the error "cannot be processed at the receiver, due to an addressfilter mismatch at the endpointdispatcher. check that the sender and receiver's endpointaddresses agree." and you are absolutely sure your protocols and the service URL matches, send 'To' SoapHeader.

$soapHeaders = array(
new \SoapHeader('http://www.w3.org/2005/08/addressing', 'Action', 'your-action', true),
new \SoapHeader('http://www.w3.org/2005/08/addressing', 'To', 'your-service-endpoint-url')
);
$soapClient->__setSoapHeaders($soapHeaders);
up
14
john at jtresponse dot co dot uk
12 years ago
None of the examples really do it for me.
Note: you should NOT need to hard-code any XML.

Here is an example of creating a nested header and including a parameter.

$client = new SoapClient(WSDL,array());

$auth = array(
'UserName'=>'USERNAME',
'Password'=>'PASSWORD',
'SystemId'=> array('_'=>'DATA','Param'=>'PARAM'),
);
$header = new SoapHeader('NAMESPACE','Auth',$auth,false);
$client->__setSoapHeaders($header);

Gives the following header XML:

<SOAP-ENV:Header>
<ns1:Auth>
<ns1:SystemId Param="PARAM">DATA</ns1:SystemId>
<ns1:UserName>USERNAME</ns1:UserName>
<ns1:Password>PASSWORD</ns1:Password>
</ns1:Auth>
</SOAP-ENV:Header>
up
1
ericvaneldik at gmail dot com
5 years ago
If you want to create an soap header wihtout namespace and without an item key value setup, you can use SoapVar

To get this:
<SOAP-ENV:Header>
<IdentityHeader>
<SessionID>123456789</SessionID>
</IdentityHeader>
</SOAP-ENV:Header>

you can use this php code:
<?php
$headerVar
= new SoapVar('<IdentityHeader><SessionID>123456789</SessionID></IdentityHeader>',
XSD_ANYXML);
$header = new SoapHeader('http://tempuri.org/','RequestParams',
$headerVar);
?>
up
1
abdul dot rashid at paytabs dot co
8 years ago
Just to add some note regarding his john at jtresponse dot co dot uk

In PHP you can try following code to avoid the <item><key/>

$Auth = new stdClass();
$Auth->SystemId = "DATA";
$Auth->UserName = "USERNAME";
$Auth->Password = "PASSWORD";

$header = new SoapHeader('NAMESPACE','Auth',$Auth,false);
$soapClient->__setSoapHeaders($header);

<SOAP-ENV:Header>
<ns1:Auth>
<ns1:SystemId>DATA</ns1:SystemId>
<ns1:UserName>USERNAME</ns1:UserName>
<ns1:Password>PASSWORD</ns1:Password>
</ns1:Auth>
</SOAP-ENV:Header>
To Top