2014-01-15 43 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显示所有新门票?你可以给我一些想法 –