Accès GLPI à partir d'une application externe (PHP)
A ce jour (GLPI 0.83), la méthode la plus simple est de passer par le plugin WebServices (http://plugins.glpi-project.org/spip.php?article93), par XMLRPC (SOAP trop spécifique, REST pas assez stable).
1 Installation
1.1 Sur le serveur GLPI
1.2 Sur le serveur de l'application cliente (testé sur CentOS, dépôt Remi Collet pour une version PHP à jour)
2 Utilisation
2.1 Autorisation d'accès à GLPI
2.2 Test et validation de l'installation de xmlrpc
2.3 Code PHP
3 Documentation
Installation
Sur le serveur GLPI
Si ça n'a pas déjà été fait, installer le plugin WebServices Le_Plugin_WebServices
Utilisation
Autorisation d'accès à GLPI
Pour autoriser le serveur client à se connecter sur le serveur GLPI, aller dans Plugins / WebService dans l'interface GLPI.
Par le "+" de la barre d'outils, déclarer une nouvelle connexion autorisant l'adresse IP du serveur client (dans "Plage d'adresses IPv4", mettre la même adresse 2 fois s'il est le seul àse connecter à l'avenir).
Si on oublie cette autorisation, le test ci-dessous indiquera "Accès refusé".
Test et validation de l'installation de xmlrpc
copier /var/www/glpi/plugins/webservices/scripts/testxmlrpc.php du serveur GLPI vers le serveur client.
Exemples d'utilisation de testxmlrpc.php :
php testxmlrpc.php --help
php testxmlrpc.php --method=glpi.doLogin --login_name=User --login_password=pass
On obtient en retour un tableau de valeur, la plus importante étant "session" réutilisée pour les appels suivants :
- Calling 'glpi.doLogin' on http://localhost//glpi/plugins/webservices/xmlrpc.php
- Response: Array ( [id] => 9 [name] => User [realname] => [firstname] => [session] => bu9efhcupbvlsvuk2bto52q9p4 )
On récupère ici, par exemple, un tableau avec tous les types de tickets déclarés dans GLPI :
php testxmlrpc.php --session=bu9efhcupbvlsvuk2bto52q9p4 --method=glpi.listDropdownValues --dropdown=TicketType
Code PHP
Dans une page PHP, on appelle directement les fonctions GLPI.
On s'assure d'abord que le module xmlrpc est activé dans PHP :
if (!extension_loaded("xmlrpc")) {
die("Extension xmlrpc not loaded\n");
}
Equivalent du login réalisé ci-dessus avec testxmlrpc.php :
function login() {
global $glpi_user, $glpi_pass, $ws_user, $ws_pass;
$args['method'] = "glpi.doLogin";
$args['login_name'] = $glpi_user;
$args['login_password'] = $glpi_pass;
if (isset($ws_user)) {
$args['username'] = $ws_user;
}
if (isset($ws_pass)) {
$args['password'] = $ws_pass;
}
if ($result = call_glpi($args)) {
return $result['session'];
}
}
La fonction call_glpi() a cette forme :
function call_glpi($args) {
global $host,$url,$deflate,$base64;
// To avoid IDE warning
$http_response_header = ;
echo "+ Calling {$args['method']} on http://$host/$url\n";
if (isset($args['session'])) {
$url_session = $url.'?session='.$args['session'];
} else {
$url_session = $url;
}
$header = "Content-Type: text/xml";
if (isset($deflate)) {
$header .= "\nAccept-Encoding: deflate";
}
if (isset($base64)) {
$args['base64'] = $base64;
}
$request = xmlrpc_encode_request($args['method'], $args);
$context = stream_context_create(array('http' => array('method' => "POST",
'header' => $header,
'content' => $request)));
$file = file_get_contents("http://$host/$url_session", false, $context);
if (!$file) {
die("+ No response\n");
}
if (in_array('Content-Encoding: deflate', $http_response_header)) {
$lenc = strlen($file);
echo "+ Compressed response : $lenc\n";
$file = gzuncompress($file);
$lend = strlen($file);
echo "+ Uncompressed response : $lend (".round(100.0*$lenc/$lend)."%)\n";
}
$response = xmlrpc_decode($file);
if (!is_array($response)) {
echo $file;
die ("+ Bad response\n");
}
if (xmlrpc_is_fault($response)) {
echo("xmlrpc error(".$response['faultCode']."): ".$response['faultString']."\n");
} else {
return $response;
}
}
Les variables globales reprises en début de fonction sont bien sûr à remplir avec des valeurs adéquates.
Documentation
Wiki développeurs WebServices : https://forge.indepnet.net/projects/webservices/wiki/
Accès GLPI à partir d'une application externe (PHP)
URL : http://wiki.kogite.fr/index.php/Acc%C3%A8s_GLPI_%C3%A0_partir_d'une_application_externe_(PHP)