2014-01-15 37 views
1

我試圖通過請求OTRS Ticketing system中的一些Ticket詳細信息。我試着搜索,沒有運氣關於「TicketSearch()」操作的OTRS API幫助PHP SOAP調用 - 基於API文檔構建調用

我知道SOAP連接是好的因爲以下「用戶」對象和「GetUserData()」操作符是Web與結果有效響應,所有用戶的數據:

try { 
$result = $client->__soapCall("Dispatch", array($user, $pass, "UserObject", "GetUserData", "UserID" , 2)); 
} 

現在,當我改變從用戶搜索到機票搜索,I'm獲得性反應「NULL」是SOAP調用。

try { 
$result = $client->__soapCall("Dispatch", array($user, $pass, "TicketObject", "TicketSearch", "Result", array("ARRAY","HASH","COUNT"), "QueueIDs", 10, "StateType", "Open")); 
} 

這並不奇怪,因爲我不知道如何爲以下所需值轉換成SOAP請求:

結果=>「陣」 || 'HASH'|| 'COUNT'

您可以查看相應的API documentation here,然後搜索'TicketSearch()'。任何幫助修復該請求,將不勝感激。我的最終目標是獲得隊列號爲10的票的列表。

回答

2

首先,||是perl中的邏輯或運算符。所以你顯示的文檔片段意味着COUNT或ARRAY或HASH;你必須選擇一個。如果您使用COUNT,則只需返回符合搜索條件的門票數量即可。其次,您需要提供執行搜索的代理的UserID,如果您沒有(因爲您的腳本用於某種集成),您總是可以使用ID號碼1;它可以訪問所有隊列。

最後,QueueIDs參數需要一個隊列ID數組;因此您可以使用單個參數搜索多個隊列ID。

$result = $client->__soapCall("Dispatch", array($user, $pass, 
    "TicketObject", "TicketSearch", 
    "UserID", 1, 
    "Result", "ARRAY", 
    "QueueIDs", array(1), 
    "StateType", "Open" 
)); 

請注意,RPC接口是一種低級別,它暴露原始的OTRS API。它不是很精美,有時你需要做很多工作才能獲得所需的數據,另一方面它非常強大。

'new'接口是基於WSDL的Web服務接口;這是更封裝和乾淨。它有兩個缺點,1; PHP不支持像使用.NET或Java那樣好的WSDLs,以及2;它僅公開OTRS API的一小部分,僅用於創建/搜索/修改故障單並處理FAQ(知識庫)。諸如添加/刪除隊列,服務或客戶的東西尚不可用。

+0

感謝MichielB,我沒有在API文檔中看到任何必須具有''UserID',1'的東西。現在一切正常。 –

+0

UserID確實是必需的,它在TicketSearch的(相當大的)文檔中:#user search(UserID is required) UserID => 123, Permission =>'ro'|| 'rw', http://otrs.perl-services.de/docs/otrs/rel-3_3/kernel_system_ticketsearch.html – MichielB

+0

@MichielB我如何在otrs中使用soap api顯示所有新門票?你可以給我一些想法 –