Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 12 sur 12
  1. #1
    Nouveau 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 : 29
    Points
    29

    Par défaut [SOAP] Récupérer un tableau d’un 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 :
    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
    Expert Confirmé
    Inscrit en
    janvier 2005
    Messages
    2 290
    Détails du profil
    Informations forums :
    Inscription : janvier 2005
    Messages : 2 290
    Points : 2 840
    Points
    2 840

    Par défaut

    Citation Envoyé par lehic
    Code :
    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
    Nouveau 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 : 29
    Points
    29

    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
    Expert Confirmé
    Inscrit en
    janvier 2005
    Messages
    2 290
    Détails du profil
    Informations forums :
    Inscription : janvier 2005
    Messages : 2 290
    Points : 2 840
    Points
    2 840

    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
    Nouveau 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 : 29
    Points
    29

    Par défaut

    Voila la partie ou la methode GetTableau est decrite dans le fichier WSDL

    Code :
    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
    Expert Confirmé
    Inscrit en
    janvier 2005
    Messages
    2 290
    Détails du profil
    Informations forums :
    Inscription : janvier 2005
    Messages : 2 290
    Points : 2 840
    Points
    2 840

    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 :
    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
    Nouveau 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 : 29
    Points
    29

    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
    Expert Confirmé
    Inscrit en
    janvier 2005
    Messages
    2 290
    Détails du profil
    Informations forums :
    Inscription : janvier 2005
    Messages : 2 290
    Points : 2 840
    Points
    2 840

    Par défaut

    Citation Envoyé par lehic
    Voila la partie ou la methode GetTableau est decrite dans le fichier WSDL

    Code :
    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
    Nouveau 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 : 29
    Points
    29

    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
    Expert Confirmé
    Inscrit en
    janvier 2005
    Messages
    2 290
    Détails du profil
    Informations forums :
    Inscription : janvier 2005
    Messages : 2 290
    Points : 2 840
    Points
    2 840

    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
    Nouveau 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 : 29
    Points
    29

    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
    Invité régulier
    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 : 6
    Points
    6

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •