Помощь с вызовом PHP SOAP — построение вызова на основе документации API

Я пытаюсь запросить некоторые сведения о билете из системы продажи билетов OTRS через soap. Я безуспешно пытался найти в Интернете оператор TicketSearch() в API OTRS

Я знаю, что с SOAP-соединением все в порядке, потому что следующий объект "Пользователь" и оператор "GetUserData()" отвечают действительными результатами и всеми данными пользователей:

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

Теперь, когда я изменяю этот вызов SOAP с поиска пользователя на поиск билетов, я получаю ответ «NULL».

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

Это неудивительно для меня, так как я не уверен, как преобразовать следующее требуемое значение в запрос SOAP:

Результат => 'МАССИВ' || 'ХЭШ' || 'СЧИТАТЬ'

Вы можете просмотреть соответствующую документацию по API здесь, а затем выполнить поиск по запросу 'TicketSearch( )'. Будем признательны за любую помощь в исправлении этого запроса. Моя конечная цель - получить список билетов в очереди номер 10.


person Skuli Axelson    schedule 15.01.2014    source источник


Ответы (1)


Во-первых, || — это логический оператор or в Perl. Таким образом, фрагмент документации, который вы показали, означает COUNT или ARRAY или HASH; Вы должны выбрать один. И если вы используете COUNT, вы просто получите обратно количество билетов, соответствующих вашим критериям поиска.

Во-вторых, вам нужно предоставить UserID агента, который выполняет поиск, если у вас его нет (поскольку ваш скрипт предназначен для какой-то интеграции), вы всегда можете использовать ID номер 1; который имеет доступ ко всем очередям.

Наконец, параметр QueueIDs принимает массив идентификаторов очередей; поэтому вы можете искать несколько идентификаторов очередей с одним параметром.

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

Обратите внимание, что интерфейс RPC является своего рода низкоуровневым, он предоставляет необработанный API OTRS. Он не очень отполирован, и иногда вам нужно проделать большую работу, чтобы получить нужные вам данные, с другой стороны, он очень мощный.

«Новый» интерфейс — это интерфейс веб-службы на основе WSDL; это гораздо более инкапсулировано и чисто. У него есть два недостатка: 1; PHP не поддерживает использование WSDL так хорошо, как, например, .NET или Java, и 2; он предоставляет лишь небольшую часть OTRS API, только для создания/поиска/изменения заявок и обработки FAQ (базы знаний). Такие вещи, как добавление/удаление очередей, сервисов или клиентов (пока) недоступны.

person MichielB    schedule 15.01.2014
comment
Спасибо, MichielB, я не видел в документации по API ничего, что у вас должен был быть «UserID, 1». Теперь все работает. - person Skuli Axelson; 28.01.2014
comment
UserID действительно требуется, он есть в (довольно большой) документации для TicketSearch: # поиск пользователя (UserID требуется) UserID => 123, Permission => 'ro' || 'rw', otrs.perl-services.de/docs/ otrs/rel-3_3/ - person MichielB; 01.02.2014
comment
@MichielB Как я могу отобразить все новые билеты в otrs, используя мыльный API в php ?? ты можешь дать мне несколько идей - person Sujan Shrestha; 20.07.2016
comment
@SkuliAxelson Можете ли вы поделиться со мной php-скриптом. Я застрял, отображая билеты с помощью мыльного API. - person Sujan Shrestha; 20.07.2016
comment
Привет, в моем случае я просто собирал количество открытых тикетов для панели инструментов. Вот код, который я использовал, но обратите внимание, что он работает во внутренней сети, и поэтому я не тратил время на безопасность: codeshare. io/2R1T8 - person Skuli Axelson; 21.07.2016
comment
@SujanShrestha вызов TicketSearch возвращает только список идентификаторов билетов. Вам потребуется выполнить дополнительный вызов TicketGet для каждого TicketID. См. otrs.github.io/doc /api/otrs/stable/Perl/Kernel/System/ для получения дополнительной информации о вызове API TicketGet. - person MichielB; 25.07.2016