2017-04-11 62 views
0

我已經搜索了所有關於通過PHP與複雜的WSDL交談的SO,SU和論壇,但沒有運氣,由於缺乏知識和有用的手,我幾乎放棄了。使用Easy PHP2WSDL生成的PHP代碼

但是我發現了一個開源服務 - http://www.stccorp.net/ewsdl2php/wsdl2php.php

而且它產生的下面的代碼。

<?php 

class Authenticate{ 
var $clientId;//string 
var $username;//string 
var $password;//string 
} 
class AuthenticateResponse{ 
var $AuthenticateResult;//IntegrationResponse 
} 
class IntegrationResponse{ 
var $ResponseId;//int 
var $TotalCount;//int 
var $Detail;//string 
var $Statuses;//ArrayOfIntegrationStatusResponse 
var $ImportingQueueId;//int 
var $SalesOrdersToDespatchIds;//ArrayOfInt 
} 
class ArrayOfIntegrationStatusResponse{ 
var $IntegrationStatusResponse;//IntegrationStatusResponse 
} 
class IntegrationStatusResponse{ 
var $Reference;//string 
var $Status;//IntegrationResponseStatuses 
var $LineNo;//int 
var $Details;//string 
} 
class ArrayOfInt{ 
var $int;//int 
} 
class GetData{ 
var $getRequest;//GetRequest 
} 
class GetRequest{ 
var $TemplateName;//string 
var $PageNo;//int 
var $ItemsPerPage;//int 
var $SearchClause;//string 
} 
class GetDataResponse{ 
var $GetDataResult;//IntegrationResponse 
} 
class UserSessionCredentials{ 
var $UserId;//int 
var $ClientId;//string 
var $SessionId;//string 
} 
class GetSystemSettings{ 
} 
class GetSystemSettingsResponse{ 
var $GetSystemSettingsResult;//IntegrationResponse 
} 
class GetReportData{ 
var $getReportRequest;//GetReportRequest 
} 
class GetReportRequest{ 
var $FilterClause;//string 
var $OrderBy;//string 
var $Columns;//string 
} 
class GetReportDataResponse{ 
var $GetReportDataResult;//IntegrationResponse 
} 
class GetReportColumns{ 
var $templateName;//string 
} 
class GetReportColumnsResponse{ 
var $GetReportColumnsResult;//IntegrationResponse 
} 
class GetSaveTemplate{ 
var $templateName;//string 
} 
class GetSaveTemplateResponse{ 
var $GetSaveTemplateResult;//IntegrationResponse 
} 
class SaveData{ 
var $saveRequest;//SaveRequest 
} 
class SaveRequest{ 
var $TemplateName;//string 
var $CsvData;//string 
var $Action;//int 
} 
class SaveDataResponse{ 
var $SaveDataResult;//IntegrationResponse 
} 
class SubscribeEvent{ 
var $eventType;//SubscriptionEventTypes 
var $filter;//string 
var $callbackUrl;//string 
} 
class SubscribeEventResponse{ 
var $SubscribeEventResult;//IntegrationResponse 
} 
class SubscribeEventWithSitesFilters{ 
var $eventType;//SubscriptionEventTypes 
var $filter;//string 
var $sitesFilter;//string 
var $callbackUrl;//string 
} 
class SubscribeEventWithSitesFiltersResponse{ 
var $SubscribeEventWithSitesFiltersResult;//IntegrationResponse 
} 
class SubscribePostEvent{ 
var $eventType;//SubscriptionEventTypes 
var $filter;//string 
var $postUrl;//string 
var $postParams;//string 
} 
class SubscribePostEventResponse{ 
var $SubscribePostEventResult;//IntegrationResponse 
} 
class UnsubscribeEvent{ 
var $subscriptionId;//int 
} 
class UnsubscribeEventResponse{ 
var $UnsubscribeEventResult;//IntegrationResponse 
} 
class Range 
{ 
var $soapClient; 

private static $classmap = array('Authenticate'=>'Authenticate' 
,'AuthenticateResponse'=>'AuthenticateResponse' 
,'IntegrationResponse'=>'IntegrationResponse' 
,'ArrayOfIntegrationStatusResponse'=>'ArrayOfIntegrationStatusResponse' 
,'IntegrationStatusResponse'=>'IntegrationStatusResponse' 
,'ArrayOfInt'=>'ArrayOfInt' 
,'GetData'=>'GetData' 
,'GetRequest'=>'GetRequest' 
,'GetDataResponse'=>'GetDataResponse' 
,'UserSessionCredentials'=>'UserSessionCredentials' 
,'GetSystemSettings'=>'GetSystemSettings' 
,'GetSystemSettingsResponse'=>'GetSystemSettingsResponse' 
,'GetReportData'=>'GetReportData' 
,'GetReportRequest'=>'GetReportRequest' 
,'GetReportDataResponse'=>'GetReportDataResponse' 
,'GetReportColumns'=>'GetReportColumns' 
,'GetReportColumnsResponse'=>'GetReportColumnsResponse' 
,'GetSaveTemplate'=>'GetSaveTemplate' 
,'GetSaveTemplateResponse'=>'GetSaveTemplateResponse' 
,'SaveData'=>'SaveData' 
,'SaveRequest'=>'SaveRequest' 
,'SaveDataResponse'=>'SaveDataResponse' 
,'SubscribeEvent'=>'SubscribeEvent' 
,'SubscribeEventResponse'=>'SubscribeEventResponse' 
,'SubscribeEventWithSitesFilters'=>'SubscribeEventWithSitesFilters' 
,'SubscribeEventWithSitesFiltersResponse'=>'SubscribeEventWithSitesFiltersResponse' 
,'SubscribePostEvent'=>'SubscribePostEvent' 
,'SubscribePostEventResponse'=>'SubscribePostEventResponse' 
,'UnsubscribeEvent'=>'UnsubscribeEvent' 
,'UnsubscribeEventResponse'=>'UnsubscribeEventResponse' 

); 

function __construct($url='integrationservicev4.asmx?WSDL') 
{ 
    $this->soapClient = new SoapClient($url,array("classmap"=>self::$classmap,"trace" => true,"exceptions" => true)); 
} 

function Authenticate(Authenticate $Authenticate) 
{ 

$AuthenticateResponse = $this->soapClient->Authenticate($Authenticate); 
return $AuthenticateResponse; 

} 
function GetData(GetData $GetData) 
{ 

$GetDataResponse = $this->soapClient->GetData($GetData); 
return $GetDataResponse; 

} 
function GetSystemSettings(GetSystemSettings $GetSystemSettings) 
{ 

$GetSystemSettingsResponse = $this->soapClient->GetSystemSettings($GetSystemSettings); 
return $GetSystemSettingsResponse; 

} 
function GetReportData(GetReportData $GetReportData) 
{ 

$GetReportDataResponse = $this->soapClient->GetReportData($GetReportData); 
return $GetReportDataResponse; 

} 
function GetReportColumns(GetReportColumns $GetReportColumns) 
{ 

$GetReportColumnsResponse = $this->soapClient->GetReportColumns($GetReportColumns); 
return $GetReportColumnsResponse; 

} 
function GetSaveTemplate(GetSaveTemplate $GetSaveTemplate) 
{ 

$GetSaveTemplateResponse = $this->soapClient->GetSaveTemplate($GetSaveTemplate); 
return $GetSaveTemplateResponse; 

} 
function SaveData(SaveData $SaveData) 
{ 

$SaveDataResponse = $this->soapClient->SaveData($SaveData); 
return $SaveDataResponse; 

} 
function SubscribeEvent(SubscribeEvent $SubscribeEvent) 
{ 

$SubscribeEventResponse = $this->soapClient->SubscribeEvent($SubscribeEvent); 
return $SubscribeEventResponse; 

} 
function SubscribeEventWithSitesFilters(SubscribeEventWithSitesFilters $SubscribeEventWithSitesFilters) 
{ 

$SubscribeEventWithSitesFiltersResponse = $this->soapClient->SubscribeEventWithSitesFilters($SubscribeEventWithSitesFilters); 
return $SubscribeEventWithSitesFiltersResponse; 

} 
function SubscribePostEvent(SubscribePostEvent $SubscribePostEvent) 
{ 

$SubscribePostEventResponse = $this->soapClient->SubscribePostEvent($SubscribePostEvent); 
return $SubscribePostEventResponse; 

} 
function UnsubscribeEvent(UnsubscribeEvent $UnsubscribeEvent) 
{ 

$UnsubscribeEventResponse = $this->soapClient->UnsubscribeEvent($UnsubscribeEvent); 
return $UnsubscribeEventResponse; 

} 
function Authenticate(Authenticate $Authenticate) 
{ 

$AuthenticateResponse = $this->soapClient->Authenticate($Authenticate); 
return $AuthenticateResponse; 

} 
function GetData(GetData $GetData) 
{ 

$GetDataResponse = $this->soapClient->GetData($GetData); 
return $GetDataResponse; 

} 
function GetSystemSettings(GetSystemSettings $GetSystemSettings) 
{ 

$GetSystemSettingsResponse = $this->soapClient->GetSystemSettings($GetSystemSettings); 
return $GetSystemSettingsResponse; 

} 
function GetReportData(GetReportData $GetReportData) 
{ 

$GetReportDataResponse = $this->soapClient->GetReportData($GetReportData); 
return $GetReportDataResponse; 

} 
function GetReportColumns(GetReportColumns $GetReportColumns) 
{ 

$GetReportColumnsResponse = $this->soapClient->GetReportColumns($GetReportColumns); 
return $GetReportColumnsResponse; 

} 
function GetSaveTemplate(GetSaveTemplate $GetSaveTemplate) 
{ 

$GetSaveTemplateResponse = $this->soapClient->GetSaveTemplate($GetSaveTemplate); 
return $GetSaveTemplateResponse; 

} 
function SaveData(SaveData $SaveData) 
{ 

$SaveDataResponse = $this->soapClient->SaveData($SaveData); 
return $SaveDataResponse; 

} 
function SubscribeEvent(SubscribeEvent $SubscribeEvent) 
{ 

$SubscribeEventResponse = $this->soapClient->SubscribeEvent($SubscribeEvent); 
return $SubscribeEventResponse; 

} 
function SubscribeEventWithSitesFilters(SubscribeEventWithSitesFilters $SubscribeEventWithSitesFilters) 
{ 

$SubscribeEventWithSitesFiltersResponse = $this->soapClient->SubscribeEventWithSitesFilters($SubscribeEventWithSitesFilters); 
return $SubscribeEventWithSitesFiltersResponse; 

} 
function SubscribePostEvent(SubscribePostEvent $SubscribePostEvent) 
{ 

$SubscribePostEventResponse = $this->soapClient->SubscribePostEvent($SubscribePostEvent); 
return $SubscribePostEventResponse; 

} 
function UnsubscribeEvent(UnsubscribeEvent $UnsubscribeEvent) 
{ 

$UnsubscribeEventResponse = $this->soapClient->UnsubscribeEvent($UnsubscribeEvent); 
return $UnsubscribeEventResponse; 

}} 


