[RESOLU] [API][Curl][Amadeus] Connexion a une api en php

Eléphanteau du PHP | 13 Messages

10 juin 2019, 19:01

Bonjour,

J'aimerais utiliser une api qui provient d'amadeus et pour se faire il me faut récupérer un token, j'ai donc fait ce bout de code :
$data = array(
    'grant_type' => 'client_credentials',
    'client_id' => '{Id_Key}',
    'client_secret' => '{Secret_Key}');
 
$curls = curl_init();
curl_setopt($curls, CURLOPT_URL, 'https://test.api.amadeus.com/v1/security/oauth2/token');
curl_setopt($curls, CURLOPT_POST, true);
curl_setopt($curls, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($curls, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
$token = curl_exec($curls);
curl_close($curls);
print_r($token);
Mais il ne me renvoie rien... J'ai donc essayé dans le cmd avec la commande curl suivante :

curl -X POST -H "Content-Type: application/x-www-form-urlencoded" https://test.api.amadeus.com/v1/security/oauth2/token -d "grant_type=client_credentials&client_id={Id_Key}&client_secret={Secret_Key}"

Et j'ai bien obtenu une réponse ! Je ne sais pas d'où cela pourrait venir, auriez-vous une idée ? Ais-je mal écris mon code php ?

Merci d'avance

Avatar du membre
Mammouth du PHP | 1609 Messages

10 juin 2019, 19:22

Salut, bah moi j'ai bien un retour : { "error":"invalid_client", "error_description": "Client credentials are invalid", "code": 38187, "title": "Invalid parameters" } 1
La lib curl n'est pas disponible sur ton serveur et la directive display_errors est à off ?
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 13 Messages

10 juin 2019, 19:27

Merci de ta réponse, non curl est bien activé, par contre je suis peut-être à off oui...
Je me rappelle plus comment mais j'avais réussi à avoir le même message que toi

Edit: Je viens de checker et la directive display error est bien activé

Avatar du membre
Mammouth du PHP | 1609 Messages

10 juin 2019, 19:36

Dans ce cas tu devrais avoir un retour, j'ai copié ton code et j'ai toujours ce retour. Si tu veux le même met un paramètre non valide. A voir avec un client_id et client_secret valide ce qui est retourné mais ça je peux pas regarder à moins que tu me les communiques en MP.
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 13 Messages

10 juin 2019, 19:39

Pourtant non aucun retour même avec le code que je t'ai partagé...

Edit: je t'ai envoyé un mp

Avatar du membre
Mammouth du PHP | 1609 Messages

10 juin 2019, 20:14

Juste comme ça, si tu testes ce code :
$data = array(
    'grant_type' => 'client_credentials',
    'client_id' => '{Id_Key}',
    'client_secret' => '{Secret_Key}');
 
$curls = curl_init();
curl_setopt($curls, CURLOPT_URL, 'https://test.api.amadeus.com/v1/security/oauth2/token');
curl_setopt($curls, CURLOPT_POST, true);
curl_setopt($curls, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($curls, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
$token = curl_exec($curls);
curl_close($curls);
echo 'FIN';
Ça affiche bien FIN ?
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 13 Messages

10 juin 2019, 20:39

Oui ça m'affiche bien "FIN" ^^

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

10 juin 2019, 20:44

Ma recommandation serait surtout de tester l'API avec une appli comme Postman :
https://www.getpostman.com/postman

ça permet déjà d'éliminer tous les problèmes quand la doc n'est pas claire.
Une fois que tu as la réponse attendue dans Postman, tu peux même demander un export de cette requête de PHP-Curl et hop tu peux intégrer ce code dans ton appli
Quand tout le reste a échoué, lisez le mode d'emploi...

Avatar du membre
Mammouth du PHP | 1609 Messages

10 juin 2019, 20:46

Salut @rthur, le problème c'est que le code fonctionne depuis mon serveur mais pas depuis celui de Flashneo. Une idée ?
Développeur web depuis + de 20 ans

Avatar du membre
Mammouth du PHP | 1609 Messages

10 juin 2019, 20:50

Ah tiens peut être ajouter un
curl_setopt($curls, CURLOPT_SSL_VERIFYPEER, false);
.

En tout cas c'est bizarre le retour du curl_exec devrait au moins afficher 1 si pas d'erreur ou 0 si erreur. A moins que pour le false rien ne soit affiché.

Tu peux tester un :
$token = curl_exec($curls);
if (!$token) {
  echo curl_error($curls);
}
else {
  var_dump($token);
}
Modifié en dernier par Saian le 10 juin 2019, 21:06, modifié 2 fois.
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 13 Messages

10 juin 2019, 20:52

Merci beaucoup Saian, je viens d'ajouter cette ligne et ça fonctionne !!!

Eléphanteau du PHP | 13 Messages

10 juin 2019, 20:53

Maintenant je me demande pourquoi j'ai besoin de cette ligne et pas toi ? ^^

Avatar du membre
Mammouth du PHP | 1609 Messages

10 juin 2019, 20:55

Ok tu devais donc avoir un retour false sur curl_exec et une erreur SSL.
Et le code que j'ai ajouté dans mon message précédent t'aurais permis d'avoir l'erreur. ;)

EDIT : surement une question de configuration de CURL.
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 13 Messages

10 juin 2019, 20:58

Surement alors, mais c'est étrange que je n'avais rien d'afficher nul part ^^ En tout cas merci beaucoup de ton aide, je vais enfin pouvoir commencé à tester cette API xD

Avatar du membre
Mammouth du PHP | 1609 Messages

10 juin 2019, 21:00

Bah en fait c'est que c'est une erreur curl qui ne lève pas d'erreur php et que tu aurais pu tester comme ceci dans ton code (le retour de curl_exec étant false si une erreur est survenue durant son exécution) :
$token = curl_exec($curls);
if (!$token) {
  echo curl_error($curls);
}
Développeur web depuis + de 20 ans