2016-11-06 101 views
1

我有SoapUI與這個xml一起工作,但我需要使用php 5.3在我的服務器上使用這些數據。我想我需要將我的$字符串轉換爲數組。 $ xml =(array)simplexml_load_string($ string);不會拋出任何錯誤,但來自該調用的響應是NULL。如何在php中使用SoapUI的xml

$string = ' 
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tran="http://www.cornerstoneondemand.com/Webservices/TranscriptAndTask"> 
    <soapenv:Header> 
     <wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
      <wsse:UsernameToken wsu:Id="UsernameToken-115E54B97689076253912"> 
       <wsse:Username>me</wsse:Username> 
       <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">word</wsse:Password> 
       <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">dvhXLFiL4Aoi2KQ==</wsse:Nonce> 
       <wsu:Created>2016-10-19T15:26:02.539Z</wsu:Created> 
      </wsse:UsernameToken> 
     </wsse:Security> 
    </soapenv:Header> 
    <soapenv:Body> 
     <tran:GetTranscriptAndTasks> 
     <tran:request> 
      <Request corpName="learning"> 
       <User id="me"> 
        <RequestTypes> 
         <Inbox/> 
         <Transcript inprogressOnly="false" pageNumber="1"/> 
         <Session pageNumber="1" upcomingOnly="true"/> 
         <Assigned assignedOnly="true"/> 
         <Approval approvalDateRequested="1967-08-13"/> 
         <Task pendingTasksOnly="true"/> 
         <SuggestedTraining pageNumber="1"/> 
        </RequestTypes> 
       </User> 
      </Request> 
     </tran:request> 
     </tran:GetTranscriptAndTasks> 
    </soapenv:Body> 
</soapenv:Envelope> 
'; 


$xml = (array)simplexml_load_string($string); 

$soapClient = new SoapClient($wsdl, array('trace' => 1)); 

$response = $soapClient->GetTranscriptAndTasks($xml); 
var_dump($response); 

任何幫助,非常感謝!

編輯:我發現https://github.com/sapankumarmohanty/lamp/blob/master/Crate-XML-2-Array,將xml變成一個很好的數組。但是我的結果仍然是NULL ... 如果有幫助,我在此複製了WSDL http://www.markforsyth.com/TranscriptAndTaskService.wsdl

回答

1

您實際上可以直接從SoapUI使用xml代碼。

下面是我的一些代碼代碼片段:

構造我的課,那servs作爲Web服務的接口。 WSDL是在類定義爲一個常數:

public function __construct($username, $password) { 
    $this->client = new SoapClient(self::wsdl); 
    $this->client->__setSoapHeaders(self::securityHeader($username, $password)); 
} 

功能在我的類返回在構造中使用的安全標頭:

private static function securityHeader($username, $password) { 
    $nsWSSE = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"; 
    $nsWSU = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"; 
    $nonce = 'xxxxx'; 

    $xml = '<nsWSSE:Security xmlns:nsWSSE="' . $nsWSSE . '" xmlns:nsWSU="' . $nsWSU . '">' 
     . '<nsWSSE:UsernameToken>' 
     . '<nsWSSE:Username>' . $username . '</nsWSSE:Username>' 
     . '<nsWSSE:Password>' . $password . '</nsWSSE:Password>' 
     . '<nsWSSE:Nonce>' . $nonce . '</nsWSSE:Nonce>' 
     . '<nsWSU:Created>' . gmdate('Y-m-d\TH:i:s\Z') . '</nsWSU:Created>' 
     . '</nsWSSE:UsernameToken>' 
     . '</nsWSSE:Security>'; 

    $securityToken = new SoapVar($xml, XSD_ANYXML); 

    return new SoapHeader($nsWSSE, 'Security', $securityToken); 
} 

在我的類A的功能,使向WS功能「abc」發出請求:

public function abc() { 
    $xml = ... paste your xml code from SoapUI here ... 
    $param = new SoapVar($xml, XSD_ANYXML); 
    return $this->client->abc($param); 
} 
+0

這使我比以前更加接近!現在,而不是NULL我回來<結果xmlns =「」errCode =「 - 1」errDescr =「請求xml是空的」。如果我在GetTranscriptAndTasks()中輸入SoapUI xml,或者什麼都沒有,我會得到相同的錯誤。 – Mark

+0

現在我只是猜測: 您的xml代碼複製應該從''開始。但是從這一點開始,你會誤解「tran」命名空間的定義,因爲它是在xml代碼的開始處定義的。解決方案:向''項目添加'xmlns:tran =「http://www.cornerstonechina.com/Webservices/TranscriptAndTask」'項目 –

+0

優秀的'猜'你是對的! :) – Mark

相關問題