PHP, как использовать SOAP веб-сервисы? - PullRequest
0 голосов
/ 03 декабря 2011

Я очень новичок в использовании веб-сервисов.Спасибо, если кто-нибудь может мне помочь в этом.

В моих кодах PHP я пытаюсь использовать веб-службы SOAP с другого сервера (JIRA, java).API-интерфейс JIRA SOAP отображается здесь .

$jirasoap = new SoapClient($jiraserver['url']);
$token = $jirasoap->login($jiraserver['username'], $jiraserver['password']);
$remoteissue = $jirasoap->getIssue($token, "issuekey");

Я обнаружил, что у моих кодов нет проблем с вызовом функций, перечисленных на этой странице.Однако я не знаю, как использовать объекты, возвращаемые вызовами API.

Мой вопрос:

  1. В моих кодах PHP, как я могу использоватьmethods в объектах класса Java, возвращаемых вызовами SOAP API?Например, функция $remoteissue = $jirasoap->getIssue($a, $b) вернет RemoteIssue.Исходя из этого (http://docs.atlassian.com/rpc-jira-plugin/latest/com/atlassian/jira/rpc/soap/beans/RemoteIssue.html), существуют такие методы, как getSummary, getKey и т. Д. Как я могу использовать эти функции в моих кодах?Исходя из некоторых примеров PHP, которые я нашел в интернете, кажется, что все используют что-то вроде этого:$remoteissue = $jirasoap->getIssue($token, "issuekey");$key = $remoteissue->key;Они не используют методы объекта.Обратитесь к этому примеру , кажется, что кто-то может сделать это на других языках.Это тоже можно сделать в PHP?Проблема, с которой я сталкиваюсь, заключается в том, что я пытаюсь получить идентификатор вложения.Однако, похоже, что мы не можем получить ID вложения, используя этот метод: $attachmentid = $remoteattachment->id;.Я пытаюсь использовать метод $remoteattachment->getId().

  2. В кодах PHP после того, как мы сделали вызов API SOAP и получили возвращенные объекты, как мы узнаем, какие поля данных доступны вэтот объект?Например,$remoteissue = $jirasoap->getIssue($token, "issuekey");$summary = $remoteissue->summary;Откуда мы знаем, что ->summary доступно в $remoteissue?Когда я ссылаюсь на этот документ (http://docs.atlassian.com/rpc-jira-plugin/latest/com/atlassian/jira/rpc/soap/beans/RemoteIssue.html), я не вижу, чтобы в нем упоминались какие-либо поля данных в RemoteIssue. Откуда мы знаем, что мы можем получить key, summary и т. Д. Из этого объекта? Откуда мы знаемэто ->summary, а не ->getsummary? Нам нужно использовать веб-браузер, чтобы открыть URL WSDL?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 22 января 2013

Этому вопросу более одного года, но для того, чтобы поделиться знаниями и дать ответ людям, которые задали этот вопрос и нашли эту страницу, вот мои выводы.

Документ, упомянутый в вопросе, являетсяОбзор интерфейса JiraSoapService.Это хорошая справка о том, какие функции можно вызывать с какими аргументами и что они возвращают.

Если вы используете Java для вашего Jira SoapClient, возвращаемые объекты реализуются, но если вы используете PHP, возвращаемые объекты не 't типа, указанного в этой документации и не имеют ни одного из упомянутых методов.Возвращенные объекты являются экземплярами внутреннего класса PHP stdClass, который является заполнителем для неопределенных объектов.Лучший способ узнать, что возвращается, это использовать var_dump() для объектов, возвращаемых из SoapCalls.

$jirasoap = new SoapClient($jiraserver['url']);
$token = $jirasoap->login($jiraserver['username'], $jiraserver['password']);
$remoteissue = $jirasoap->getIssue($token, "PROJ-1");

var_dump($remoteissue);
/* -- You will get something like this ---
object(stdClass)#2 (21) {
  ["id"]=> string(3) "100"
  ["affectsVersions"]=> array(0) {  }
  ["assignee"]=> string(4) "user"
...
  ["created"]=> string(24) "2012-12-13T09:27:49.934Z"
...
  ["description"]=> string(17) "issue description"
....
  ["key"]=> string(6) "PROJ-1"
  ["priority"]=> string(1) "3"
  ["project"]=> string(4) "PROJ"
  ["reporter"]=> string(4) "user"
  ["resolution"]=> NULL
  ["status"]=> string(1) "1"
  ["summary"]=> string(15) "Project issue 1"
  ["type"]=> string(1) "3"
  ["updated"]=> string(24) "2013-01-21T16:11:43.073Z"
  ["votes"]=> int(0)
}
*/

// You can access data like this:
$jiraKey = $remoteissue->key;
$jiraProject = $remoteissue->project;
0 голосов
/ 15 декабря 2011

Я использовал Jira SOAP в проекте .NET, и IntelliSense подсказал мне, какие поля доступны для возвращаемого объекта.

Вы можете использовать что-то вроде VS.Php для Visual Studio или Php для Visual Studio , если вы используете Visual Studio.

Или вы можете выбрать одну из IDE из здесь с поддержкой IntelliSense.

0 голосов
/ 03 декабря 2011

Документ, который вы упомянули в # 2, относится к реализации Java и на самом деле не помогает вам с PHP.Если они не публикуют общедоступный API-интерфейс для своего сервиса (что было бы необычно), то использование WSDL в качестве ссылки позволит вам узнать, какие объекты и методы приняты сервисом, и вы можете соответствующим образом спланировать вызовы методов.

Техника, которую вы использовали для вызова getIssue(...), выглядит хорошо, хотя вы должны рассмотреть использование try ... catch в случае SoapException.

...