两个肥皂要求之间的差异

时间:2015-02-26 08:26:10

标签: php soap axis2 soap-client soapheader

我的SOAP请求

<?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>

预期的SOAP请求

<?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>

尝试使用以下代码:

$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'));

问题是:

  1. 这些SOAP请求是一样的吗?
  2. 我正在使用SOAP_1_2,它应该像Expected SOAP Request但我的请求看起来并不像预期的格式。想念哪里?

    1. 如何按预期获得输出?
    2. 注意:dgpysws.pmum.gov.tr wsdl地址是私人区域。

3 个答案:

答案 0 :(得分:2)

他们不一样。要摆脱BOGUS节点,您需要使用它:

$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));

答案 1 :(得分:1)

尝试以下

$ns = 'http//ws.apache.org/namespaces/axis2'; //Namespace of the WS.
//Body of the Soap Header.
$headerbody = array('ServiceGroupId' => $UNIQUEID_Token);
//Create Soap Header.       
$header = new SOAPHeader($ns, 'axis2', $headerbody);             
//set the Headers of Soap Client.
$soap_client->__setSoapHeaders($header); 

答案 2 :(得分:1)

<?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>
            urn:uuid:7C2F61BDE7CB9D9C6D1424938568724
        </ns2:ServiceGroupId>
    </env:Header>
    <env:Body>
        <ns1:getGunlukParametreRapor>
            <date>2015-02-22T00:00Z</date>
        </ns1:getGunlukParametreRapor>
    </env:Body>
</env:Envelope>

<?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>

是一样的。 env = soap,ns2 = ws,ns2 = axis2。您可以根据需要使用任何前缀来引用这些命名空间。分配前缀后,您只需在其他地方使用该前缀即可。只有diff是首先请求的伪标签。只需删除它。