2015-08-26 72 views
0

我試圖使用PHP和SoapClient原生功能獲取與PHP的SOAPClient

$client = new SoapClient('my.wsdl', ['trace'=>1, 'cache_wsdl' => WSDL_CACHE_NONE]); 
$client->MethodToCall($params); 
var_dump($client->__getLastRequest()); 

這是預期的XML請求複製這個結構XML響應:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <MethodToCall> 
      <MethodToCallRQ> 
       <RqHeader HostID="123456" Xtoken="TOKEN123456" Interface="WEB" UserName="WEB"/> 
       <SearchType>NAME</SearchType> 
       <RecordCode/> 
       <Name>MARIO</Name> 
      </MethodToCallRQ> 
     </MethodToCall> 
    </soapenv:Body> 
</soapenv:Envelope> 

目前我不能夠重現它。 我需要一些提示以正確的方式傳遞參數給我的方法。

UPGRADE。

我使用wsdl2phpgenerator爲我的請求創建所有類。

我的代碼如下結果:

$service = new \SoapExtended(
    [ 
     'soap_version' => SOAP_1_1, 
     'exceptions'  => true, 
     'trace'   => 1, 
     'location'  => MYLOCATION, 
     'cache_wsdl'  => WSDL_CACHE_NONE, 
    ], 
    MYWSDL 
); 

$params = new \MethodToCallRQ("NAME"); 
$params->setName("MARIO"); 
$params->setRqHeader(new \RequestHeader("123456", "TOKEN123456", "WEB", "WEB")); 

$request = new \MethodToCall($params); 
$response = $service->MethodToCall($request); 
// above call is equal to this below: 
//$this->__soapCall('MethodToCall', array($request)); 

$請求的轉儲:

object MethodToCall (1) { 
    protected MethodToCallRQ -> object MethodToCallRQ (10) { 
     protected SearchType -> string (4) "NAME" 
     protected RecordCode -> NULL 
     protected Name -> string (7) "Stefano" 
     protected Surname -> NULL 
     protected VatCode -> NULL 
     protected ZipCode -> NULL 
     protected City -> NULL 
     protected CountyCode -> NULL 
     protected CategoryCode -> NULL 
     protected RqHeader -> object RequestHeader (5) { 
      protected HostID -> string (6) "123456" 
      protected Xtoken -> string (11) "TOKEN123456" 
      protected Interface -> string (3) "WEB" 
      protected UserName -> string (3) "WEB" 
     } 
    } 
} 

生成的XML是:

<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
    <SOAP-ENV:Body> 
     <parameters> 
      <MethodToCallRQ> 
       <SearchType>NAME</SearchType> 
       <RecordCode/> 
       <Name>Stefano</Name> 
       <Surname/> 
       <VatCode/> 
       <ZipCode/> 
       <City/> 
       <CountyCode/> 
       <CategoryCode/> 
       <RqHeader> 
        <HostID>123456</HostID> 
        <Xtoken>TOKEN123456</Xtoken> 
        <Interface>WEB</Interface> 
        <UserName>WEB</UserName> 
       </RqHeader> 
      </MethodToCallRQ> 
     </parameters> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

爲什麼標籤

<parameters> 

代替

<MethodToCall> 

+1

「這是預期的XML請求」 - 什麼是實際的請求? – VolkerK

+0

我不確定實際的請求會有用,我嘗試了很多$參數的組合(在我的示例中,我只是爲了清晰起見才報道它),並且我無法重現體內的xml。 – theex

回答

0

擁有WSDL可能有助於查看預期的請求以及它爲什麼不起作用。

您是否嘗試過使用PackageGenerator?讓我知道然後