API en PHP

Résolu
Bonjour,
j'essaie de faire un API en PHP:
je le fait via un file_get_content tout fonctionne mais je ne sais comment traiter ma réponse?
exemple: http://apis.mcdiamondcms.com/api.php?cmd=version&req=version



-----------------------------------------------
Conception web · Développement web · Design graphique par passion.

8 réponses

  1. Contributeur
    Hello,
    tu peux repréciser exactement ce que tu veux savoir ?
    0
    1. J'obtient un nombre mais j'aimerais le prendre et l'utiliser en PHP.
      0
    2. comme ca $result = file_get_content($file) ? sinon je te conseille json pour une api
      0
  2. exactement! ;)
    Si je dois me diriger vers Json, vous avez un lien / conseil pour moi?
    0
    1. @jordane45Merci, mais mon problème reste le même...
      J'ai du texte qui ressort de mon API j'aimerais qu'il puisse être repris en tant que valeur.
      0
  3. Modérateur
    Suite à nos réponses précédentes... quel code as tu essayé de faire ?
    Sans cette indication essentielle... impossible pour nous de savoir où se situe ton problème.....

    De plus...en regardant le lien que tu nous as communiqué... il semble que tu n'es pas mis en place l'encodage Json comme on te l'a préconnisé....

    0
    1. @jordane45Fait ;)
      0
  4. Bonsoir,
    Voici mes codes sans Json car je ne sais pas encore très bien comment l'utiliser...

    Voici une condition qui utilise l'API:

    if(!empty($_POST['code'])){
    $adress = $_SERVER['HTTP_HOST'];
    $code = $_POST['code'];
         
    $rep = DCMSAPIS('licence', "$code", "$adress");
          
    if($rep == "ok"){
    Notify('<strong>Code échangé!</strong> Votre addon est lié avec ce CMS!', 'success');
    }else{
     Notify('<strong>Code erroné/déja utilisé !</strong> rendez-vous sur mcdiamondcms.com/codes.php pour plus d infos!', 'danger');
    }
    }
    


    Voici la Fonction:

    function DCMSAPIS($dcmsapicmd, $dcmsapireq, $dcmsapiidd) {
      $DCMSAPIS = file_get_contents('http://apis.mcdiamondcms.com/api.php?cmd='.$dcmsapicmd.'&req='.$dcmsapireq.'&idd='.$dcmsapiidd);
      settype($DCMSAPIS, "string");
      return($DCMSAPIS);
    }
    


    Ma fonction repond correctement ($rep contient la bonne réponse: je l'ai vérifié avec un echo.) mais l'utiliser avec une condition ne fonctionne pas...

    Merci de votre aide.

    Cordialement

    -----------------------------------------------
    Conception web · Développement web · Design graphique par passion.
    0
    1. Modérateur
      Du côté de ton API ... tu dois transformer le résultat en JSON.
      Pour ce faire tu peux écrire un truc du genre :

      
       $result=array();
      
       $result['version'] = $tavariable;
      
      
      // on retourne la réponse au format json
      echo json_encode($result);
      
      


      Au niveau de ta fonction de récupération :
      function DCMSAPIS($dcmsapicmd, $dcmsapireq, $dcmsapiidd) {
        $tmp= file_get_contents('http://apis.mcdiamondcms.com/api.php?cmd='.$dcmsapicmd.'&req='.$dcmsapireq.'&idd='.$dcmsapiidd);
      
      //on récupère le json dans un  ARRAY
      $DCMSAPIS = json_decode($tmp,true);
      
        return($DCMSAPIS);
      }
      
      


      Ensuite...ça se traite comme n'importe quel Array.

      Par exemple.. pour afficher le contenu....
      $rep = DCMSAPIS('licence', "$code", "$adress");
            
       //le temps des tests
       $print_r($rep);
      
       if($rep['version'] == '0.5.3' ){
         echo " c'est la bonne version !";
       }
      
      


      0
      1. Merci,
        Je l'ai fait et mon print ne m'affiche rien même si j'enlève le $.
        Que faire?

        Cordialement
        0
      2. et si je utilise REST ?
        0
    2. Modérateur
      Tu peux essayer comme ça ?
      (sans les quotes... je n'avais pas vu que tu en avais mis ! )
      $rep = DCMSAPIS('licence', $code, $adress);
            
      //le temps des tests
      echo "<br>code :".$code;
      echo "<br>adress:".$adress;
      print_r($rep);
      


      Et on est bien d'accord que tu as changé le code du côté de ton API pour transformer en JSON ??
      (car là... je viens de tester ton URL .. et c'est toujours du texte qui apparait ! )

      Cordialement,
      Jordane
      0
      1. Je travaillais sur une autre partie désolé http://apis.mcdiamondcms.com/api.php?cmd=licence&req=STORE-54ds-F5Li-864R&idd=look
        0
      2. @FlyAwayExpert7J'ai appliqué Json sur tout mon API !
        0
    3. <?php					
      if(!empty($_POST['code'])){
      $adress = $_SERVER['HTTP_HOST'];
      $code = $_POST['code'];
      $rep = DCMSAPIS('licence', $code, $adress); //Agit sur mon API correctement (Modif BDD)
      if($rep['api'] == "ok"){
      $addonname = DCMSAPIS('licence', "$code", 'look'); 
      $print_r($addonname);						 //file_get_contents('http://apis.mcdiamondcms.com/Store/Manifest/Manifest-'.addonname.'.php');
      Notify('<strong>Code échangé!</strong> Votre addon ($addonname) $fr_content_tab_name est lié avec ce CMS!', 'success');
      }else{
      print_r($rep);
      Notify('<strong>Code erroné/déja utilisé !</strong> rendez-vous sur mcdiamondcms.com/codes.php pour plus d infos!', 'danger');
      }
      }
      ?>
      

      Les variables $code et $adress fonctionnent...
      Le problème est de traiter la réponse uniquement envoyer des requêtes fonctionne essayez (Système de licence ce lien affichera qu'une seul fois "ok" après "invalid" car le code sera utilisé.) http://apis.mcdiamondcms.com/api.php?cmd=licence&req=STORE-54ds-F5Li-864R&idd=CCM
      0
      1. Modérateur
        Dis voir .....
        Dans ton résultat (de ton api ) ... tu ne retournes bien QUE l'encode json de ton array ???
        Tu n'y mets rien d'autre ??????

        En fait si.... je pense que tu fais un
        echo '<meta charset="UTF-8">';
        

        ... et c'est ça qui fou la pagaille !!!!

        Dans le code de retour de ton api.. il ne doit y avoir qu' UN SEUL ECHO (celui du résultat transformé en JSON ) ..RIEN D'AUTRE !

        0
        1. Modérateur
          Et au passage .. au lieu de faire des IF ELSE pour traiter le résultat.. penses au SWITCH

          $rep = DCMSAPIS('licence', $code, $adress); //Agit sur mon API correctement (Modif BDD)
          $api = !empty($rep['api'])?$rep['api']:NULL;
          switch($api){
          
           case "ok":
            echo "<br> API = ok";
            $addonname = DCMSAPIS('licence', $code, 'look'); 
            print_r($addonname);       //file_get_contents('http://apis.mcdiamondcms.com/Store/Manifest/Manifest-'.addonname.'.php');
            echo '<strong>Code échangé!</strong> Votre addon ($addonname) $fr_content_tab_name est lié avec ce CMS!';
            break;
           
           case "invalid":
            echo "<br> API = invalid";
            echo '<br><strong>Code erroné/déja utilisé !</strong> rendez-vous sur mcdiamondcms.com/codes.php pour plus d infos!';
            break;
          
           default:
            echo "<br> REP = ";
            print_r($rep);
            break; 
          }
          
          
          0
        2. Merci Jordan!
          c'était symplement le "<meta charset="UTF-8">" ...
          ;-)

          tout fonctionne.
          0