Bonjour à tous,
Je suis un développeur win32 qui découvre les joies des webservices et PHP
Je dois écrire les fonctions PHP d'un WSDL qui a été généré par une appli tiers (en PJ).
Voici le morceau du WSDL qui m'interesse :
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 ... ... <xsd:complexType name="tAjoutEnreg"> <xsd:sequence> <xsd:element name="psNomTable" type="xsd:string"/> <xsd:element name="psCol1" type="xsd:string"/> <xsd:element name="psCol2" type="xsd:string"/> </xsd:sequence> </xsd:complexType> ...
J'ai commencé à écrire cela par exemple, mais j'ai une erreur PHP qui me dit d'après ce que je comprends que le type de paramètre est incorrect.
Voici la page que les 2 pages que j'ai codé (l'une d'elle ou les 2 sont donc fausses ) :
Voici la page PHP regroupant contenant l'appel AjoutEnreg() :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <?php $client = new SoapClient("http://127.0.0.1:81/wsTableSimple.wsdl"); echo $client->AjoutEnreg("test", "1", "2"); ?>
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 <?php function AjoutEnreg($psTable, $psCol1, $psCol2 ) { $message = ''; // on se connecte à MySQL $db = mysql_connect('localhost', 'root', ''); if (!$db) { die('Could not connect: ' . mysql_error()); } // on sélectionne la base mysql_select_db('maBase',$db); $query = "INSERT INTO $psTable VALUES('$psCol1','$psCol2')"; $result = mysql_query($query); if (!$result) { $message = '#Requête invalide : ' . mysql_error() . "\n"; $message .= 'Requête complète : ' . $query; } return $message; } // Désactivation du cache WSDL ini_set("soap.wsdl_cache_enabled", "0"); // Catch l'erreur si l'instanciation la classe SoapServer // échoue, on retourne l'erreur try { $server = new SoapServer('http://127.0.0.1:81/wsTableSimple.wsdl'); // On ajoute la méthode "getResult" que le serveur va gérer $server->addFunction("AjoutEnreg"); } catch (Exception $e) { echo 'erreur'.$e; } // Si l'appel provient d'une requête POST (Web Service) if ($_SERVER['REQUEST_METHOD'] == 'POST') { // On lance le serveur SOAP $server->handle(); } else { echo '<strong>This SOAP server can handle following functions : </strong>'; echo '<ul>'; foreach($server->getFunctions() as $func) { echo '<li>' , $func , '</li>'; } echo '</ul>'; } ?>
Et enfin l'erreur PHP retournée :
Pouvez-vous m'aider à déchiffrer ce WSDL et me dire ce qu'il attend comme paramètre ? De ce que j'imagine c'est un problème de type de données ? je lui passe une 3 chaines et lui attends un "type complex" ?Fatal error: Uncaught SoapFault exception: [SOAP-ENV:Client] Error cannot find parameter in C:\wamp\www\ws.php:5 Stack trace: #0 C:\wamp\www\ws.php(5): SoapClient->__call('AjoutEnreg', Array) #1 C:\wamp\www\ws.php(5): SoapClient->AjoutEnreg('test', '1', '2') #2 {main} thrown in C:\wamp\www\ws.php on line 5
Merci par avance.
wsTableSimple1.zip
Partager