Search code examples
phpsoapapache-axissoap-clientsoapheader

Difference between two soap requests


My SOAP Request

<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://ws.dgpys.deloitte.com" xmlns:ns2="ws.apache.org/namespaces/axis2">
    <env:Header>
        <ns2:ServiceGroupId>
            <BOGUS>urn:uuid:7C2F61BDE7CB9D9C6D1424938568724</BOGUS>
        </ns2:ServiceGroupId>
    </env:Header>
    <env:Body>
        <ns1:getGunlukParametreRapor>
            <date>2015-02-22T00:00Z</date>
        </ns1:getGunlukParametreRapor>
    </env:Body>
</env:Envelope>

Expected SOAP Request

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:ws="http://ws.dgpys.deloitte.com">
   <soap:Header>
       <axis2:ServiceGroupId xmlns:axis2="http://ws.apache.org/namespaces/axis2">urn:uuid:479731898147E116AD1424691518968</axis2:ServiceGroupId>
   </soap:Header>
   <soap:Body>
      <ws:getGunlukParametreRapor>
         <date>2015-02-22T00:00Z</date>
      </ws:getGunlukParametreRapor>
   </soap:Body>
</soap:Envelope>

Tried with following codes:

$options = array(
        'trace'       => 1,
        'exceptions'  => 1,
        'soap_version' => SOAP_1_2
    );
$client = new SoapClient("http://dgpysws.pmum.gov.tr/dgpys/services/EVDServis.wsdl", $options);

$p1 = new stdCLass();
$p1->loginMessage = new stdCLass();
$p1->loginMessage->UserName = new stdCLass();
$p1->loginMessage->UserName->v = "Username";
$p1->loginMessage->Password = new stdCLass();
$p1->loginMessage->Password->v = "Passwor";
$client->login($p1);

$headers[] = new SoapHeader('http//ws.apache.org/namespaces/axis2', 'ServiceGroupId', "UNIQUEID", false);
$client->__setSoapHeaders($headers);    
$result = $client->getGunlukParametreRapor(array('date' => '2015-02-22T00:00Z'));

Question is:

  1. These SOAP requests are same?

I'm using SOAP_1_2 and it should be like Expected SOAP Request but my request doesnt looks like to expected format. Missing where?

  1. How can i get the output like as expected?

Note: dgpysws.pmum.gov.tr wsdl address is private area.


Solution

  • They are not the same. To get rid of the BOGUS node you need to use this:

    $strHeaderComponent_Session = "<SessionHeader><ServiceGroupId>$theVarWithTheIDGoesHere</ServiceGroupId></SessionHeader>";
    $objVar_Session_Inside = new SoapVar($strHeaderComponent_Session, XSD_ANYXML,
                                         null, null, null);
    $objHeader_Session_Outside = new SoapHeader('http//ws.apache.org/namespaces/axis2', 
                                               'SessionHeader', $objVar_Session_Inside);
    
    // More than one header can be provided in this array.
    $client->__setSoapHeaders(array($objHeader_Session_Outside));