IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lazarus Pascal Discussion :

VTiger et API REST Create [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 87
    Points : 61
    Points
    61
    Par défaut VTiger et API REST Create
    Bonjour,

    je sais qu'il y a des déjà beaucoup d'aide sur les API REST et Lazarus mais je n'arrive pas à faire un POST avec l'api Create disponible sur le logiciel VTiger... Cette Api permet de créer un "enregistrement" dans un module défini.

    J'arrive à le faire via l'outil Postman, j'ajoute bien une tâche dans vtiger mais impossible avec lazarus....

    Nom : postman.png
Affichages : 273
Taille : 51,2 Ko

    l'API Create de Vtiger est expliquée ici :

    Nom : Create_VTiger.png
Affichages : 244
Taille : 32,5 Ko

    Voici le code que j'ai tenté sous lazarus mais sans succès...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    procedure TFrmMain.TlbTestClick(Sender: TObject);
    var
        Client: TFPHttpClient;
        ApiCreate : String;
     
    begin
         ApiCreate := 'https://gelis.od2.vtiger.com/restapi/v1/vtiger/default/create?elementType=Calendar?element=';
         Client := TFPHttpClient.Create(nil);
         Client.AddHeader('User-Agent','Mozilla/5.0 (compatible; fpweb)');
         Client.AddHeader('Content-Type','application/json; charset=UTF-8');
         Client.AddHeader('Accept', 'application/json');
     
         Client.AllowRedirect := true;
         Client.UserName:='XXXXXXXX';
         Client.Password:='XXXXXX';
     
         //Dans le TMemo (MemRes) j'ai les données JSON :
         //{"subject": "Test Ecriture API","assigned_user_id": "19x6",
         //"date_start": "2021-05-22","time_end": "","time_start": "07:00:00",
         //"due_date": "2021-05-22","recurringtype": "","parent_id": "5x23628","contact_id": "",
         //"taskstatus": "Completed","eventstatus": "","taskpriority": "High",
         //"sendnotification": "0","activitytype": "Task","duration_hours": "2","visibility": "Private",
         //"duration_minutes": "0","location": "","notime": "0","created_user_id": "19x6",
         //"source": "CRM","starred": "0","tags": "","record_currency_id": "","record_conversion_rate": "",
         //"reminder_time": "","description": "","isclosed": "1","record_currency_symbol": null}
     
         try
            try
               client.Post(APICREATE+MemRes.Lines.Text);
               showmessage('Response Code is ' + inttostr(Client.ResponseStatusCode) + ' - ' + client.ResponseStatusText);   // better be 200
            except on E:Exception do
                    showmessage('Something bad happened : ' + E.Message);
            end;
        finally
            Client.RequestBody.Free;
            Client.Free;
        end;
    je ne sais pas comment passer les paramètres "elementType" et "element", je pense que le problème vient de là mais je ne suis absolument pas certain...

    Merci

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 688
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 688
    Points : 13 117
    Points
    13 117
    Par défaut
    Dans Postman, tu as la partie "Authorization" définie que tu ne fais pas dans ton code.

    D'après la doc, une première requête est nécessaire pour récupérer le token d'accès. Puis une deuxième pour l'ID de session (avec en paramètre ce token + l'ACCESSKEY chiffrés en md5) et seulement là tu es prêt à dialoguer.

    Ne pas oublier non plus d'encoder la donnée.

    Enfin en https, il doit manquer un SSL handler.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 87
    Points : 61
    Points
    61
    Par défaut
    Je vous remercie pour votre réponse

    Cette partie "Authorization" je pensais que ce morceau de code réglait le problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
         Client.UserName:='XXXXXXXX';
         Client.Password:='XXXXXX';
    En fait, j'arrive à lire sans souci en utilisant ces deux lignes pour me connecter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    http := TFPHTTPClient.Create(nil);
         try
            // Connection à l'API REST
            http.UserName:='XXXXXXXXXXXX';
            http.Password:='XXXXXXXXXXXXXX';
     
     
            //Récupération du nombre de comptes
            responseData := http.get(LireSQLCountVTiger(table));   
    ........
    et la récupération des données fonctionne, donc je me suis dit que la partie authentification était bonne.

    Quand vous parlez d'encodage des données, c'est en JSON ? Ou c'est un autre encodage ? Je suis désolé je ne suis vraiment pas bon sur ce sujet et je suis vraiment bloqué

    J'ai essayé d'adapter ce code http://melawanlupacode.blogspot.com/...w-lazarus.html mais je me rend compte dans l'exemple qu'il n'y a pas d'authentification du tout donc il doit certainement manquer autre chose...

    Merci

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 87
    Points : 61
    Points
    61
    Par défaut
    en fait j'ai l'impression que la partie "element" de l'API n'est pas traitée :

    Nom : element.png
Affichages : 203
Taille : 1,2 Ko

  5. #5
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 688
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 688
    Points : 13 117
    Points
    13 117
    Par défaut
    Citation Envoyé par Manusm Voir le message
    En fait, j'arrive à lire sans souci en utilisant ces deux lignes pour me connecter
    Et bien ça ne devrait pas sinon le jeton n'a aucun intérêt. Son but étant de remplacer le couple "utilisateur/mot de passe" par une autre méthode d'authentification à durée limitée (token avec expireTime).

    Citation Envoyé par Manusm Voir le message
    en fait j'ai l'impression que la partie "element" de l'API n'est pas traitée
    Je n'avais pas fait attention mais la chaîne est fausse : 'https://gelis.od2.vtiger.com/restapi/v1/vtiger/default/create?elementType=Calendar&element='.

    Mais ça n'empêche que le JSON doit être encoder. Tous les caractères non ASCII (plus quelques autres) doivent être convertis en leur représentation héxa (ex. espace = %20).

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 87
    Points : 61
    Points
    61
    Par défaut
    Ok, oui exact j'avais changé le caractère par un & et je viens de faire l'encodage

    avez-vous une idée du code pour avoir la bonne authentification ? quelles méthodes dois-je appeler sur l'objet TFpHttpClient ?

    Encore merci

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 87
    Points : 61
    Points
    61
    Par défaut
    Bon j'ai enfin réussi

    il me manquait juste au final le bon encodage de la chaine de caractères, j'ai utilisé la fonction "EncodeUrl" de Synapse et tout fonctionne.

    Le UserName et Password suffisent pour se connecter.

    Attention, quand je parle de password, c'est la clé d'accès fournie sur le profil de l'utilisateur dans VTiger, donc je pense que vous parliez de cette clé et non du mot de passe standard de l'utilisateur pour se connecter sur son compte.

    Merci beaucoup AndNotor vous m'avez vraiment bien aidé

  8. #8
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 688
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 688
    Points : 13 117
    Points
    13 117
    Par défaut
    C'est au site de limiter les endpoints accessibles/utilisables et par quelle méthode. Sans être un pro des web services, le principe vtiger me surprend un peu.

    Pense aussi que les url sont limitées en taille. Passer le JSON dans le body serait plus judicieux.

  9. #9
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 87
    Points : 61
    Points
    61
    Par défaut
    ok merci, je vais regarder ça

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. API REST de Google
    Par stade13 dans le forum APIs Google
    Réponses: 3
    Dernier message: 29/10/2011, 11h02
  2. [XML] API REST : comment ca marche ?
    Par chuckichucki dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 18/01/2011, 13h33
  3. [Authentification] API REstful PHP
    Par yoshï dans le forum REST
    Réponses: 1
    Dernier message: 22/07/2008, 09h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo