Salut tout les monde je suis débutant dans l’utilisation des web services et j ai un projet que je dois réaliser avec, alors pour commencer j ai trouvé un exemple sur le net que j’ai essayé et ça marche très bien, l exemple consiste à l’appel d’une fonction sur le serveur cette fonction retourne un string mais quand je modifie la fonction pour qu’il retourne un array je trouve des difficultés à récupérer cette variable, mon code est le suivant :
====================================================
Serveur.php :
======================================================
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 <?php // Pour supprimer le cache du web-service ini_set('soap.wsdl_cache_enabled', 0); // Pour définir le temp maximal d'éxecution de notre web-service ini_set('default_socket_timeout', 180); // Nom de notre web-service class Server { // Le service QuelJour que l'on a définit dans notre format wsdl function QuelJour($parm) { $aJour[1] = 'Lundi'; $aJour[2] = 'Mardi'; $aJour[3] = 'Mercredi'; $aJour[4] = 'Jeudi'; $aJour[5] = 'Vendredi'; $aJour[6] = 'Samedi'; $aJour[0] = 'Dimanche'; Return $aJour[date("w",strtotime($parm))]; } } // On tente d'instancier la classe soapServer // Si cela s'avère impossible, on affiche une erreur try { $server = new SoapServer('monFormat.wsdl', array('trace' => 1,'encoding' => 'ISO-8859-1')); // On définit la classe qui va gérer les requêtes SOAP (pour nous c'est la class Server) $server -> setclass('Server'); $server->setPersistence(SOAP_PERSISTENCE_REQUEST); } catch (Exception $e) { echo 'erreur'.$e; } // Si l'appel provient d'un Web-Service } ?>
Le fichier WSDL :
=========================================================
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54<?xml version="1.0" encoding="UTF-8"?> <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.example.org/MonFormat/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="MonFormat" targetNamespace="http://www.example.org/MonFormat/"> <wsdl:types> <xsd:schema targetNamespace="http://www.example.org/MonFormat/"> <xsd:element name="QuelJour"> <xsd:complexType> <xsd:sequence> <xsd:element name="in" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="QuelJourResponse"> <xsd:complexType> <xsd:sequence> <xsd:element name="out" type="xsd:array"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> </wsdl:types> <wsdl:message name="QuelJourRequest"> <wsdl:part name="parameters" type="xsd:string"/> </wsdl:message> <wsdl:message name="QuelJourResponse"> <wsdl:part name="parameters" type="xsd:array"/> </wsdl:message> <wsdl:portType name="MonFormat"> <wsdl:operation name="QuelJour"> <wsdl:input message="tns:QuelJourRequest"/> <wsdl:output message="tns:QuelJourResponse"/> </wsdl:operation> </wsdl:portType> <wsdl:binding name="MonFormatSOAP" type="tns:MonFormat"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="QuelJour"> <soap:operation soapAction="http://www.example.org/MonFormat/QuelJour"/> <wsdl:input> <soap:body use="literal"/> </wsdl:input> <wsdl:output> <soap:body use="literal"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="MonFormat"> <wsdl:port binding="tns:MonFormatSOAP" name="monFormatSOAP"> <soap:address location="http://localhost/MonWebService1/serveur.php"/> </wsdl:port> </wsdl:service> </wsdl:definitions>
Client.php
=========================================================
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 <?php // Pour supprimer le cache du web-service ini_set('soap.wsdl_cache_enabled', 0); // Nouveau Client SOAP try { // Nouvelle instance de la classe soapClient $client = new SoapClient('http://localhost/MonWebService1/monFormat.wsdl', array('trace' => 1)); $parm = date('Y-m-d'); // Appel de la méthode QuelJour du service web try{ $oReturn = $client -> __soapCall('QuelJour', array('string' =>$parm)); } catch (SoapFault $fault) { trigger_error("SOAP Fault: (faultcode: {$fault->faultcode}, faultstring: {$fault->faultstring})", E_USER_ERROR); } // affiche le résultat var_dump($oReturn); } catch (SoapFault $fault) { echo 'erreur : '.$fault; } ?>
Lors de l’exécution de client.php on a sur notre navigateur un résultat similaire à celui la :
string(8) "Dimanche"
Maintenant si la fonction retourne par exemple le tableau $Ajour quelles modifications je dois faire sur le fichier WSDL et comment récupérer les éléments de tableau dans client.php, j'ai essayé de changer string par array dans wsdl et d'afficher var_dump($oReturn[1]); au lieu de var_dump($oReturn); mais j'avais un erreur de ce type:
Fatal error: Cannot use object of type stdClass as array in C:\wamp\www\MonWebService1\client.php on line 17
Pourriez-vous m'aider ?
Partager