Précédent   Forum du club des développeurs et IT Pro > PHP > Bibliothèques et frameworks > Services Web
Services Web Forum d'entraide pour les services Web en PHP, qui permettent de créer et de consommer facilement des webservices (génération de WSDL etc.). Exemples : SOAP, NuSOAP, REST, SCA-SDO... Avant de poster -> Cours webservices
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 25/04/2007, 16h22   #1
lehic
Nouveau Membre du Club
 
Développeur Web
Inscription : 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
Envoyer un message via MSN à lehic Envoyer un message via Skype™ à lehic
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
lehic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2007, 17h15   #2
koopajah
Expert Confirmé
 
Inscription : janvier 2005
Messages : 2 287
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 287
Points : 2 832
Points : 2 832
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
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2007, 17h24   #3
lehic
Nouveau Membre du Club
 
Développeur Web
Inscription : 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
Envoyer un message via MSN à lehic Envoyer un message via Skype™ à lehic
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 :
Citation:
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.
lehic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2007, 17h25   #4
koopajah
Expert Confirmé
 
Inscription : janvier 2005
Messages : 2 287
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 287
Points : 2 832
Points : 2 832
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.
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2007, 17h30   #5
lehic
Nouveau Membre du Club
 
Développeur Web
Inscription : 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
Envoyer un message via MSN à lehic Envoyer un message via Skype™ à 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>
lehic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2007, 17h35   #6
koopajah
Expert Confirmé
 
Inscription : janvier 2005
Messages : 2 287
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 287
Points : 2 832
Points : 2 832
Quand tu vois la réponse :

Citation:
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
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2007, 17h35   #7
lehic
Nouveau Membre du Club
 
Développeur Web
Inscription : 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
Envoyer un message via MSN à lehic Envoyer un message via Skype™ à 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 .
lehic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2007, 17h39   #8
koopajah
Expert Confirmé
 
Inscription : janvier 2005
Messages : 2 287
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 287
Points : 2 832
Points : 2 832
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
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2007, 17h40   #9
lehic
Nouveau Membre du Club
 
Développeur Web
Inscription : 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
Envoyer un message via MSN à lehic Envoyer un message via Skype™ à lehic
Merci pour ton aide, ton code a fonctione, j'ai pas tres bien compris a 100% mais je v etudier ton code
Merci
lehic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2007, 17h42   #10
koopajah
Expert Confirmé
 
Inscription : janvier 2005
Messages : 2 287
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 287
Points : 2 832
Points : 2 832
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.
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2007, 17h42   #11
lehic
Nouveau Membre du Club
 
Développeur Web
Inscription : 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
Envoyer un message via MSN à lehic Envoyer un message via Skype™ à lehic
je me pose la question : il y a un outil qui va me générer mon code client php en fonction du WSDL ?
lehic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2012, 02h37   #12
elissa_assou
Invité régulier
 
Femme
Inscription : 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
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
elissa_assou est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 10h11.


 
 
 
 
Partenaires

Hébergement Web