Bonjour,
je travaille actuellement sur un webservice, et jusque la tout fonctionne, enfin presque.
J'arrive à envoyer un xml de requete et de récupérer sa réponse via le soap, mais, arrive un soucis : j'ai besoin d'intégrer des parametres de connection utilisateur dans l'entête. je génère donc le header du soap, mais du coté serveur comment récupérer ces infos?
Sachant que je n'utilise pas nusoap mais l'extention de php 5
Alors voila comment je créé mon client :
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 <?php header("Content-Type: text/xml; charset=UTF-8"); // Désactivation du cache WSD Pour la période de Dev ini_set("soap.wsdl_cache_enabled", false); // lier le client au fichier WSDL $clientSOAP = new SoapClient("http://wota.###/wsdl/Test.wsdl"); $namespace = "http://wota.###.com/wsdl/"; // Définir les informations utilisateur dans le header $infos_user = array( "User_Log" => "David", "User_Password" => "pass", "Language" => "EN"); $CredentialHeader = new SoapHeader("http://wota.###.com/wsdl/", $CredentialHeader, $infos_user); // Génération du header $headerSOAP = array($User_Log, $User_Password, $Language); $clientSOAP->__setSoapHeaders($headerSOAP); $xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?> <EHAreaCityRQ xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://wota.###.com/xsd\" xsi:schemaLocation=\"http://wota.###.com/xsd http://wota.exclusive-hotels.com/xsd/EHCityRQ.xsd\"> <AreaCity> <CityCode>PAR</CityCode> <Language>EN</Language> </AreaCity> </EHAreaCityRQ>"; // executer la methode EHAreaCityRQ echo $clientSOAP->EHAreaCityRQ($xml); ?>
et ma partie serveur
et le 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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88 <?php // Désactivation du cache WSDL Pour la période de Dev ini_set("soap.wsdl_cache_enabled", false); // Inclusion de configuration require_once("../library/conf.php"); // On tente d'instancier la classe soapServer // Si cela s'avère impossible, on lève une exception try { class AreaCity { function EHAreaCityRQ($xml) { // ##################################################################### // Traitement du xml d'entrée // ##################################################################### // Récupération du flux XML $xml_input = new SimpleXMLElement($xml); // Récupération du code de langue $Language = $xml_input->AreaCity->Language; // Récupération du CountryCode $CityCode = prep_var($xml_input->AreaCity->CityCode); // ##################################################################### // Traitement du xml de réponse // ##################################################################### // Génération du Fichier XML $xml_output = new templates("../xml_templates/EHAreaCityRS.xml"); $i = 0; $listequartiers = array(); // Requette pour lister les quartiers $query_quartiers = mssql_query("ps_OTA_List_AreaCity $CityCode, '$Language'"); // Récupération des erreurs de la requete $error = mssql_get_last_message(); // Effectuer la boucle si pas d'erreur if (!valide_error($error)) { while ($datas = mssql_fetch_array($query_quartiers)) { $listequartiers[$i] = array( "AreaCityCode" => $datas["AreaCityCode"], "CityCode" => $datas["CityCode"], "AreaCityName" => $infos_user//convert_text($datas["AreaCityName"]) ); $i++; } // Affiche le résultat si pas d'erreur if ($xml_output->bloc_exist("AreaCity")) $xml_output->parse_bloc("AreaCity", $listequartiers); // Retourne le code XML return $xml_output->exporte_xml(); } // Sinon affiche message d'erreur else return error("EHAreaCityRS", "EHAreaCityRS", $error); } } // ######################################################################### // Selection du Service $ServerEHAreaCityListServiceSOAP = new SoapServer("Test.wsdl"); // Ajout de la fonction de traitement du service SOAP $ServerEHAreaCityListServiceSOAP->setClass("AreaCity"); // Retourne le fichier XML $ServerEHAreaCityListServiceSOAP->handle(); } // Récupération des exceptions catch (Exception $e) { echo $e; } // Fermeture de la connection à la Base de Données mssql_close($data_base); ?>
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<?xml version="1.0" encoding="UTF-8"?> <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:eh="http://wota.###.com/xsd" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:ns="http://schemas.xmlsoap.org/soap/encoding/" name="EHAreaCityListService" targetNamespace="http://wota.###.com/xsd"> <wsdl:types> <xs:schema> <!-- Define data types --> <xs:element name="EHAreaCityRQ"/> <xs:element name="EHAreaCityRS"/> </xs:schema> </wsdl:types> <wsdl:message name="AreaCityListRequest"> <!-- Define operation and messages references --> <wsdl:part name="EHAreaCityRQ" element="EHAreaCityRQ"/> </wsdl:message> <wsdl:message name="AreaCityListResponse"> <!-- Define operation and messages references --> <wsdl:part name="EHAreaCityRS" element="EHAreaCityRS"/> </wsdl:message> <wsdl:portType name="AreaCityListPortType"> <wsdl:operation name="EHAreaCityRQ"> <!-- Define the request --> <wsdl:input message="eh:AreaCityListRequest"/> <wsdl:output message="eh:AreaCityListResponse"/> </wsdl:operation> </wsdl:portType> <wsdl:binding name="AreaCityListBinding" type="eh:AreaCityListPortType"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="EHAreaCityRQ"> <soap:operation soapAction="AreaCityList" style="document"/> <!-- Define SOAP binding --> <wsdl:input> <soap:body use="literal"/> </wsdl:input> <wsdl:output> <soap:body use="literal"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="EHAreaCityListService"> <wsdl:port name="AreaCityListPort" binding="eh:AreaCityListBinding"> <soap:address location="http://wota.###.com/wsdl/Test.php"/> <!-- Define SOAP interface width declarations binding --> </wsdl:port> </wsdl:service> </wsdl:definitions>
Un grand merci par avance à ceux qui me mettrons sur la piste
Partager