IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[Web Service][SOAP] Récupérer des paramètres dans l'entête


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2002
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 4
    Points : 3
    Points
    3
    Par défaut [Web Service][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 : 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
    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);
    ?>
    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
    <?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

  2. #2
    Membre actif Avatar de Mogwaï
    Inscrit en
    Mai 2004
    Messages
    247
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2004
    Messages : 247
    Points : 278
    Points
    278
    Par défaut
    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 !

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2002
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    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

  4. #4
    Membre actif Avatar de Mogwaï
    Inscrit en
    Mai 2004
    Messages
    247
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2004
    Messages : 247
    Points : 278
    Points
    278
    Par défaut
    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 !

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2002
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Merci tout de même de t'être attardé sur mon problème

Discussions similaires

  1. Réponses: 4
    Dernier message: 06/03/2016, 18h17
  2. [XL-2007] Web Service SOAP Fichier WSDL / Extraction des données dans un classeur
    Par crusaders dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 08/12/2014, 12h05
  3. affichage des données provenant d'un web service soap dans une listview
    Par nagca dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 04/07/2011, 17h11
  4. [RegEx] Récupérer des données dans une page Web
    Par Pragmateek dans le forum Langage
    Réponses: 8
    Dernier message: 24/05/2006, 19h44
  5. Récupérer des paramètres HTML dans un ActiveX
    Par mr.saucisse dans le forum MFC
    Réponses: 26
    Dernier message: 02/02/2006, 16h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo