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