2016-11-06 2 views
1

SoapUI에서이 XML을 사용하고 있지만 PHP 5.3을 사용하는 서버에서 해당 데이터를 사용해야합니다. 내 $ 문자열을 배열로 변환해야한다고 생각합니다. $ xml = (배열) simplexml_load_string ($ string); 오류는 발생하지 않지만 호출의 응답은 NULL입니다.SoapUI의 xml을 PHP로 사용하는 방법

$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 :

여기 내 코드에서 일부 코드 조각입니다. 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); 
} 

내 클래스의 함수, 즉 만든다 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 대신에 Mark

+0

이제 추측하고 있습니다 : xml 코드의 사본은''에서 시작해야합니다. 하지만이 시점에서 시작하여 "tran"네임 스페이스의 정의가 잘못되었습니다. XML 코드의 시작 부분에 정의되어 있기 때문입니다. 해결책 :''항목에'xmlns : tran = "http://www.cornerstoneondemand.com/Webservices/TranscriptAndTask"'를 추가하십시오 –

+0

우수 '추측'맞습니다! :) – Mark

관련 문제