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 2018-03-28 15:01:52

bastien.prost
Member
Registered: 2016-07-22
Posts: 17

Import d'ordinateur via l'API

Bonjour,

Je souhaite importer mes ordinateurs dans GLPI à l'aide de l'API REST. Je rencontre un problème avec ma variable $sess_token qui reste désespérément vide...
Voici le début de mon script :

<?php
echo 'Version PHP courante : ' . phpversion();
//initialisation des variables

$nomcsv = $_GET['nom'];
$mycsvfile="/var/tmp/". $nomcsv;
echo " <br/>chemin : ". $mycsvfile ."<br/>";
$api_url="http://mon_serveur_GLPI/informatique/apirest.php";
$user_token="XXXXXX";
$app_token ="XXXXXX";

//initialisation api glpi
$ch = curl_init();
$url=$api_url . "/initSession?Content-Type=%20application/json&app_token=".$app_token ."&user_token=".$user_token;
// ligne suivante pour debug à commenter en prod;
echo "<br/>url authentification : " . $url . "<br/>" ;

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$json = curl_exec($ch);
curl_close ($ch);
$obj = json_decode($json, true);
// ligne suivante pour debug à commenter en prod;
print_r($obj);

$sess_token = $obj['session_token'];

// ligne suivante pour debug à commenter en prod;
echo " <br/>session token : ". $sess_token ."<br/>";

$headers = array(
('Content-Type: application/json'),
('App-Token: ' . $app_token),
('Session-Token: '. $sess_token)  
);

// ligne suivante pour debug à commenter en prod;
print_r($headers);

Pouvez-vous m'aider à trouver mon erreur?

D'avance merci,

Bastien

Last edited by bastien.prost (2018-03-28 15:05:40)

Offline

#2 2018-03-28 15:37:22

LaDenrée
HELPER
Registered: 2012-11-19
Posts: 6,146

Re: Import d'ordinateur via l'API

vous n'avez pas mis votre glpi dans un dossier glpi ?

$api_url="http://mon_serveur_GLPI/informatique/apirest.php";   
j'aurais pensé :  $api_url="http://mon_serveur_GLPI/informatique/glpi/apirest.php";

quelle version GLPI ?
question bête :  avez vous activé l'api ?
avez vous autorisé l'IP ?

si dans un navigateur vous saisissez l'url http://mon_serveur_GLPI/informatique/glpi/apirest.php avez vous une réponse ?


Trouver la panne avant de réparer...
GLPI10.0.10 (ubuntu 22.04 PHP8.1  Mariadb10.6 ) plugins : comportements 2.7.2 reports 1.16.0 formcreator 2.13.8, datainjection 2.13.4 fields 1.21.6

Offline

#3 2018-03-28 15:48:22

bastien.prost
Member
Registered: 2016-07-22
Posts: 17

Re: Import d'ordinateur via l'API

Bonjour,
Non GLPI n'est pas dans un dossier GLPI.
Je suis en version 9.2.2, désolé j'ai oublié de le préciser.
J'ai activé l'API et j'ai autorisé l'ip de mon poste de test.
Si je vais sur http://mon_serveur_GLPI/informatique/apirest.php j'arrive bien sur la documentation de l'API
Si je vais sur http://mon_serveur_GLPI/informatique/apirest.php/initSession?Content-Type=%20application/json&app_token=XXXX&user_token=XXXX il me renvoie bien mon session_token

Merci pour votre aide.

Bastien

Last edited by bastien.prost (2018-03-28 15:48:56)

Offline

#4 2018-03-28 15:55:36

LaDenrée
HELPER
Registered: 2012-11-19
Posts: 6,146

Re: Import d'ordinateur via l'API

votre navigateur est sur votre poste mais votre script php est sur un serveur donc avec une autre IP; avez vous autorisé cette IP ( ou 127.0.0.1 si votre php est  sur le même serveur  que glpi)


Trouver la panne avant de réparer...
GLPI10.0.10 (ubuntu 22.04 PHP8.1  Mariadb10.6 ) plugins : comportements 2.7.2 reports 1.16.0 formcreator 2.13.8, datainjection 2.13.4 fields 1.21.6

Offline

