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-06-22 00:06:32

iwizzwold
Member
Registered: 2020-06-21
Posts: 5

Ticket ne se crée pas sur glpi via rest api

Bonjour,
Nous avons un problème depuis 1 semaine,
Notre but étant de crée un ticket en passant pas l'api REST,
sur note serveur de test, la création de ticket fonctionne et renvoie bien "Objet déplacé" & {"id":"xxx","name":"xxx" ...}
Tant dis que sur notre serveur de production, le ticket ne se crée simplement pas (curl affiche "Objet déplacé" et plus rien.)
Nous avons vérifié les tokens, si l'api été bien activé sur glpi etc... Mais ça ne fonctionne toujours pas.

Peut-être est-ce une paramètre, une configuration sur glpi qui est érroné ?

Si vous avez n'importe quelle questions/pistes je suis preneur.
Merci !

Offline

#2 2020-06-22 09:32:26

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

Re: Ticket ne se crée pas sur glpi via rest api

avez vous tentez le debug en vérifiant la valeur  du json envoyé par le "cURLexec".

recupérez vous le session token ?
est ce que le compte utiisé a le droit de creer un ticket dans l'entité courante ?
avec vous des champs obligatoires qui ne sont pas dans les paramètres du json ?


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 2020-06-22 13:02:12

iwizzwold
Member
Registered: 2020-06-21
Posts: 5

Re: Ticket ne se crée pas sur glpi via rest api

"avez vous tentez le debug en vérifiant la valeur  du json envoyé par le "cURLexec"."
     Non, comment pourrait-on faire cela ?

"recupérez vous le session token ?"
     Oui, le session token se recupére bien

"est ce que le compte utiisé a le droit de creer un ticket dans l'entité courante ?"
     Oui, le compte utiliser a bien les droits pour pouvoir crée des tickets

"avec vous des champs obligatoires qui ne sont pas dans les paramètres du json ?"
     Non, les champs obligatoires sont bien présent dans les paramètre du json

Merci pour vos réponses smile

Offline

#4 2020-06-23 10:55:41

iwizzwold
Member
Registered: 2020-06-21
Posts: 5

Re: Ticket ne se crée pas sur glpi via rest api

LaDenrée wrote:

avez vous tentez le debug en vérifiant la valeur  du json envoyé par le "cURLexec".

recupérez vous le session token ?
est ce que le compte utiisé a le droit de creer un ticket dans l'entité courante ?
avec vous des champs obligatoires qui ne sont pas dans les paramètres du json ?

Après plusieurs tests, nous avons réussi à récupéré ce que return le cURL,

Sur le glpi de prod : " Objet déplacé
Ce document peut être consulté ici "

Sur un glpi de test : " Objet déplacé
Ce document peut être consulté ici{"id":51547,"message":"Élément ajouté : Ticket d'appel automatique"} "

Voici le code qui nous permet de crée le ticket :

//fonction qui permet de créer un ticket sur glpi via le restapi
function creationTicket(){
    global $ini;
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json',
        'Session-Token: '.getSessionToken(),
        'App-token: '.$ini['app_token'])
        );
        
        curl_setopt($ch, CURLOPT_URL, $ini['urlAPI']."/ticket/");
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_VERBOSE, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, '{"input": {
            "name": "'.$ini['title'].'",
            "content": "'.$ini['desc'].'",
            "requesttypes_id": "3",
            "actiontime": "0",
            "itilcategories_id": "1",
            "type": "1",
            "status": "1"
            }}'
        );
        $res = curl_exec($ch));
        echo 'avant res';
        echo $res;
        echo 'après res';
        curl_close($ch);
        //deleteTicketUsersID();
        //creationTicketUser(getLastTicketID());
}

Une idée de pourquoi le ticket ne se crée pas ?

Offline

#5 2020-06-23 11:06:54

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

Re: Ticket ne se crée pas sur glpi via rest api

plutôt que un echo $res; essayez un

print_r($res) 

d'autre part il y a une parenthèses en trop sur le $res = curl_exec($ch));

je vous propose pour le debug d'insérer ce code à partir de cotre cURLexec

attention aussi à la casse : Ticket <> ticket 



$res = curl_exec($ch));
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        echo "<br/>*** httpcode***<br/>";
        print_r($httpcode);
        echo "<br/>**********json**********<br/>";   
        print_r($res);
        echo "<br/>********************<br/>";


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

#6 2020-06-24 14:44:18

iwizzwold
Member
Registered: 2020-06-21
Posts: 5

Re: Ticket ne se crée pas sur glpi via rest api

LaDenrée wrote:

plutôt que un echo $res; essayez un

print_r($res) 

d'autre part il y a une parenthèses en trop sur le $res = curl_exec($ch));

