Crashman
Crashman

Reputation: 146

PHP SOAP, how request this

here is the think, I can request successfully the first, this gives me one ID, I must use this ID for the second request, but the second how?

 try {
    $clienteSOAP = new SoapClient ( 'someservicehere' );
    $header = array('Username' => 'user', 'Password' => 'pass', 'DeviceType'=> 3,'Platform'=>'1');
    $response = $clienteSOAP->GetSession($header);
    //echo $response->SessionID:
    //15987451
    $header2 = array('Username' => 'user', 'Password' => 'pass','SessionID' => '15987451' , 'DeviceType'=> 3,'Platform'=>'1');
    $clienteSOAP->GetBalance($header2);
    //GetBalance throws error,
 } catch ( SoapFault $e ) {
    var_dump ( $e );
 }

the xml for GetSession, this works great!!!

 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ext="someTextHere">
    <soapenv:Header/>
    <soapenv:Body>
       <ext:GetSessionRequest>
          <ext:Username></ext:Username>
          <ext:Password></ext:Password>
          <ext:DeviceType></ext:DeviceType>
          <!--Optional:-->
          <ext:Platform></ext:Platform>
       </ext:GetSessionRequest>
    </soapenv:Body>
 </soapenv:Envelope>

but for this, how?

 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ext="SomeTextHereToo">
    <soapenv:Header/>
    <soapenv:Body>
       <ext:GetBalanceRequest>
          <ext:AuthenticationData>
             <!--Optional:-->
             <ext:Username></ext:Username>
             <!--Optional:-->
             <ext:Password></ext:Password>
             <!--Optional:-->
             <ext:SessionID></ext:SessionID>
          </ext:AuthenticationData>
          <ext:DeviceType></ext:DeviceType>
          <!--Optional:-->
          <ext:Platform></ext:Platform>
       </ext:GetBalanceRequest>
    </soapenv:Body>
 </soapenv:Envelope>

Upvotes: 1

Views: 87

Answers (1)

Daniel Basedow
Daniel Basedow

Reputation: 13406

You have to wrap your authentication data in a separate array, in the second definition there is an additional element wrapping the authentication credentials ().

This should work:

try {
   $clienteSOAP = new SoapClient ('someservicehere');
   $header = array('Username' => 'user', 'Password' => 'pass', 'DeviceType'=> 3,'Platform'=>'1');
   $response = $clienteSOAP->GetSession($header);
   $header2 = array('AuthenticationData' => array(
                        'Username' => 'user',
                        'Password' => 'pass',
                        'SessionID' => '15987451'
                    ),
                    'DeviceType'=> 3,
                    'Platform'=>'1'
               );
   $clienteSOAP->GetBalance($header2);
} catch (SoapFault $e) {
   var_dump ($e);
}

Since username, password and sessionid are all optional I guess you can authenticate either with username and password OR sessionid. So you probably don't have to supply username and password in the second call.

Upvotes: 1

Related Questions