?>   

我想問一下,如果有人能指出我如何使用它? 我會真的感謝所有幫助創建具有一個請求:

SOAP頭:

UserSessionCredentials.UserId [0]:

UserSessionCredentials.ClientId [0]:

UserSessionCredentials.SessionId [0]:

SOAP BODY

GetReportData.getReportRequest [0] .TemplateName [0]:
GetReportData.getReportRequest [0] .PageNo [0]:
GetReportData.getReportRequest [0] .ItemsPerPage [0]:
GetReportData.getReportRequest [0] .SearchClause [0]:
GetReportData.getReportRequest [0] .FilterClause [0]:
GetReportData.getReportRequest [0] .OrderBy [0]: GetReportData.getReportRequest [0] .Columns [ 0]:

溶液從下面的答案和StackOverflow的問題提出:誰需要這個Set SoapHeaders with multiple namespace in PHP所有客戶端:僅基於SOAP標題和正文你在你的第二部分說

<?php 
$ns = "http://www.thenamespace.net/"; 
$userid = 123; // you can find out this part from loggin into WMS and checking HTTP requests/responses and you can get the ID 
$clientid = "aaa1234"; 
$username = "username"; 
$password = base64_encode("password"); 
$socket_context = stream_context_create(array('http' => array('protocol_version' => 1.0))); 
$client = new SoapClient("http://wms.system.net/$clientid/resources/integrationservicev4.asmx?WSDL", array('exceptions' => 0,'stream_context' => $socket_context,'trace' => 1)); 


