2

jiraの問題を更新するための私のphp関数は次のようになります。問題IDをハードコーディングしました。でエラーが発生します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);
                }
            }

私はここで何が間違っているのですか?お答えください。

4

2 に答える 2

0

よくわかりませんが、試してみましょう。

変化する

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:8080Jiraがローカルにインストールされている場合にのみ機能します。その場合は、ブラウザを使用して開いてみてください http://localhost:8084/rest/api/2/issue/

編集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

正しいjiraアドレスを持っていますか?ブラウザを開いてURLにアクセスし、この例と比較してみてください。ページが表示されない場合は、Jiraのサポートに連絡して、ホストされているJiraリモートAPIにアクセスできない理由を尋ねる必要があります。

于 2012-12-17T13:09:04.963 に答える
0

editmetaは、問題からメタデータを取得するためにのみ使用する必要があります。

問題を更新するには、 issueメソッドを使用する必要があります。

Jira APIの詳細は、 https ://docs.atlassian.com/jira/REST/cloud/#api/2/で確認できます。

于 2017-08-30T13:28:00.050 に答える