2015-08-23 26 views
0

我有一個偉大的工程一個簡單的SOAP服務器,並返回答案,POST請求:操縱肥皂PHP POST答案

<?php 

class result extends stdClass 
{ 
    public $ResultCode = ''; 
    public $ResultDesc = ''; 
} 

class answer 
{ 
    function lgi($a) { 
    $data = new result(); 
    $data->ResultCode = '0'; 
    $data->ResultDesc = 'Hi'; 

    return $data; 
} 
} 

$options = array(
'uri' => 'http://loooloo.com/LGI', 
'location' => 'http://schemas.xmlsoap.org/soap/envelope/', 
); 
$soap = new SoapServer(null, $options); 
$soap->setclass("answer"); 
$soap->handle(); 
?> 

服務器返回:

<SOAP-ENV:Body> 
<ns1:LGIResponse> 
    <return 
    xsi:type="SOAP-ENC:Struct"> 
    <ResultCode xsi:type="xsd:string"> 
    0 
    </ResultCode> 
    <ResultDesc xsi:type="xsd:string"> 
    Hi 
    </ResultDesc> 
    </return> 
</ns1:LGIResponse> 
</SOAP-ENV:Body> 

而我真正需要的是:

<SOAP-ENV:Body> 
    <LGOResponse> 
     <Result> 
      <ResultCode>0</ResultCode> 
      <ResultDesc>Hi</ResultDesc> 
     </Result> 
    </LGOResponse> 

我看到了使用SoapVar和str_replace的客戶端的例子,它沒有爲我工作。任何其他想法?

感謝

回答

0

它終於摸索......

我替換回報標籤與結果標記並取消類型:

<?php 

    class result extends stdClass 
    { 
     public $ResultCode = ''; 
     public $ResultDesc = ''; 
    } 

    class answer 
    { 
     function lgi($a) { 
     $data = new result(); 
     $data->ResultCode = '0'; 
     $data->ResultDesc = 'Hi'; 

     return $data; 
    } 
    } 

    $options = array(
    'uri' => 'http://loooloo.com/LGI', 
    'location' => 'http://schemas.xmlsoap.org/soap/envelope/', 
    ); 
    $soap = new SoapServer(null, $options); 
    $soap->setclass("answer"); 

    ob_start(); 
    $soap->handle(); 
    $soap1 = ob_get_contents(); 
    ob_end_clean(); 

    $soap1 = str_replace("<return xsi:type=\"SOAP-ENC:Struct\">", '<Result>', $soap1); 
    $soap1 = str_replace("xsi:type=\"xsd:int\"", '', $soap1); 
    $soap1 = str_replace("xsi:type=\"xsd:string\"", '', $soap1); 
    $soap1 = str_replace("</return>", '</Result>', $soap1); 

    echo $soap1;