SoapClient::__setSoapHeaders()
(PHP 5 >= 5.0.5, PHP 7)
Sets SOAP headers for subsequent calls
说明
public SoapClient::__setSoapHeaders([mixed $soapheaders]): bool
Defines headers to be sent along with the SOAP requests.
Note:Calling this method will replace any previous values.
参数
- $soapheaders
The headers to be set. It could be SoapHeader object or array of SoapHeader objects. If not specified or set to
NULL
, the headers will be deleted.
返回值
成功时返回TRUE
,或者在失败时返回FALSE
。
范例
Example #1 SoapClient::__setSoapHeaders() example
<?php $client = new SoapClient(null, array('location' => "http://localhost/soap.php", 'uri' => "http://test-uri/")); $header = new SoapHeader('http://soapinterop.org/echoheader/', 'echoMeStringRequest', 'hello world'); $client->__setSoapHeaders($header); $client->__soapCall("echoVoid", null); ?>
Example #2 Set Multiple Headers
<?php $client = new SoapClient(null, array('location' => "http://localhost/soap.php", 'uri' => "http://test-uri/")); $headers = array(); $headers[] = new SoapHeader('http://soapinterop.org/echoheader/', 'echoMeStringRequest', 'hello world'); $headers[] = new SoapHeader('http://soapinterop.org/echoheader/', 'echoMeStringRequest', 'hello world again'); $client->__setSoapHeaders($headers); $client->__soapCall("echoVoid", null); ?>
To create complex SOAP Headers, you can do something like this: Required SOAP Header: <soap:Header> <RequestorCredentials xmlns="http://namespace.example.com/"> <Token>string</Token> <Version>string</Version> <MerchantID>string</MerchantID> <UserCredentials> <UserID>string</UserID> <Password>string</Password> </UserCredentials> </RequestorCredentials> </soap:Header> Corresponding PHP code: <?php $ns = 'http://namespace.example.com/'; //Namespace of the WS. //Body of the Soap Header. $headerbody = array('Token' => $someToken, 'Version' => $someVersion, 'MerchantID'=>$someMerchantId, 'UserCredentials'=>array('UserID'=>$UserID, 'Password'=>$Pwd)); //Create Soap Header. $header = new SOAPHeader($ns, 'RequestorCredentials', $headerbody); //set the Headers of Soap Client. $soap_client->__setSoapHeaders($header); ?>
You cannot add an additional header. If you want two headers, and one already exists, first delete it with $client->__setSoapHeaders(NULL). Then issue $client->__setSoapHeaders($headers) where $headers is an array of soapHeader() objects.
With multiple SOAP headers, when using SoapVar for creation of SoapHeader the PHP code just terminates (command terminated). I am not sure if that is a bug. Without the SOAPVar the code worked fine for me There are different way to creart SoapHeader I was using SoapVar and the code was not working. I am still a novice with this SOAP stuff. Tried using normal strings and it worked fine. SoapHeader can take SoapVar or string as the third argument. my code: <?php // first soap header. $var = new SoapVar($header, XSD_ANYXML); $soapHeader = new SoapHeader(NAME_SPACE, "Security", $var); // second soap header. $var2 = new SoapVar($header2, XSD_ANYXML); $soapHeader2 = new SoapHeader(DIFF_NAME_SPACE, "ID", $var2); $client = new SoapClient($wsdl, array("location" => $location)); $headers = array(); $headers[] = $soapHeader; $headers[] = $soapHeader2; // Here my code was just terminating. $client->__setSoapHeaders($headers); ?>
Does anyone know how to get the response headers? The getLastResponseHeader returns a string response, not the complex object I was expecting...