You are not logged in.

Announcement

 Téléchargez la dernière version stable de GLPI      -     Et vous, que pouvez vous faire pour le projet GLPI ? :  Contribuer
 Download last stable version of GLPI                      -     What can you do for GLPI ? :  Contribute

#1 2020-03-31 23:26:10

Oggy One
Member
From: Tours - France
Registered: 2011-06-22
Posts: 68

[resolu] Pb avec POST et les tableaux

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

#2 2020-04-01 10:58:57

Oggy One
Member
From: Tours - France
Registered: 2011-06-22
Posts: 68

Re: [resolu] Pb avec POST et les tableaux

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

#3 2020-04-05 21:30:00

ecollet
Member
Registered: 2019-07-29
Posts: 21

Re: [resolu] Pb avec POST et les tableaux

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

#4 2020-04-08 18:20:03

Oggy One
Member
From: Tours - France
Registered: 2011-06-22
Posts: 68

Re: [resolu] Pb avec POST et les tableaux

Merci pour la réponse ! wink


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

#5 2020-04-16 15:54:54

Oggy One
Member
From: Tours - France
Registered: 2011-06-22
Posts: 68

Re: [resolu] Pb avec POST et les tableaux

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

Board footer

Powered by FluxBB