// body vars 
$someTemplateName = 'Critical'; //from the created reporting template 
$somePageNo = 1; 
$someItemsPerPage = 1000; 
$someSearchClause = ''; 
$someFilterClause = 'RequestedDeliveryDate >= DateTime(2017,04,13,06,00,00)'; // here we can do $date = date(Y,m,d,) . $time 
$someOrderBy = '[Type]'; 
$someColumns = '[Type],[Total]'; // columns to show 

$params = array("clientId"=>$clientid,"username"=>$username,"password"=>$password); 
$start = $client->Authenticate($params); 
if (is_soap_fault($start)) { 
    trigger_error("SOAP Fault: (faultcode: {$start->faultcode}, faultstring: {$start->faultstring})", E_USER_ERROR); 
    print "<br />"; 
} else { 
    $response = $start->AuthenticateResult->Detail; 
    $response_explode = explode(",",$response); 
    $sessionid = $response_explode[1]; 


    //Body of the Soap Header. 
    $headerbody = array('UserId' => $userid,'ClientId' => $clientid, 'SessionId' => $sessionid); 
    //Create Soap Header.   
    $header = new SOAPHeader($ns, 'UserSessionCredentials', $headerbody);  
    //set the Headers of Soap Client. 
    $client->__setSoapHeaders($header); 

    $body = array( 'TemplateName'=>$someTemplateName, 
       'PageNo'=>$somePageNo, 
       'ItemsPerPage'=>$someItemsPerPage, 
       'SearchClause'=>$someSearchClause, 
       'FilterClause'=>$someFilterClause, 
       'OrderBy'=>$someOrderBy, 
       'Columns'=>$someColumns); 

} 
$params = array('getReportRequest' => $body); 
$reply = $client->GetReportData($params); // ACTUAL MAGIC 
var_dump($reply); 
print_r($start); 
echo "<br><br><br>ResponseT:\n" . $client->__getLastResponse() . "\n"; 
echo "<br><br><br>REQUEST:\n" . $client->__getLastRequest() . "\n"; 
?> 

回答

1

,我可以回答以下問題:

你可以設置你的要求是這樣的:

​​

檢查有關的頭here和一下身體信息

但是如果我檢查你粘貼PHP2WSDL代碼,我注意到類GetReportData只有場$FilterClause$OrderBy$Columns

而場$TemplateName$PageNo$ItemsPerPage$SearchClause屬於GetRequest類,這是不包括在你的問題。 根據需要使用,你應該只從PHP2WSDL輸出

<?php 
class UserSessionCredentials{ 
    var $UserId;//int 
    var $ClientId;//string 
    var $SessionId;//string 
} 
class GetReportData{ 
    var $getReportRequest;//GetReportRequest 
} 
class GetReportRequest{ 
    var $FilterClause;//string 
    var $OrderBy;//string 
    var $Columns;//string 
} 
class GetReportDataResponse{ 
    var $GetReportDataResult;//IntegrationResponse 
} 

class Range { 
var $soapClient; 

    private static $classmap = array('Authenticate'=>'Authenticate' 
    ,'AuthenticateResponse'=>'AuthenticateResponse' 
    ,'IntegrationResponse'=>'IntegrationResponse' 
    ,'ArrayOfIntegrationStatusResponse'=>'ArrayOfIntegrationStatusResponse' 
    ,'IntegrationStatusResponse'=>'IntegrationStatusResponse' 
    ,'ArrayOfInt'=>'ArrayOfInt' 
    ,'GetData'=>'GetData' 
    ,'GetRequest'=>'GetRequest' 
    ,'GetDataResponse'=>'GetDataResponse' 
    ,'UserSessionCredentials'=>'UserSessionCredentials' 
    ,'GetSystemSettings'=>'GetSystemSettings' 
    ,'GetSystemSettingsResponse'=>'GetSystemSettingsResponse' 
    ,'GetReportData'=>'GetReportData' 
    ,'GetReportRequest'=>'GetReportRequest' 
    ,'GetReportDataResponse'=>'GetReportDataResponse' 
    ,'GetReportColumns'=>'GetReportColumns' 
    ,'GetReportColumnsResponse'=>'GetReportColumnsResponse' 
    ,'GetSaveTemplate'=>'GetSaveTemplate' 
    ,'GetSaveTemplateResponse'=>'GetSaveTemplateResponse' 
    ,'SaveData'=>'SaveData' 
    ,'SaveRequest'=>'SaveRequest' 
    ,'SaveDataResponse'=>'SaveDataResponse' 
    ,'SubscribeEvent'=>'SubscribeEvent' 
    ,'SubscribeEventResponse'=>'SubscribeEventResponse' 
    ,'SubscribeEventWithSitesFilters'=>'SubscribeEventWithSitesFilters' 
    ,'SubscribeEventWithSitesFiltersResponse'=>'SubscribeEventWithSitesFiltersResponse' 
    ,'SubscribePostEvent'=>'SubscribePostEvent' 
    ,'SubscribePostEventResponse'=>'SubscribePostEventResponse' 
    ,'UnsubscribeEvent'=>'UnsubscribeEvent' 
    ,'UnsubscribeEventResponse'=>'UnsubscribeEventResponse' 

    ); 

