2016-11-17 34 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