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

Bibliothèques et frameworks PHP Discussion :

[Web Service] Comment appeller un webservice en php ?


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club Avatar de masterx_goldman
    Inscrit en
    Mai 2008
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 164
    Points : 51
    Points
    51
    Par défaut [Web Service] Comment appeller un webservice en php ?
    Bonjour tout le monde,

    Je veux écrire un code php qui appelle un webservice dont j'ai l'url wsdl, j'ai cherché sur internet des exemples pour tester et j'ai trouvé ce lien qui offre une liste d'url de webservices de test http://www.actionscript.org/forums/s...d.php3?t=70742 , j'ai choisi un exemple http://www.webservicex.net/length.asmx?WSDL qui fait la conversion de distances en donnant une unité source de conversion, une unité cible et une valeur, et j'ai écrit le code suivant en lisant la spécification du webservice ici http://www.webservicex.net/length.as...angeLengthUnit:
    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
     
    $wsdl = "http://www.webservicex.net/length.asmx?WSDL";
    $cliente = new SoapClient($wsdl);
     
    $LengthValue=1;
    $fromLengthUnit='Miles';
    $toLengthUnit='Kilometers';
     
    $vem = $cliente->__soapCall('ChangeLengthUnit',array('LengthValue' => $LengthValue , 'fromLengthUnit' => $fromLengthUnit,'toLengthUnit' => $toLengthUnit ));
    print $vem->ChangeLengthUnitResult;
     
    ?>
    Normalement si tout va bien, je devrais avoir 1,6 comme résultat,( 1 Mile = 1,6 Km ) mais quand je lance ma page php, j'obtient 0 !
    En regardant le code source de la page http://www.webservicex.net/length.as...angeLengthUnit , on peut voir que l'appel du webservice en cliquant sur Invoke ne passe pas par l'url en wsdl que moi j'utilise.. et là je me perds vraiment ..
    Aussi, je trouve pas un exemple simple pour appeler le webservice google search..
    j'ai essayé ce code :
    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
    39
    40
    <?php
    $Query = "Hello World";
    $key = "ABQIAAAAuq8WwJqLli1jzpsjK2nlTRT2yXp_ZAY8_ufC3CFXhHIE1NvwkxQRjALX1F-oSyIUc9c7R2CIMBbqzA";
    $start = 0;
     
    $parameters = array( 
                "key"         => $key,
                "q"           => $Query,
                "start"       => $start,
                "maxResults"  => 10,
                "filter"      => true,
                "restrict"    => "",
                "safeSearch"  => false,
                "lr"          => "lang_en", 
                "ie"          => "",
                "oe"          => ""
        );
     
    $soapclient = new soapclient("http://api.google.com/search/beta2");
    $result = $soapclient->call("doGoogleSearch", $parameters, "urn:GoogleSearch");
    $searchtime = $result["searchTime"];
    $begin = $start + 1;
    $end = $start + $parameters["maxResults"];
    $total = $result["estimatedTotalResultsCount"]; 
     
    if ($total > 0)
    {
        $result = $result["resultElements"]; 
     
        for ($i = 0; $i < $parameters["maxResults"]; $i++)
        {
            $element = $result[$i];
            $url = $element["URL"];
            $title = $element["title"];
            $snippet = $element["snippet"];
            ?><p><?= $snippet ?></p><?
        }
     
    }
    ?>
    Remarque: l'url http://api.google.com/search/beta2 donne une erreur 404 ( le code est ancien ), donc c'est normal que le 2ème code en marche pas..mais je trouve pas la nouvelle url que google a mis à disposition pour faire la recherche
    Alors, si quelqu'un pourrait me guider pour faire tourner un exemple simple, je serais reconnaissant! merci d'avance pour votre aide !

  2. #2
    Membre du Club Avatar de masterx_goldman
    Inscrit en
    Mai 2008
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 164
    Points : 51
    Points
    51
    Par défaut Solution trouvée avec une des façons décrites dans la doc officielle mais pas avec toutes les façons
    re, j’ai trouvé une solution à mon problème du code client webservice de test que j’ai crée en php en suivant deux exemples :
    1) Appel de webservice en ayant son url wsdl : http://geekswithblogs.net/THines01/a...07/callws.aspx
    2) Appel de webservice avec serveur soap en local http://www.blog-nouvelles-technologi...par-un-client/

    Code fonctionnel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
     
    $wsdl = "http://www.webservicex.net/length.asmx?WSDL";
    $client = new SoapClient($wsdl);
     
    $LengthValue=1;
    $fromLengthUnit='Miles';
    $toLengthUnit='Kilometers';
     
    $res = $client->ChangeLengthUnit(array('LengthValue' => $LengthValue , 'fromLengthUnit' => $fromLengthUnit,'toLengthUnit' => $toLengthUnit ));
    print $res->ChangeLengthUnitResult;
     
    ?>

    Code non fonctionnel ( ancien code que j'ai mis en haut ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
     
    $wsdl = "http://www.webservicex.net/length.asmx?WSDL";
    $client = new SoapClient($wsdl);
     
    $LengthValue=1;
    $fromLengthUnit='Miles';
    $toLengthUnit='Kilometers';
     
    $res = $client->__soapCall('ChangeLengthUnit',array('LengthValue' => $LengthValue , 'fromLengthUnit' => $fromLengthUnit,'toLengthUnit' => $toLengthUnit ));
    print $res->ChangeLengthUnitResult;
     
    ?>
    Pourtant dans la doc de php (http://www.php.net/manual/en/soapclient.soapcall.php ), les deux méthodes devraient fonctionner , voici l’exemple dans la doc officielle :

    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
    <?php
     
    $client = new SoapClient("some.wsdl");
     
    $client->SomeFunction($a, $b, $c);//celle là a fonctionné chez moi
     
    $client->__soapCall("SomeFunction", array($a, $b, $c)); //celle là n’a pas //fonctionné chez moi
     
     
    $client->__soapCall("SomeFunction", array($a, $b, $c), NULL,
                        new SoapHeader(), $output_headers);
     
     
    $client = new SoapClient(null, array('location' => "http://localhost/soap.php",
                                         'uri'      => "http://test-uri/"));
    $client->SomeFunction($a, $b, $c);
    $client->__soapCall("SomeFunction", array($a, $b, $c));
    $client->__soapCall("SomeFunction", array($a, $b, $c),
                        array('soapaction' => 'some_action',
                              'uri'        => 'some_uri'));
    ?>

    Code extrait du 2ème lien haut : http://www.blog-nouvelles-technologi...par-un-client/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $client = new SoapClient("operation.wsdl");
    echo $client->getResult("add", 3, 4);//dans cet exemple, appeler par la méthode directement et non pas en utilisant __soapcall


    Bon, là j’ai pris la première façon qui fonctionne en attendant que je trouve une explication pour le 2ème code qui ne marche pas.
    Merci de mettre en réponse si vous en auriez.
    Bonne soirée.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    ok, merci pour l'information.

    ce que je veux faire c'est la sélection d'une liste des produits de ma BDD (IDs, nom, prix,...) et l'envoyée avec un webservice en php. J'ai réussi a extraire les données mais j'arrive toujours pas a créer le webservice à l'aide de nusoap.

    et si le webservice est créer comment voir si j'ai le bon résultat ou non (c a d afficher le wsdl)?

    pourriez vous m'aide sur ce coup là?

    merci d'avance
    cordialement

Discussions similaires

  1. [Web Service][SOAP] Pb connexion webservice avec __soapCall
    Par tintin72 dans le forum Bibliothèques et frameworks
    Réponses: 12
    Dernier message: 12/08/2008, 15h41
  2. [Web Service][SOAP] Appel d'un WebService dans PHP
    Par ggjedi dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 09/02/2008, 10h36
  3. Réponses: 3
    Dernier message: 29/06/2007, 16h57
  4. Web service comment faire?
    Par albanovisch dans le forum Bibliothèques
    Réponses: 4
    Dernier message: 02/02/2007, 11h33
  5. Comment appeller un webservice ?
    Par fraginfo dans le forum Wildfly/JBoss
    Réponses: 1
    Dernier message: 12/12/2006, 16h23

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