|
Iniciado por SEB14, abr., 15 2024 10:40 AM - 6 respostas |
| |
| | | |
|
| |
Membro registado 3 mensagems |
|
Publicado em abril, 15 2024 - 10:40 AM |
Bonjour à tous,
Je commence à utiliser les API d'un site externe. Sur une plateforme, je suis chargé de créer un dossier pour lequel il m'est demandé de spécifier le nom du dossier en paramètre ; jusqu'ici, rien qui sorte de l'ordinaire ni de particulièrement alarmant. Les requêtes doivent être transmises via HTTPS et toute donnée envoyée doit être formatée en JSON (type de contenu : application/json). Chaque requête doit également inclure des en-têtes spécifiques, notamment « Content-Type: application/json » et « API-Key » suivi de la clé d’API correspondante.
Voici les informations que me donne le site : curl --request POST \ --url https://************/v3/contacts/folders \ --header 'accept: application/json' \ --header 'api-key: maclefsxxxxxxxxxxxxxxxxxxxxx' \ --header 'content-type: application/json' \ --data ' { "name": "Test de dossier" } ' Voici mon code :
Procedure Maprocedure(maclefs est une chaîne, sCustomerName est une chaîne) req2 est une httpRequête sMarequette2 est une chaîne sheader est une chaîne sheader = "Content-Type: application/json" + RC +"accept: application/json" + RC + "api-key: " + maclefs scontenu est une chaîne scontenu = "{""name" + """:" + """" + sCustomerName+ """" + "}" req2..Méthode = httpPost req2.Entête["header"] = sheader req2.Contenu = scontenu sMarequette2 = "https://************/v3/contacts/folders " req2.URL = sMarequette2 cMaRéponse2 est un httpRéponse = HTTPEnvoie(req2) Lejson2 est un JSON Lejson2 = cMaRéponse2..Contenu
Je transmets le nom de mon dossier via le paramètre sCustomerName et ma clé via le paramètre de la procédure. Cependant, je rencontre systématiquement une erreur 400. { "code":"invalid_parameter", "message":"Folder name is invalid" }
Je tiens à préciser que la clé est correcte et fonctionne bien, puisque toutes mes requêtes HTTP en GET sont correctement traitées.
Je comprends bien que mes paramètres ne sont pas transmis correctement. Cependant, je dois avouer que je suis à court d'idées. J'ai essayé de substituer la chaîne par du JSON dans le contenu, et j'ai également testé avec un buffer, mais rien ne semble fonctionner. J'ai aussi vérifié les valeurs de req2 et de scontenu lors du débogage. Je vous remercie par avance pour le temps que vous consacrerez à ma problématique. Cordialement, Sébastien |
| |
| |
| | | |
|
| | |
| |
Membro registado 3.908 mensagems Popularité : +227 (347 votes) |
|
Publicado em abril, 15 2024 - 11:08 AM |
Bonjour, Tout est expliqué dans la doc : Le propriété Entête est un tableau associatif dont la clé correspond au "titre" des différentes parties de l'entête e.g. content-type. Il faut donc écrite ;
oMaRequete.Entête["Content-Type] = "application/JSON" //etc
-- Il y a peut être plus simple, mais, ça tourne Quand tout a échoué utilise l'option RTFMMensagem modificada, abril, 15 2024 - 11:10 AM |
| |
| |
| | | |
|
| | |
| |
Membro registado 3 mensagems |
|
Publicado em abril, 15 2024 - 11:28 AM |
Bonjour Je ne pense pas avoir de problème avec l'entête Mon code n'est certainement pas optimal mais cette procédure fonctionne très bien pour récupérer les contacts déjà existant d'un dossier
MAPROCEDURE2 (maclefs est une chaîne) req2 est une httpRequête sMarequette2 est une chaîne Données est un Variant sheader est une chaîne sheader = "Content-Type: application/json" + RC + "api-key: " + maclefs req2..Méthode = httpGet req2.Entête["header"] = sheader sMarequette2 = "https://***********/v3/contacts?limit=50&offset=0&sort=desc" req2.URL = sMarequette2 cMaRéponse2 est un httpRéponse = HTTPEnvoie(req2) Lejson2 est un JSON Lejson2 = cMaRéponse2..Contenu
Je reçois bien ces contact dans le json sans problème. Ici c'est de passer dans ma requette post le nom du dossier, je ne sais pas le faire A moins que je ne vous ai pas compris dans votre explication, j'en suis désolé. Sébastien. |
| |
| |
| | | |
|
| | |
| |
Membro registado 3.908 mensagems Popularité : +227 (347 votes) |
|
Publicado em abril, 15 2024 - 12:08 PM |
Dans le curl, on voit que la partie data est un JSON. Il faut donc écrire :
oDonnées est un JSON
oDonnées.name = "Test de dossier"
oMaRequête.contenu=oDonnées
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Membro registado 398 mensagems Popularité : +13 (13 votes) |
|
Publicado em abril, 15 2024 - 12:24 PM |
Bonjour,
Vous pouvez utiliser un type JSON aussi pour spécifier le contenu, cela sera plus simple que de le construire par une chaîne (où vous n'échappez pas les guillemets, d'ailleurs).
Et je rejoins Voroltinquo, si req2.Entête["header"] fonctionne (ça paraît surprenant mais pourquoi pas), ce serait plus propre et plus maintenable que chaque en-tête ait sa propre ligne.
Procedure Maprocedure(maclefs est une chaîne, sCustomerName est une chaîne)
req est une httpRequête req.URL = "https://************/v3/contacts/folders" req.Methode = httpPost
req.ContentType = typeMimeJSON req.Entête["Accept"] = typeMimeJSON req.Entête["api-key"] = maclefs
jContenu est un JSON jContenu.name = sCustomerName
req.Contenu = jContenu
res est un httpRéponse = req.Envoie() jRéponse est un JSON
SI JSONValide(res..contenu) ALORS jRéponse = res..Contenu FIN
Trace(jRéponse)
Edit : Voroltinquo m'a battu Mensagem modificada, abril, 15 2024 - 12:25 PM |
| |
| |
| | | |
|
| | |
| |
Membro registado 3.908 mensagems Popularité : +227 (347 votes) |
|
Publicado em abril, 15 2024 - 1:04 PM |
bchanudet a écrit :
Edit : Voroltinquo m'a battu
Concernant le type JSON je suppose.
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Membro registado 3 mensagems |
|
Publicado em abril, 15 2024 - 1:29 PM |
Bonjour Super je vous remercie sincèrement cela fonctionne. Je me suis donc noté des choses à éclaircir pour moi. Belle journée à vous deux. Seb |
| |
| |
| | | |
|
| | | | |
| | |
|