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][SOAP] Récupérer un tableau d%u2019un service web SOAP ?


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Août 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2005
    Messages : 50
    Points : 45
    Points
    45
    Par défaut [Web Service][SOAP] Récupérer un tableau d%u2019un service web SOAP ?
    Bonjour, je trouve des difficultés pour afficher un tableau, récupéré comme résultat d’une méthode d’un service web SOAP.
    Voila 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
    14
    15
     
     
    <?
    // première étape : désactiver le cache lors de la phase de test
    ini_set("soap.wsdl_cache_enabled", "0");
     
    // lier le client au fichier WSDL
    $clientSOAP = new SoapClient('http://localhost/services/soap/GateService?WSDL',array('login' => "manager",'password' => "manager"));
     
    // getTableau est une méthode qui me renvois le résultat d’une requête SQL sous forme de tableau
    $tab =$clientSOAP->getTableau();
     
    //Comment afficher les éléments du tableau $tab ?
     
    ?>
    Merci

  2. #2
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Citation Envoyé par lehic
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // lier le client au fichier WSDL
    $clientSOAP = new SoapClient('http://localhost/services/soap/GateService?WSDL',array('login' => "manager",'password' => "manager"));
     
    // getTableau est une méthode qui me renvois le résultat d’une requête SQL sous forme de tableau
    $tab =$clientSOAP->getTableau();
    Je pense que là tu essaies de passer les paramètres manager/manager comme étant ton login et ton mot de passe a la base de données c'est ca?
    Le classmap sert a faire un mapping entre les types de ton WSDL et tes classes PHP pour stocker le résultat.
    Regardes la:
    http://fr3.php.net/manual/fr/functio...-construct.php

    A mon avis il faudra plutot faire getTableau("manager", "manager");
    Mais je ne peux pas l'affirmer sans voir le WSDL...

    Bon courage

    Koopajah

  3. #3
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Août 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2005
    Messages : 50
    Points : 45
    Points
    45
    Par défaut
    oui c'est ca, manager, manager c juste le username et password.
    le probleme c pas ca.
    comment afficher mon resultat de la methode getTableau() ?
    quand je fais un print_r($tab); voila ce qu'il m'affiche :
    stdClass Object ( [out] => stdClass Object ( [BillingPlan] => Array ( [0] => stdClass Object ( [amount] => 0 [assigned] => No [description] => test [fee] => 0 [id] => 01 [planItem] => [price] => 100 [status] => Enabled [validity] => 1 Year ) [1] => stdClass Object ( [amount] => 0 [assigned] => No [description] => test plan [fee] => 0 [id] => 02 [planItem] => [price] => 12 [status] => Enabled [validity] => 1 Year ) ) ) )
    Moi je veux exploiter les elements du tableau.
    je veux savoir comment faire un for ou while pour parcourir les elements de mon tableau.

  4. #4
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Comme tu le vois dans le dump de la réponse, tu récupères pas un tableau au sens tableau associatif de PHP.
    Tu récupères une classe.

    En fait il faut que crées en PHP des classes qui correspondent aux types de ton WSDL et qu'ensuite tu utilises le classmap de new SoapClient() pour dire "ma classe Requete équivaut au type Request de mon WSDL" etc.

  5. #5
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Août 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2005
    Messages : 50
    Points : 45
    Points
    45
    Par défaut
    Voila la partie ou la methode GetTableau est decrite dans le fichier WSDL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    - <xsd:element name="GetTableau">
      <xsd:complexType /> 
      </xsd:element>
    - <xsd:element name="GetTableauResponse">
    - <xsd:complexType>
    - <xsd:sequence>
      <xsd:element maxOccurs="1" minOccurs="1" name="out" nillable="true" type="ns1:ArrayOfBillingPlan" /> 
      </xsd:sequence>
      </xsd:complexType>
      </xsd:element>

  6. #6
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Quand tu vois la réponse :

    stdClass Object ( [out] => stdClass Object ( [BillingPlan] => Array ( [0] => stdClass Object ( [amount] => 0 [assigned] => No [description] => test [fee] => 0 [id] => 01 [planItem] => [price] => 100 [status] => Enabled [validity] => 1 Year ) [1] => stdClass Object ( [amount] => 0 [assigned] => No [description] => test plan [fee] => 0 [id] => 02 [planItem] => [price] => 12 [status] => Enabled [validity] => 1 Year ) ) ) )
    tu as une classe qui t'es retournée disons de type A
    elle a comme variable de classe :
    out qui est lui aussi un objet.

    ce out est une instance de classe de type B qui a pour variable de classe :
    BillingPlan qui est lui meme un tableau d'objets de class C

    Cette class C a pour variable de classe:
    amount
    assigned
    description
    etc.

    Donc admettons que tu veuilles afficher tous les "amount"

    tu vas faire (apres récupération de la réponse dans $tab)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    // récupération du nombre d'éléments dans le tableau BillingPlan
    $vNbElt = count($tab->out->BillingPlan);
     
    // pour chaque élément on affiche le "amount"
    for($vI = 0 ; $vI < $vNbElt ; $vI++)
       {
       echo "Montant n°" . $vI . " : " . $tab->out->BillingPlan[$vI]->amount;
       echo "<br>";
       }
    J'espère que tu comprends ce que je veux dire

  7. #7
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Août 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2005
    Messages : 50
    Points : 45
    Points
    45
    Par défaut
    Merci pour ton aide,
    mais dis moi comment faire pour des creer des classes qui correspondent aux types de ton WSDL ?
    et comment utiliser classmap de new SoapClient() pour dire "ma classe Requete équivaut au type Request de mon WSDL" ?
    desole je debute
    peux tu me donner un exemple ?
    ou un lien vers un tuto .

  8. #8
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Citation Envoyé par lehic
    Voila la partie ou la methode GetTableau est decrite dans le fichier WSDL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    - <xsd:element name="GetTableau">
      <xsd:complexType /> 
      </xsd:element>
    - <xsd:element name="GetTableauResponse">
    - <xsd:complexType>
    - <xsd:sequence>
      <xsd:element maxOccurs="1" minOccurs="1" name="out" nillable="true" type="ns1:ArrayOfBillingPlan" /> 
      </xsd:sequence>
      </xsd:complexType>
      </xsd:element>

    Tu peux voir dans ce WSDL, que donc la fonction GetTableau ne prend aucun paramètre et qu'en retour elle renvoie un objet de type ArrayOfBillingPlan
    Donc tu dois avoir qq part dans le WSDL la définition du type ArrayOfBillingPlan qui doit etre un tableau d'un type complexe BillingPlan qui est ce que tu cherches (qui contient Amount, etc.)

    Par ailleurs c'est pas exactement ca non plus parce que getTableau ne te renvoie pas un ArrayOfBillingPlan directement. Ton Webservice te renvoie un complex type qui a un seul élément : out et qui contient le tableau que tu cherches

  9. #9
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Août 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2005
    Messages : 50
    Points : 45
    Points
    45
    Par défaut
    Merci pour ton aide, ton code a fonctione, j'ai pas tres bien compris a 100% mais je v etudier ton code
    Merci

  10. #10
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Citation Envoyé par lehic
    Merci pour ton aide,
    mais dis moi comment faire pour des creer des classes qui correspondent aux types de ton WSDL ?
    et comment utiliser classmap de new SoapClient() pour dire "ma classe Requete équivaut au type Request de mon WSDL" ?
    desole je debute
    peux tu me donner un exemple ?
    ou un lien vers un tuto .
    Je sais ce que c'est, je me suis arraché les cheveux sur ce sujet il y a quelques mois et je n'ai pas vraiment trouvé de tuto correct malgré de nombreuses recherches. C'est surtout par tatonnement, a force de tout essayer que j'ai fini par comprendre ce qui fonctionnait et ce qui ne fonctionnait pas.

    Il faut que tu comprennes clairement quels sont les types de ton WSDL et voir un complex Type comme étant une classe PHP et chaque element de ce complex type comme étant une variable de classe.

  11. #11
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Août 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2005
    Messages : 50
    Points : 45
    Points
    45
    Par défaut
    je me pose la question : il y a un outil qui va me générer mon code client php en fonction du WSDL ?

  12. #12
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Mai 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2012
    Messages : 6
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par koopajah Voir le message
    Je sais ce que c'est, je me suis arraché les cheveux sur ce sujet il y a quelques mois et je n'ai pas vraiment trouvé de tuto correct malgré de nombreuses recherches. C'est surtout par tatonnement, a force de tout essayer que j'ai fini par comprendre ce qui fonctionnait et ce qui ne fonctionnait pas.

    Il faut que tu comprennes clairement quels sont les types de ton WSDL et voir un complex Type comme étant une classe PHP et chaque element de ce complex type comme étant une variable de classe.





    S'il vous plait je veux bien récupérer un tableau d'un web service (écrit en php) , je veux le récupérer dans un code java (android) , je suis débutante et j'ai pas vraiment trouvé une grande chose qui me guide . Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/09/2014, 13h01
  2. [Web Service] SOAP : comment récupérer un tableau associatif
    Par het44 dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 22/08/2014, 09h58
  3. Récupérer un tableau soap
    Par kevdep dans le forum 4D
    Réponses: 17
    Dernier message: 02/05/2011, 17h14
  4. [XL-2007] Récupérer un tableau d'une page web
    Par Petit Rasta dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/01/2011, 15h45
  5. Récupérer un Tableau d'un service AMFPHP
    Par guillaumeBoubert dans le forum Dynamique
    Réponses: 1
    Dernier message: 14/03/2008, 11h57

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