моя php-функция для обновления jira-проблемы похожа на this.i жестко запрограммировала проблему id.it генерирует ошибку в if (property_exists($result, 'errors'))
. говорящий параметр не является объектом.
function post_to($resource, $data) { $jdata = json_encode($data); $ch = curl_init(); curl_setopt_array($ch, array( CURLOPT_POST => 1, CURLOPT_URL => JIRA_URL . '/rest/api/latest/' . $resource, CURLOPT_USERPWD => USERNAME . ':' . PASSWORD, CURLOPT_POSTFIELDS => $jdata, CURLOPT_HTTPHEADER => array('Content-type: application/json'), CURLOPT_RETURNTRANSFER => true )); $result = curl_exec($ch); curl_close($ch); return json_decode($result); } function create_issue($issue) { return post_to('issue/10224/editmeta', $issue); } $new_issue = array( 'update' =>array( 'fields' => array( 'project' => array('key' => 'DOTNET'), 'summary' => 'Test via REST', 'description' => 'Description of issue goes here.', 'issuetype' => array('name' => 'Task') )) ); $result = create_issue($new_issue); if (property_exists($result, 'errors')) { echo "Error(s) creating issue:\n"; var_dump($result); } }
что я делаю неправильно здесь? ответьте, пожалуйста.
Не совсем уверен, давайте попробуем кое-что:
изменение
CURLOPT_HTTPHEADER => array('Content-type: application/json'),
чтобы:
CURLOPT_HTTPHEADER => array( 'Accept: application/json', 'Content-Type: application/json' );
а также:
$new_issue = array( 'update' =>array( 'fields' => array( 'project' => array('key' => 'DOTNET'), 'summary' => 'Test via REST', 'description' => 'Description of issue goes here.', 'issuetype' => array('name' => 'Task') )) );
чтобы:
$new_issue = array( 'fields' => array( 'project' => array('key' => 'DOTNET'), 'summary' => 'Test via REST', 'description' => 'Description of issue goes here.', 'issuetype' => array('name' => 'Task') ) );
наконец, измените:
CURLOPT_URL => JIRA_URL . '/rest/api/latest/' . $resource,
на ваш реальный адрес, а также написание 2
вместо latest
, то есть:
CURLOPT_URL=>'http://localhost/rest/api/2/issue/',
попробуйте это, и дайте мне знать, как все идет, удачи!
РЕДАКТИРОВАТЬ
попробуйте изменить:
CURLOPT_POST => 1,
чтобы:
CURL_POST=>true, CURLOPT_VERBOSE=>1,
Кстати, где ваш сервер jira? Разве вы не сказали, что это было организовано? localhost:8080
будет работать только в том случае, если Jira установлен локально. Если это так, попробуйте открыть его с помощью браузера http://localhost:8084/rest/api/2/issue/
EDIT 2
Убедитесь, что Allow Remote API Calls
включены в разделе «Администрирование»> «Общая настройка».
для обновления проблемы:
URL должен указывать на проблему, которая будет вскоре обновляться, а именно:
http://localhost/rest/api/2/issue/TEST-31
и данные должны быть такими же, как и раньше, что означает:
$new_issue = array( 'fields' => array( 'project' => array('key' => 'DOTNET'), 'summary' => 'Test via REST', 'description' => 'Description of issue goes here.', 'issuetype' => array('name' => 'Task') ) );
как вы писали, когда пытались создать проблему. вы можете найти здесь простой пример того, как это сделать.
ИЗМЕНИТЬ 3
Уверены ли вы, что у вас есть правильный адрес джиры? попробуйте снова открыть браузер и перейти к URL-адресу и сравнить его с этим примером . Если страница не будет отображаться, вам нужно будет связаться с администрацией Jira и спросить их, почему вы не можете получить доступ к удаленному API-интерфейсу Jira.
editmeta следует использовать только для получения метаданных OBTAIN из проблемы.
Чтобы обновить проблему, вы должны использовать метод выпуска .
Вы можете проверить информацию о Jira API здесь: https://docs.atlassian.com/jira/REST/cloud/#api/2/