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 :
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>
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 :
Le code qui génère tout cette requete SOAP :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>
CODE 3 :
Donc certaines choses que je trouve étranges déjà :
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 $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>"; }
- 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
Partager