You are not logged in.
Pages: 1
Topic closed
Bonjour,
Je dois avoir la solution juste sous les yeux mais je ne la vois pas... (moment de solitude en perspective ?
J'ai lu pas mal de posts pour prendre en main l'API, ça avance bien
Merci en particulier à LaDenrée !
Merci aussi mecmav, wtralui, chouille75, headquaker...
https://forum.glpi-project.org/viewtopic.php?id=170066
https://forum.glpi-project.org/viewtopic.php?id=172606
https://forum.glpi-project.org/viewtopic.php?id=172767
https://forum.glpi-project.org/viewtopic.php?id=172365
https://forum.glpi-project.org/viewtopic.php?id=176273
https://forum.glpi-project.org/viewtopic.php?id=157700
https://forum.glpi-project.org/viewtopic.php?id=209099
...
Utilisation API : je peux
- initier/clore une session
- faire un GET sur un item
- accéder à la page de documentation et donc la lire :-) !
MAIS je coince sur les POST dès qu'il y a un tableau (imput par exemple)
J'ai essayé pas mal de choses fichier php, curl en ligne de commande modifier la syntaxe.
Si vous avez une idée...
Merci
Philippe
/***************INIT SESSION**************/
$api_url="localhost/glpi945/apirest.php";
$user_token="fdQgGQNocFEeJshrhMK3rr3Ex9YDi1rEhbiRbMAb";
$app_token="IPWM0t6sKKtlnZWAnBFHcvuWYSVlPGEdyAcM3UcP";
$ch = curl_init();
$url=$api_url . "/initSession?Content-Type=%20application/json&app_token=".$app_token ."&user_token=".$user_token;
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$json = curl_exec($ch);
curl_close ($ch);
$obj = json_decode($json,true);
$sess_token = $obj['session_token'];
//-----------debug only-----------------
echo "session token \n";
print ($sess_token);
echo "\n";
/***************CREATE TICKET**************/
$fields= '{"input":{"name": "TEST EVENTNAME 1","content": "EVENTID - Host HOSTNAME","status":"1","type":"1","priority":"5","_user_id_requester":"2"}}';
$url=$api_url . "/Ticket/?Content-Type=%20application/json&app_token=".$app_token."&session_token=".$sess_token;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
$request_result = curl_exec($ch);
curl_close ($ch);
$obj = json_decode($request_result,true);
print_r($obj);
// ticket number $ticket= to do
/***************CLOSE SESSION**************/
//to do
/***************EVENT ACK******************/
//to do Zabbix JSON TESTS OK ack+comment
SORTIE
c:\xampp\php>php c:\app\test\ticket3.php
session token
ukbhnb0rhqigt182p4lj9ectp3
Array
(
[0] => ERROR_BAD_ARRAY
[1] => Le paramètre input doit être un tableau d'objets; Afficher la documentation dans votre navigateur à http://localhost/glpi945/apirest.php/#ERROR_BAD_ARRAY
)
Si je remplace
$fields= '{"input":{"name": "TEST EVENTNAME 1","content": "EVENTID - Host HOSTNAME","status":"1","type":"1","priority":"5","_user_id_requester":"2"}}';
par
$fields= array("input[name]"=> "ENVENTNAME 1", "input[content]"=> "ENVENTID ID HOST HOSTNAME", "input[status]"=>"1", "input[urgency]"=>"1", "input[priority]"=>"4", "input[_users_id_requester]"=>"2" );
j'obtiens
Array
(
[0] => ERROR_UPLOAD_FILE_TOO_BIG_POST_MAX_SIZE
[1] => The file seems too big
)
Si je mets
$fields=array("input": ("name": "TEST API 1","content": "EVENTID - Host : HOSTNAME","status":"1","urgency":"1","priority":"5","_user_id_requester":"2"));
J'ai
c:\xampp\php>php c:\app\test\ticket2.php
PHP Parse error: syntax error, unexpected ':', expecting ')' in C:\app\test\ticket2.php on line 20
Parse error: syntax error, unexpected ':', expecting ')' in C:\app\test\ticket2.php on line 20
Last edited by Oggy One (2020-04-16 15:55:56)
PROD : GLPI 9.2.1 - Debian 9 - Apache 2.4.10 - PHP 5.6.38-0+deb8u1 - MySQL 5.5.60-0+deb8u1
Plugins principaux : FormCreator, Behaviors, Accounts, FusionInventory, PurgeLogs, DataInjection, GenericObjects
TEST : GLPI 9.4.5 Windows 10 xampp Apache 2.4.41 PHP 7.3.12 MariaDB 10.4.10
DEV : GLPI 9.4.5 Debian 10 Apache 2.4.38 PHP 7.3.14 MariaDB 10.3.22 + Plugins Prod
Offline
Re,
J'ai cherché... testé aussi sur un GLPI 9.2.4, pas mieux.
Finalement, j'ai trouvé une autre façon de faire.
J'ai installé Postman, validé le JSON et Postman m'a généré le code PHP. C'est OK !
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "localhost/glpi924/apirest.php/Ticket",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS =>"{\n \"input\": {\n \"name\": \"TEST EVENTNAME 6\",\n \"content\": \"EVENTID12 - Host HOSTNAME\",\n \"status\": \"1\",\n \"type\": \"1\",\n \"priority\": \"5\"\n }\n}",
CURLOPT_HTTPHEADER => array(
"App-Token: zxtOJfZYEXB8ph6lcRYMBqALJSBoxk2fqkmkHYAY",
"Session-Token: iogv4crnqgahpq4608iuhhmfq0",
"Content-Type: application/json"
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Sortie
c:\xampp\php>php c:\app\test\ticket5.php
reponse JSON
{"id":5,"message":"Votre ticket a bien été enregistré, son traitement est en cours. (Ticket : 5)"}
reponse decodee
Array
(
[id] => 5
[message] => Votre ticket a bien été enregistré, son traitement est en cours. (Ticket : 5)
)
Num Ticket
5
On peut solder
PROD : GLPI 9.2.1 - Debian 9 - Apache 2.4.10 - PHP 5.6.38-0+deb8u1 - MySQL 5.5.60-0+deb8u1
Plugins principaux : FormCreator, Behaviors, Accounts, FusionInventory, PurgeLogs, DataInjection, GenericObjects
TEST : GLPI 9.4.5 Windows 10 xampp Apache 2.4.41 PHP 7.3.12 MariaDB 10.4.10
DEV : GLPI 9.4.5 Debian 10 Apache 2.4.38 PHP 7.3.14 MariaDB 10.3.22 + Plugins Prod
Offline
salut,
voici ma fonction php pour faire des GET ou POST
define('GET', FALSE);
define('POST', 1);
define('PUT', 2);
define('DELETE', 3);
define('RANGE_GLPI', '0-200');
define('APP_TOKEN', 'xx');
define('API_URL', 'https://xxxglpi/apirest.php');
// fonction de Publication sur GLPI
// $item : Ticket, Document, ...
// $options : la variable tableau des paramétres,
// $methode : POST (1) si $options est une variable tableau à passer en json en $POST,
// GET (FALSE) on passe $option tel quel en ligne de commande en $GET
// PUT (2) : mise à jour, meme format que POST
// DELETE (3) : suppression
function myAction($item, $options, $methode, $sess_token){
$headers = array(
('Content-Type: application/json'),
('App-Token: ' . APP_TOKEN),
('Session-Token: '.$sess_token)
);
$ch = curl_init();
if ($methode==POST) {
$url=API_URL . '/' . $item . '/';
if (isset($options)){
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($options));
}
curl_setopt($ch, CURLOPT_POST, TRUE);
}
else if ($methode==PUT) {
$url=API_URL . '/' . $item . '/';
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($options));
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
}
else if ($methode==DELETE) {
$url=API_URL . '/' . $item . '/';
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
}
else {
$url=API_URL . '/' . $item . '?'.$options.'&range='.RANGE_GLPI;
}
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$request_result = curl_exec($ch);
curl_close ($ch);
return json_decode($request_result,true);
}
Et je l'utilise comme ca :
get list ticket :
$Tickets=myAction('Ticket/', NULL, GET, $sess_token);
et un post ticket :
$options = array('input'=>array(
'name'=>$lot,
'requesttypes_id'=>'7',
'content'=>$message,
'type'=>'1',
'itilcategories_id'=>'1',
'urgency'=>$importance,
));
$Ticket=myAction('Ticket', $options, POST, $sess_token);
//affectation à l'équipement en question
$options = array('input'=>array(
'items_id'=>$eqpt,
'itemtype'=>'PluginGenericobjectEqpt',
'tickets_id'=>$Ticket['id'],
));
$TicketItem=myAction('Ticket/'.$Ticket['id'].'/Item_Ticket', $options, POST, $sess_token);
Offline
Merci pour la réponse !
PROD : GLPI 9.2.1 - Debian 9 - Apache 2.4.10 - PHP 5.6.38-0+deb8u1 - MySQL 5.5.60-0+deb8u1
Plugins principaux : FormCreator, Behaviors, Accounts, FusionInventory, PurgeLogs, DataInjection, GenericObjects
TEST : GLPI 9.4.5 Windows 10 xampp Apache 2.4.41 PHP 7.3.12 MariaDB 10.4.10
DEV : GLPI 9.4.5 Debian 10 Apache 2.4.38 PHP 7.3.14 MariaDB 10.3.22 + Plugins Prod
Offline
Bonjour
Ce topic peut être clos
Merci
Philippe
[resolu]
PROD : GLPI 9.2.1 - Debian 9 - Apache 2.4.10 - PHP 5.6.38-0+deb8u1 - MySQL 5.5.60-0+deb8u1
Plugins principaux : FormCreator, Behaviors, Accounts, FusionInventory, PurgeLogs, DataInjection, GenericObjects
TEST : GLPI 9.4.5 Windows 10 xampp Apache 2.4.41 PHP 7.3.12 MariaDB 10.4.10
DEV : GLPI 9.4.5 Debian 10 Apache 2.4.38 PHP 7.3.14 MariaDB 10.3.22 + Plugins Prod
Offline
Pages: 1
Topic closed