The result of setting the header as suggested gives the following, where
the header contains the username and password, but not the body - so the
same problem persists. In addition, the fourth argument to SOAP_Header
produced error "Did not understand "MustUnderstand" header(s)" when set
to 1 - so it was changed to 0.
SOAP Request:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:ns4="urn:partner.soap.sforce.com"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Header>
<ns4:SessionHeader SOAP-ENV:actor="http://schemas.xmlsoap.org/soap/actor/next" SOAP-ENV:mustUnderstand="0">
<sessionId xsi:nil="true"/></ns4:SessionHeader>
<ns4:CallOptions SOAP-ENV:actor="http://schemas.xmlsoap.org/soap/actor/next" SOAP-ENV:mustUnderstand="0">
<client xsi:type="xsd:string">phpClient/1.0</client></ns4:CallOptions>
<ns4:login SOAP-ENV:actor="http://schemas.xmlsoap.org/soap/actor/next" SOAP-ENV:mustUnderstand="1">
<username xsi:type="xsd:string">my supplied username</username>
<password xsi:type="xsd:string">my supplied password</password></ns4:login>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<ns4:login xsi:nil="true"/>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
The login function used is as follows:
function &login($username, $password) {
$login =& new
SOAP_Value('{urn:partner.soap.sforce.com}login',false,$v=array("username"=>$username,
"password"=>$password));
$header =& new SOAP_Header(
'{urn:partner.soap.sforce.com}login',
'Struct',
array("username"=>$username, "password"=>$password),
0);
$this->addHeader($header);
$request = array('login'=>$login);
return $this->call('login', $request,
array('namespace'=>'urn:partner.soap.sforce.com',
'soapaction'=>'',
'style'=>'document',
'use'=>'literal' ));
}
Why are the username and password not being inserted into the body?
Colin Goldberg
** <http://www.plezecall.com/ease-savings/pc.pl?pc=zp7C>
Michael Rasmussen wrote:
On Tue, 25 Oct 2005 18:20:00 -0400, Colin Goldberg wrote:
WebService_SforceService_Soap.php, whose login function was as follows:
function &login($username, $password) {
$login =& new
SOAP_Value('{urn:partner.soap.sforce.com}login',false,$v=array("username"=>$username,
"password"=>$password));
return $this->call("login",
$v = array('login'=>$login),
array('namespace'=>'urn:partner.soap.sforce.com',
'soapaction'=>'',
'style'=>'document',
'use'=>'literal' ));
}
}
This is wrong because authentication must be part of the header in every
succeeding request from the client. To do that you add a new SOAP_Header
to your client in which case your client will transmit this header as part
of every request to the server.
and then:
$request = array(....); (??)
$response =& $client->call('login', $request, $namespace);
This was just to show you that requests for the various services provided
by the server must be done after adding the header to the client
--
PHP Soap Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php