Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
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 18/05/2011, 15h35   #1
Invité de passage
 
Homme
Développeur informatique
Inscription : mai 2011
Messages : 3
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : mai 2011
Messages : 3
Points : 0
Points : 0
Par défaut Webservice SOAP Paramètres

Bonjour,
Il s'agit de mon premier post vu que le plus souvent je trouve la réponse par moi même, mais là....

J'ai actuelement un problème pour la construction du BODY d'un webservice SOAP en PHP.
En gros je n'arrive pas à construire correctement les paramètres à fournir au WS.

Voici le type de requete SOAP que je dois envoyer :

CODE 1 :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <AuthHeader xmlns="http://service.smartadserver.com/">
      <UserName>string</UserName>
      <Password>string</Password>
    </AuthHeader>
  </soap:Header>
  <soap:Body>
    <GetCampaigns xmlns="http://service.smartadserver.com/">
      <AdvertiserID>int</AdvertiserID>
    </GetCampaigns>
  </soap:Body>
</soap:Envelope>
Au niveau du Header et des paramètres d'authentification, aucun problème, ca passe nikel, vu que lorsque la fonction appelée n'a pas besoin de paramètres, j'ai des résultats.

C'est seulement lorsque je dois fournir des paramètres que je bloque.

J'ai essayé de passer un tableau de paramètres (indexé, associatif...) lors de l'appel à la fonction et ça ne marchait pas.
J'en suis arrivé à essayer avec l'objet SoapParam puisque j'ai constaté en debug qu'il me manquait un noeud xml.
cette dernière tentative donne çeci :

CODE 2 :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://service.smartadserver.com/">
	<SOAP-ENV:Header>
		<ns1:AuthHeader>
			<ns1:UserName>***</ns1:UserName>
			<ns1:Password>***</ns1:Password>
		</ns1:AuthHeader>
	</SOAP-ENV:Header>
	<SOAP-ENV:Body>
		<ns1:GetCampaigns/>
		<AdvertiserId>2805</AdvertiserId>
	</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Le code qui génère tout cette requete SOAP :
CODE 3 :
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
 
$wsdl = 'http://service.smartadserver.com/v25/service.asmx?WSDL';
 
//appel du wsdl
$client = new SoapClient($wsdl, array('trace'=> 1));
 
//construction du Header
$paramHeader = array('UserName' =>'***', 'Password' =>'***' );
$nsHeader = "http://service.smartadserver.com/";
$header = new SoapHeader($nsHeader,'AuthHeader',$paramHeader );
 
//parametres
$paramB = new SoapParam("2805","AdvertiserId");
 
 
//envoi de la requete SOAP
 
try {
	$res = $client->__soapCall('GetCampaigns',array( '',$paramB), NULL, $header);
} catch (Exception $e) {
	echo $e;
 
	$res = $client->__getLastResponse();
	$requestH = $client->__getLastRequestHeaders();
	$request = $client->__getLastRequest();
 
	echo "<p>" . htmlentities($requestH) . "</p>";
	echo "<p>" . htmlentities($request) . "</p>";
}
Donc certaines choses que je trouve étranges déjà :
- dans l'appel à la méthode __soapCall (cf CODE 3), si je ne fourni pas un array avec comme premiere valeur ' ', $paramB n'est pas pris en compte. Peut importe le nombre de paramètres, il ignorera toujours la valeur en position 0. Je ne comprends pas pourquoi.

- le premier point n'étant pas vraiment génant, je me penche plutot sur ce qui me pose vraiment problème :
dans la requete que j'envoie (Cf CODE 2), j'ai ce noeud qui vient se coller <ns1:GetCampaigns/>. Je sais pas ce qu'il vient faire la, et il m'empeche de construire correctement ma requête... D'après le schéma de requete que je dois envoyer (cf CODE 1), il lui faut un noeud + valeur. Quand je vois ça "<ns1:GetCampaigns/>" (cf CODE 2), il semble attendre des attributs...

Je vous remercie d'avances pour vos réponses/aides/pistes/suggestions

Bien cordialement,
Guillaume
GuillaumeCo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 15h54   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
pas la peine d'utilise __soapCall le SOAP c'est fait pour ne pas ce soucier du langage donc fait direct :

Code :
$client->GetCampaigns(...)
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 16h08   #3
Invité de passage
 
Homme
Développeur informatique
Inscription : mai 2011
Messages : 3
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : mai 2011
Messages : 3
Points : 0
Points : 0
Bon, j'étais justement entrain de faire les modifs pour utiliser directement la méthode .

Essai concluant puisque j'obtiens mes résultats.

L'apparition du noeud intru "<ns1:GetCampaigns/>" est bien lié à l'appel de la fonction.

Seulement la raison pour laquelle j'ai préféré utiliser __soapCall, c'est que je manipule environ une vingtaine de webservices. J'ai donc fait une méthode générique de récupération de la méthode a appeler puis de mise en forme de la réponse. __soapCall me permettait justement de stocker la méthode à appeler dans une variable. Et je ne vois pas comment faire ca avec l'autre méthode.

Bien cordialement,
Guillaume
GuillaumeCo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 16h21   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
pareil
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 16h29   #5
Invité de passage
 
Homme
Développeur informatique
Inscription : mai 2011
Messages : 3
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : mai 2011
Messages : 3
Points : 0
Points : 0
Merci

J'avançai avec des oeillères tellement énormes que j'avai zapé ça ><
GuillaumeCo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h43.


 
 
 
 
Partenaires

Hébergement Web