Précédent   Forum des professionnels en informatique > 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 Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/01/2008, 18h02   #1
Invité de passage
 
Inscription : août 2002
Messages : 4
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 4
Points : 1
Points : 1
Envoyer un message via MSN à Dadou
Par défaut [SOAP] Récupérer des paramètres dans l'entête

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 :
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
Code :
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);
?>
et le wsdl
Code :
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
Dadou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2008, 18h25   #2
Membre confirmé
 
Avatar de Mogwaï
 
Inscription : mai 2004
Messages : 247
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : mai 2004
Messages : 247
Points : 243
Points : 243
Envoyer un message via MSN à Mogwaï
Je t'avouerais que moi même qui utilise SOAP (client ou serveur) régulièrement, je n'ai jamais utilisé SoapHeader et ne vois pas tellement son utilité...

Ton code m'a l'air anormalement compliqué, mais peut-être est-ce pour des raisons particulières ?
__________________
Etre à son compte, y'a rien de mieux !
Mogwaï est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2008, 20h58   #3
Invité de passage
 
Inscription : août 2002
Messages : 4
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 4
Points : 1
Points : 1
Envoyer un message via MSN à Dadou
J'ai comme contrainte d'utiliser une norme spécifique pour le tourisme OTA (Open Travel Alliance) entre le mal de chien à valider les XML et le besoin d'un systeme d'authentification pour le webservice, je commence serieusement à m'arracher les cheveux.


Comment fais tu toi pour les authentifications? puisqu'en fait les infos du header sont sensés me servir à ça
Dadou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2008, 09h47   #4
Membre confirmé
 
Avatar de Mogwaï
 
Inscription : mai 2004
Messages : 247
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : mai 2004
Messages : 247
Points : 243
Points : 243
Envoyer un message via MSN à Mogwaï
Pour l'authentification, je fais utiliser une clé unique qui est passée comme toutes les autres variables à chaque appel de procédure distante.

Maintenant, vu que tu es contraint par une norme et qu'apparement tu accèdes à un serveur qui fonctionne avec les headers, je ne peux pas vraiment t'apporter mon aide...

Je vais quand même surveiller ce topic, en espérant que quelqu'un en sache plus que moi
__________________
Etre à son compte, y'a rien de mieux !
Mogwaï est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2008, 13h51   #5
Invité de passage
 
Inscription : août 2002
Messages : 4
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 4
Points : 1
Points : 1
Envoyer un message via MSN à Dadou
Merci tout de même de t'être attardé sur mon problème
Dadou est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h54.


 
 
 
 
Partenaires

Hébergement Web