je vous propose pour le debug d'insérer ce code à partir de cotre cURLexec

attention aussi à la casse : Ticket <> ticket 



$res = curl_exec($ch));
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        echo "<br/>*** httpcode***<br/>";
        print_r($httpcode);
        echo "<br/>**********json**********<br/>";   
        print_r($res);
        echo "<br/>********************<br/>";

Merci pour votre réponse,

On va tester votre méthode tout à l'heure;
Pour le moment nous avons fait des logs/trace pour voir d'ou viendrait le problème pendant la phase de création du ticket et voici le résultat :

Sur notre glpi de test (ou ça fonctionne) :

[2020-06-24 12:17:52] apirest.php
[2020-06-24 12:17:53] apirest.class
[2020-06-24 12:17:53] api.class
[2020-06-24 12:17:53] apirest.class - call()
[2020-06-24 12:17:53] apirest.class - parseIncomingParams()
[2020-06-24 12:17:53] api.class - retrieveSession()
[2020-06-24 12:17:53] api.class - initApi()
[2020-06-24 12:17:53] api.class - initApi() // Load GLPI configuration
[2020-06-24 12:17:53] api.class - initApi() // construct api url
[2020-06-24 12:17:53] api.class - initApi() // check if api is enabled
[2020-06-24 12:17:53] api.class - initApi() // retrieve ip of client
[2020-06-24 12:17:53] api.class - initApi() // check ip access
[2020-06-24 12:17:53] api.class - initApi() // if $this->ipnum
[2020-06-24 12:17:53] api.class - initApi() // initApi() fin
[2020-06-24 12:17:53] apirest.class - manageUploadedFiles()
[2020-06-24 12:17:53] apirest.class - getItemtype()
[2020-06-24 12:17:53] ticket.class
[2020-06-24 12:17:53] apirest.class - getItemtype()
[2020-06-24 12:17:53] apirest.class - getId()
[2020-06-24 12:17:53] api.class - createItems()
[2020-06-24 12:17:53] api.class - checkAppToken()
[2020-06-24 12:17:53] api.class - checkSessionToken()
[2020-06-24 12:17:53] ticket.class - canCreateItem()
[2020-06-24 12:17:53] ticket.class - prepareInputForAdd()
[2020-06-24 12:17:53] ticket_ticket.class
[2020-06-24 12:17:53] ticket.class - post_addItem()
[2020-06-24 12:17:53] ticket_user.class
[2020-06-24 12:17:53] ticket_user.class - post_addItem()
[2020-06-24 12:17:53] ticket.class - updateDateMod()
[2020-06-24 12:17:54] ticket.class - manageValidationAdd()
[2020-06-24 12:17:54] ticket.class - getTicketTypeName()
[2020-06-24 12:17:54] ticket_ticket.class - getLinkedTicketsTo()
[2020-06-24 12:17:56] apirest.class - returnResponse()

Sur notre glpi de prod (ou ça ne fonctionne pas) :

[2020-06-23 18:48:56] apirest.php
[2020-06-23 18:48:56] apirest.class
[2020-06-23 18:48:56] api.class
[2020-06-23 18:48:56] apirest.class - call()
[2020-06-23 18:48:56] apirest.class - parseIncomingParams()
[2020-06-23 18:48:56] api.class - retrieveSession()
[2020-06-23 18:48:56] api.class - initApi()
[2020-06-23 18:48:56] api.class - initApi() // Load GLPI configuration

Et en regardant plus en profondeur, c'est cette ligne qui pose problème dans la fonction initApi() :

error_log('['.date('Y-m-d H:i:s')."] api.class - initApi() // Load GLPI configuration
", 3, DEBUG_LOG_FILE);

include_once (GLPI_ROOT . '/inc/includes.php'); // <-----------------------

error_log('['.date('Y-m-d H:i:s')."] api.class - initApi() // includeonce
", 3, DEBUG_LOG_FILE);

On a aussi mis des traces dans le fichier include.php, mais il n'est pas utilisé...

Last edited by iwizzwold (2020-06-24 15:30:32)

Offline

#7 2020-06-24 15:27:14

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

Re: Ticket ne se crée pas sur glpi via rest api

est ce que le fichier de log est défini et autorisé en écriture ?


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

#8 2020-06-24 15:32:55

iwizzwold
Member
Registered: 2020-06-21
Posts: 5

Re: Ticket ne se crée pas sur glpi via rest api

LaDenrée wrote:

est ce que le fichier de log est défini et autorisé en écriture ?

le fichier de log qu'on a crée est définit comme ça dans GLPI/apirest.php :

define('DEBUG_LOG_FILE', 'debug.log');

Offline

Board footer

Powered by FluxBB