2) J'ai "forcé" la valeur de l'app_token avec un mot quelconque que j'ai remis tel quel dans app_token -> ["ERROR_WRONG_APP_TOKEN_PARAMETER","le paramètre app_token semble incorrect....
-> Ou et comment est recherché l'app_token ? pourquoi le spécifier si sans cela fonctionne ?
]]>Voici mon script php
<html>
<head>
<title>Test PHP</title>
</head>
<body>
<?php
// Roue dentee > Personnalisation > Jeton d'API
$user_token = "e2H3SUxysx5p9d5a1EZdCoOX08uzHGpjFoyFSISS";
// Configuration > Generale > API > click Nom api client > app_token
$app_token = "blhvpXoapKH4TTLwakevDicMom980usT8YIWx3VX";
$api_url="http://localhost/glpi/apirest.php";
$ch = curl_init();
$url=$api_url . "/initSession?Content-Type=%20application/json&app_token=".$app_token."&user_token=".$user_token;
echo("<br> URL <br/>".$url);
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_HTTPGET, 1);
if ( isset ( $_SERVER['HTTP_X_FORWARDED_FOR'] ) )
{
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
elseif ( isset ( $_SERVER['HTTP_CLIENT_IP'] ) )
{
$ip = $_SERVER['HTTP_CLIENT_IP'];
}
else
{
$ip = $_SERVER['REMOTE_ADDR'];
}
echo "<br>Adresse ip : $ip <br/>";
$json = curl_exec($ch);
echo "<br>";
print_r($json);
echo "<br/>";
curl_close ($ch);
$obj = json_decode($json,true);
$sess_token = $obj['session_token'];
$headers =array(
'Content-Type: application/json',
'App-Token: ' .$app_token,
'Session-Token: '.$sess_token
);
echo("<br> Suite <br/>".$sess_token);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Session-Token: '.$json['session_token'])
);
curl_setopt($ch, CURLOPT_URL, "http://localhost/glpi/apirest.php/Computer/");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"input": {
"name": "test_creation_ordi_api",
"serial": "xxxxxx"
}}'
);
$request_result = curl_exec($ch);
?>
</body>
</html>
je n'ai pas le meme comportement en localhost que sur mon instance de dev : -> Undefined Index... alors que instance de dev : pas de retour session...
Localhost -> wamp,
Dev -> IIS
voici le resultat en localhost
URL
http://localhost/glpi/apirest.php/initSession?Content-Type=%20application/json&app_token=blhvpXoapKH4TTLwakevDicMom980usT8YIWx3VX&user_token=e2H3SUxysx5p9d5a1EZdCoOX08uzHGpjFoyFSISS
Adresse ip : ::1
["ERROR_WRONG_APP_TOKEN_PARAMETER","le paramètre app_token semble incorrect; Afficher la documentation dans votre navigateur à http://localhost/glpi/apirest.php/#ERROR_WRONG_APP_TOKEN_PARAMETER"]
Notice: Undefined index: session_token in C:\wamp64\www\glpi\API\test.php on line 47
Suite
Warning: Illegal string offset 'session_token' in C:\wamp64\www\glpi\API\test.php on line 59
Warning: curl_setopt(): supplied resource is not a valid cURL handle resource in C:\wamp64\www\glpi\API\test.php on line 59
Warning: curl_setopt(): supplied resource is not a valid cURL handle resource in C:\wamp64\www\glpi\API\test.php on line 62
Warning: curl_setopt(): supplied resource is not a valid cURL handle resource in C:\wamp64\www\glpi\API\test.php on line 63
Warning: curl_setopt(): supplied resource is not a valid cURL handle resource in C:\wamp64\www\glpi\API\test.php on line 64
Warning: curl_exec(): supplied resource is not a valid cURL handle resource in C:\wamp64\www\glpi\API\test.php on line 69
]]>j'ai placé le script (ici test.php) dans un repertoire 'API' histoire de ne pas marcher sur les plate-bandes de GLPI...
dans ce script, rien de particulier, pas de parametrage "GLPI"...
Extrait :
<html>
<head>
<title>Test PHP</title>
</head>
<body>
<?php
// Roue dentee > Personnalisation > Jeton d'API
$user_token = "YYYYYYYYYYYYYY";
// Configuration > Generale > API > click Nom api client > app_token
$app_token = "XXXXXXXXXXXX";
$api_url=.....
et donc je l'appelle via :
http://.....api/test.php
URL :
.../apirest.php/initSession?Content-Type=%20application/json&app_token=XXXXXXXXX&user_token=YYYYYYYYYYYY
Adresse ip : [AdresseIP de mon poste], adresse que je viens de ressaisir dans conf/API au niveau Client API...["ERROR_WRONG_APP_TOKEN_PARAMETER","le paramètre app_token semble incorrect....
L'url .../apirest.php/#errors est fonctionnelle et affiche bien les erreurs possibles...
Si je fais un copie/collé de l'url avec apptoken et user_token, j'ai bien un retour de session token...(onglet supplémentaire dans le navigateur)
Je me pose une question :
Au niveau definition client : ce "nom" doit il correspondre à quelque chose passé en parametre ? ou on peut spécifier un nom 'parlant' quelconque ? le principal etant l'adresse IP ?
["ERROR_WRONG_APP_TOKEN_PARAMETER","le paramètre app_token semble incorrect....
L'url .../apirest.php/#errors est fonctionnelle et affiche bien les erreurs possibles...
Si je fais un copie/collé de l'url avec apptoken et user_token, j'ai bien un retour de session token...(onglet supplémentaire dans le navigateur)
]]>le script que j'ai écrit est lancé via navigateur.
j'ai integré lignes pour recupérer l'adresse ip lors de son execution.
Cette adresse ip est bien définie dans l'API
dans le repertoire files/log, api.log
2019-10-30 08:38:42 [@serveur]
Enpoint 'initSession' called by [adresse ip de mon poste]
et dans "Configuration/API" pour l'[adresse ip du poste], je retrouve bien l'app token XXXXXXXXX definie dans le script ...
]]>attention si vous lancez à partir d'un navigateur sur votre poste, ce n'est pas forcément la même IP que le script sur votre serveur. ça peut expliquer.
]]>j'essaie de mettre en place l'api
GLPI 9.4.3
API est activée et fonctionnelle : j'ai bien la documentation qui s'affiche.
J'ai essayé via Powershell -> KO
J'essaie via php -> Ko aussi, mais... j'explique plus bas.
en php
j'ai repris le script de La denrée
Extrait du script :
$api_url = ".....apirest.php";
$ch = curl_init();
$url=$api_url . "/initSession?Content-Type=%20application/json&app_token=".$app_token."&user_token=".$user_token;
echo("<br> URL <br/>".$url);
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$json = curl_exec($ch);
echo "<br>Json :". $json."<br/>";
curl_close ($ch);
lors de l'execution : voici le resultat :
initSession?Content-Type=%20application/json&app_token=XXXXXXXX&user_token=YYYYYYYYY
Json :["ERROR_WRONG_APP_TOKEN_PARAMETER",
Or si je reprends la valeur URL publiée avec l'echo
(.....apirest.php/initSession?Content-Type=%20application/json&app_token=XXXXXXXX&user_token=YYYYYYYYY) et que je lance une nouvelle page : j'ai bien un retour json avec la valeur de la session
donc je me dis que l'api est bien fonctionnelle... mais pourquoi alors l'erreur de wrong app token ???
Qu'ai je oublié ?