2016-11-17 73 views
2

我有一個可用的SOAP UI xml,並且我有我的SOAP請求XML,它們幾乎完全相同。 SOAP UI工作,我得到一個空響應。這裏的SOAPUI XML第一個PHP soap xml vs SoapUI xml

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:get="http://www.cornerstoneondemand.com/Webservices/GetDetailsWebService"> 
    <soapenv:Header> 
     <get:AuthHeader> 
     <get:CorpName>corp</get:CorpName> 
     <get:UserId>1234</get:UserId> 
     <get:Signature>ABC123</get:Signature> 
     </get:AuthHeader> 
    </soapenv:Header> 
    <soapenv:Body> 
     <get:GetDetails xmlns:get="http://www.cornerstoneondemand.com/Webservices/GetDetailsWebService"> 
     <get:object_id>qwerty-123</get:object_id> 
     </get:GetDetails> 
    </soapenv:Body> 
</soapenv:Envelope> 

這裏是我的PHP代碼和請求。

$client=new SoapClient($wsdl,array('trace' => 1, 'exception' => 0)); 

$auth = array(
      'CorpName' => $CorpName, 
      'UserId' => $username, 
      'Signature' => $Signature 
    ); 
$header = new SoapHeader('http://www.cornerstoneondemand.com/Webservices/GetDetailsWebService','AuthHeader',$auth,false); 
$client->__setSoapHeaders($header); 

$parm[] = new SoapVar($LOid, XSD_STRING, null, null, 'object_id'); 


var_dump($client->GetDetails(new SoapVar($parm, SOAP_ENC_OBJECT))); //output is NULL 

//和PHP請求:

的print_r($客戶端 - > __ getLastRequest()); 輸出

<?xml version="1.0" encoding="UTF-8"?> 
     <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.cornerstoneondemand.com/Webservices/GetDetailsWebService"> 
      <SOAP-ENV:Header> 
       <ns1:AuthHeader> 
       <ns1:CorpName>corp</ns1:CorpName> 
       <ns1:UserId>1234</ns1:UserId> 
       <ns1:Signature>ABC123</ns1:Signature> 
       </ns1:AuthHeader> 
      </SOAP-ENV:Header> 
      <SOAP-ENV:Body> 
       <ns1:GetDetails> 
       <object_id>qwerty-123</object_id> 
       </ns1:GetDetails> 
      </SOAP-ENV:Body> 
     </SOAP-ENV:Envelope> 

如果我接近創造一個良好的請求,或者英里遠,我不能告訴。我正在努力使SOAP請求匹配SOAPUI,因爲它起作用,而我的SOAP不起作用。

回答

2

包含幾乎相同的信息。元素節點的名稱空間前綴是可交換和可選的。因此,所有這3個變體都將在名稱空間http://schemas.xmlsoap.org/soap/envelope/中使用本地名稱Envelope解析爲元素節點。

  • <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"/>
  • <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"/>
  • <Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"/>

可以讀取元素名稱爲{http://schemas.xmlsoap.org/soap/envelope/}:Envelope

對於getns1命名空間前綴也是如此。它們都解析爲相同的實際名稱空間。

但元素object_id在XML中沒有名稱空間。 SoapVar構造函數的第六個參數是節點名稱空間,因此您可能需要嘗試:

$namespace = 'http://www.cornerstoneondemand.com/Webservices/GetDetailsWebService'; 
$parm[] = new SoapVar($LOid, XSD_STRING, null, null, 'object_id', $namespace); 
+0

說得對!我添加了命名空間並獲得了很好的結果! – Mark