#5 2018-03-28 16:19:42

bastien.prost
Member
Registered: 2016-07-22
Posts: 17

Re: Import d'ordinateur via l'API

Mon script est sur le même serveur que GLPI.
J'avais laissé la règle par défaut "Full access from localhost" donc le serveur était autorisé par contre je n'avais pas généré l'app_token pour cette règle. Je viens de le faire et j'ai modifié celui-ci dans mon script mais j'ai toujours le même comportement.

Offline

#6 2018-03-28 16:22:24

LaDenrée
HELPER
Registered: 2012-11-19
Posts: 6,146

Re: Import d'ordinateur via l'API

si vous êtes sur le même serveur  votre url doit être "localhost/informatique/apirest.php";


Trouver la panne avant de réparer...
GLPI10.0.10 (ubuntu 22.04 PHP8.1  Mariadb10.6 ) plugins : comportements 2.7.2 reports 1.16.0 formcreator 2.13.8, datainjection 2.13.4 fields 1.21.6

Offline

#7 2018-03-28 16:35:56

bastien.prost
Member
Registered: 2016-07-22
Posts: 17

Re: Import d'ordinateur via l'API

Le script est sur mon serveur GLPI et j'y accède à partir d'un poste de test.
Je viens de modifier l'url dans le script afin de mettre localhost/informatique/apirest.php, malheureusement ma variable sess_token est toujours vide.

Offline

#8 2018-03-28 16:42:29

LaDenrée
HELPER
Registered: 2012-11-19
Posts: 6,146

Re: Import d'ordinateur via l'API

essayez un print_r($json); qui va peut être renvoyer un indice avec un message d'erreur.

je sèche, j'ai exactement le même code ( sauf faute de fraape que je n'aurai pas vue) et ça marche chez moi


Trouver la panne avant de réparer...
GLPI10.0.10 (ubuntu 22.04 PHP8.1  Mariadb10.6 ) plugins : comportements 2.7.2 reports 1.16.0 formcreator 2.13.8, datainjection 2.13.4 fields 1.21.6

Offline

#9 2018-03-28 16:58:38

bastien.prost
Member
Registered: 2016-07-22
Posts: 17

Re: Import d'ordinateur via l'API

Je me suis appuyé sur un script à vous pour faire le mien donc effectivement il ne doit pas y avoir beaucoup de différences smile
Lorsque j'ajoute  print_r($json); je suis redirigé vers la page d'accueil de mon glpi.

Offline

#10 2018-03-28 17:07:26

LaDenrée
HELPER
Registered: 2012-11-19
Posts: 6,146

Re: Import d'ordinateur via l'API

????

 $api_url="localhost/glpi/apirest.php";
$app_token="apptockenQui correspondAMonIP";
$user_token="MonJetonApi";

echo "session token<br/>";
$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);
print_r($json);
$obj = json_decode($json,true);
$sess_token = $obj[session_token];
echo $sess_token;
die($url);

Trouver la panne avant de réparer...
GLPI10.0.10 (ubuntu 22.04 PHP8.1  Mariadb10.6 ) plugins : comportements 2.7.2 reports 1.16.0 formcreator 2.13.8, datainjection 2.13.4 fields 1.21.6

Offline

#11 2018-03-28 17:28:36

bastien.prost
Member
Registered: 2016-07-22
Posts: 17

Re: Import d'ordinateur via l'API

Et bien je ne comprend vraiment pas! J'ai repris ce que vous avez mis dans votre dernier post afin d'être sûr de ne pas avoir d'erreur et j'ai le même comportement... Je suis redirigé vers la page d'accueil de mon GLPI.
Dès que je commente la ligne print_r($json); je n'ai plus de redirection.

Offline

#12 2018-03-28 18:49:12

bastien.prost
Member
Registered: 2016-07-22
Posts: 17

Re: Import d'ordinateur via l'API

Finalement votre première remarque était la bonne!
Notre GLPI est bien dans un dossier GLPI... Nous avons ensuite mis en place une redirection.
En remplaçant l'url par http://localhost/glpi/apirest.php cela fonctionne.

Merci pour le coup de main!

Offline

Board footer

Powered by FluxBB