    function __construct($url='integrationservicev4.asmx?WSDL') 
    { 
     $this->soapClient = new SoapClient($url,array("classmap"=>self::$classmap,"trace" => true,"exceptions" => true)); 
    } 


    function GetReportData(GetReportData $GetReportData) 
    { 

    $GetReportDataResponse = $this->soapClient->GetReportData($GetReportData); 
    return $GetReportDataResponse; 

    } 
} 
?>   

最後使用下面的代碼的東西,我沒有看到的網址integrationservicev4.asmx任何WSDL?WSDL所以萬一你的避風港沒有改變它自己,要小心,因爲該服務可能不會回覆你,即使你正確地實現你的客戶端

+0

偉大的,虐待解釋這一點,這是複雜的超出我,但我可以向你保證我編輯了ASMX鏈接,由於安全原因。有一個人在SO上也提出了一個問題,關於前一段時間與同一服務部門交談,但問題沒有提出。請參閱:http://stackoverflow.com/questions/33038361/set-soapheaders-with-multiple-namespace-in-php – dExIT

+0

我將更新與在線服務,這與API服務交談完美的問題,它完全困惑我最後所有的東西都需要在構造中:$ FilterClause,$ OrderBy,$ Columns和$ TemplateName,$ PageNo,$ ItemsPerPage和$ SearchClause – dExIT

+0

當你更新服務url時,ok或者任何來自社區的人可能會有進一步的幫助,也許 –