Recevoir la réponse d'un API en PHP

iKelSilver - 9 avril 2021 à 17:52
professor_tourneseul Messages postés 17 Date d'inscription samedi 5 septembre 2020 Statut Membre Dernière intervention 14 mai 2021 - 11 avril 2021 à 16:42
Bonjour tout le monde,

Je rencontre un souci pour recevoir la réponse d'un API.

Voici les informations que renvoie l'API :
Method : HTTP Post
Format d'échange de données : JSON
Les variables que l'API renvoie sont : tx_reference,identifier,payment_reference,...

Comment recueillir ces variables en PHP ? Est-ce
 $_GET['nom_var']
ou
 $_POST['nom_var']
?

Voici mon essai:
$json = file_get_contents('php://input');
$data = json_decode($json);
$tx_reference = $data->tx_reference;
$identifier        = $data->identifier;
$payment_reference         = $data->payment_reference;

Avec mon code, je n'arrive pas à recevoir la réponse du serveur. Rien que des erreurs PHP qui
disent que ces variables n'existent pas.

Comment résoudre ce problème ?

Merci
A voir également:

4 réponses

professor_tourneseul Messages postés 17 Date d'inscription samedi 5 septembre 2020 Statut Membre Dernière intervention 14 mai 2021
Modifié le 10 avril 2021 à 21:56
bonjour,

Comment récupérer le corps body d’une requête HTTP sans utiliser d’index, c’est à dire, sans utiliser $_POST[ 'index_quelconque ' ] :

 $post_body = file_get_contents(  'php://input'  ) ;


Cette fonction peut retourner FALSE, mais elle peut aussi retourner une valeur équivalent à FALSE. Utilisez l'opérateur === pour tester la valeur de retour exacte de cette fonction. (voir la doc PHP).

tester si la réponse de la fonction est valide :

  $json = file_get_contents('php://input');
        if( $json  ... )  {   ....  


si la réponse n'est pas valide ou pas du format json, alors la fonction : json_decode($json); va également retourner une erreur, et ainsi de suite, des erreurs en cascade, en avalanche ...

Donc, en PHP, toujours tester les erreurs pour savoir d'où vient l'erreur !

0
Bonjour Prof

Merci pour votre réponse. Vue votre explication, le fait qu'on peut ou ne pas recevoir la réponse attendue, est-ce qu'on peut utiliser directement
 $ _POST['ma_var'] 
pour recueillir les données attendues comme dans un formulaire simple html ?

Merci
0
professor_tourneseul Messages postés 17 Date d'inscription samedi 5 septembre 2020 Statut Membre Dernière intervention 14 mai 2021
Modifié le 10 avril 2021 à 21:57
Oui, on peut utiliser $ma_var = $ _POST['ma_var']; mais ça suppose que, dans la réponse à la requête HTTP, retournée au client par le serveur, il y a présence du champ ma_var selon le format texte suivant :

ma_var=valeur_du_champ_ma_var& ... ... autres éventuels champ=valeur ...

du genre :
nom_champ1=valeur_du_champ1&nom_champ2=valeur_du_champ2&nom_champ3=valeur_du_champ3


Mais dans le cas où il n'y a pas de champs mais que des valeurs :
(ça arrive sur certains serveurs !!)

valeur_du_champ1&valeur_du_champ2&valeur_du_champ3& ...

alors, on est obligé d'utiliser la fonction adaptée ci-dessous pour avoir accès aux données valeurs de la réponse :

$reponse = file_get_contents('php://input'); 


ensuite pour voir si on a bien reçu une réponse (non vide), on peut tout simplement tenter de l'afficher :

echo  "test1 ; la réponse est : " . $reponse .  "<BR> ;
   // ou
var_dump( $reponse );
  // ou 
print_r( $reponse );

Cordialement,
0
professor_tourneseul Messages postés 17 Date d'inscription samedi 5 septembre 2020 Statut Membre Dernière intervention 14 mai 2021
10 avril 2021 à 21:04
hum... oublié ... dans la phrase "Voici les informations que renvoie l'API : " , pour info, de quelle API s'agit-il ici ??

bonne soirée.
0
Bonjour Prof

C'est une plate-forme qui gère le paiement en ligne pour d'autres sites web et fonctionne pratiquement de la même manière que PayPal.

On envoie des données par formulaire à leur site web et le serveur répond avec un message formaté en JSon comme dit ci-haut.

J'arrive à bien envoyé mes données à leur API mais c'est comment recevoir la réponse de l'API qui ne marche pas chez moi.

Le lien de la plate-forme : https://www.paygateglobal.com/

J'ai tout essayé en vain
0
professor_tourneseul Messages postés 17 Date d'inscription samedi 5 septembre 2020 Statut Membre Dernière intervention 14 mai 2021
11 avril 2021 à 16:42
bonjour ,

OK je vois le truc, la situation,
la forcément c'est sécurisé ! et ça doit être bien sécurisé donc https:// ...

D'expérience perso, en général, sur les sites proposant des APIs, il y a, disponibles,
des exemples d'utilisations de leurs APIs dans divers langages :
PHP, javascript, java, C++ ... , pour accompagner le développeur ...
Déjà au 1ier abord (sans créer de compte), là en surface, je ne vois pas
d'exemples d'utilisations de leur API !
Peut-être faut-il créer un compte avant, pour y avoir accès ????

Alors 1 remarque ici, dans le code donné sur le forum, je vois bien le traitement en PHP
de la réponse (qui apparemment n'arrive pas !) mais on ne voit pas le code source PHP
lançant la requête HTTP POST ...
Il faut d'abord s'assurer que la réponse arrive avant de la traiter !


Sinon là, pour lancer des requêtes http(s) POST en PHP, j'utilise curl,
(une extension PHP maintenant intégrée à PHP) , ça marche bien,
ça passe bien les proxy et ça gère presque tous les protocoles web sauf TCP :
https://www.php.net/manual/fr/intro.curl.php

ATTENTION ! il faut activer l'extension curl dans le PHP utilisé : dé-commenter,
dans le fichier texte PHP.ini du répertoire du PHP, la ligne :
; extension=php_curl.dll
devient :
extension=php_curl.dll
puis redémarrer le serveur web pour la prise en compte de cette extension PHP.

... Bon, il faut un peu d'apprentissage, mais ça s'apprivoise bien :
https://www.php.net/manual/fr/book.curl.php

et pour les exemples, taper dans Goût-Geule : aide php curl
https://waytolearnx.com/2020/01/tutoriel-curl-en-php.html
...

bon weekend studieux,
0
Rejoignez-nous