Php5 + soap

Signaler
Messages postés
13
Date d'inscription
jeudi 27 mars 2003
Statut
Membre
Dernière intervention
14 mars 2006
-
Messages postés
13
Date d'inscription
jeudi 27 mars 2003
Statut
Membre
Dernière intervention
14 mars 2006
-
Bonjour,
étant débutant en php (quelques notions de VB) je rencontre un problème avec l'utilisation de SOAP (php5).

Mon problème est que je dois génerer une requête SOAP avec une entête de ce genre :

<soap:Header>

string

<Culture>string</Culture>


<Name>string</Name>
string



</soap:Header>

Après plusieurs tuto et quelques doc je vois qu'il existe un constructeur 'new soapHeader()' qui s'ecrit :
$head = new soapHeader ("le name space", "le nom de l entete", "le contenue de l entete")

Mon probleme est qu' avec cet appel je n'arrive pas à generer mon entête comme voulu

Ex:
$entete = '<soap:Header>

 string 

<Culture>string</Culture>


<Name>string</Name>
string



</soap:Header>';

$head = new soapHeader("monnamspace","entete",$entete);
cet appel donne ca :
<soap:Header>
<entete>

string

<Culture>string</Culture>


<Name>string</Name>
string



</entete>
</soap:Header>

Ou "entete" est le second paramaetre de "soapHeader()", j ai aussi essayer sous forme de tableau, d'objet ...
Rien a faire je m en sort pas ...
j ai aussi vu k'il y a la fonction "setSoapHeaders()" mais encore une fois sans résultata pour moi ...

Si quelqu'un pouvait me donner un coup de main, m'aiguiller sur une idée ce serai super cool !

merci d'avance =)

Ps : j'ai essayé et ca fonctionne avec NuSoap ("en local) mais le serveur sur lequel je dois poser le script n'est pas en local et n' pas NuSoap ....

'one day programming kicks my ass ' =]-

8 réponses

Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
Hello,

heu, il faudra que tu expliques mieux quel est ton problème. L'extension Soap dont tu parles n'est pas en standard dans php, mais je suppose que tu as installé ce qu'il faut...?

Ensuite, SOAP, c'est un flux xml, c'est tout. Et générer un flux xml en php n'est pas sorcier.

Enfin, après avoir lu un peu la doc sur cette extension que je n'ai jamais utilisée, je te suggèrerais d'utiliser __soapCall () en conjonction avec ton soapHeader ().

http://fr.php.net/manual/fr/function.soap-soapclient-soapcall.php
Messages postés
13
Date d'inscription
jeudi 27 mars 2003
Statut
Membre
Dernière intervention
14 mars 2006

slt malalam,

avec php 5 l'extension soap devient un standard : 248 http://www.afup.org/article.php3?id_article=248 donc pas besoin d'instalation particulière.
Ensuite Soap n'est pas qu'un flux XML mais est basé comme : http://developpeur.journaldunet.com/tutoriel/xml/010707xml_soap.shtml

J'utilise deja la fontion __soapCall qui permet "d'executer une requête", son cartouche :

class SoapClient {

mixed __soapCall ( string function_name [, array arguments [, array options [, mixed input_headers [, array &output_headers]]]] )

}

String function_name = Le nom de la fontction a appelé : OK
En cas d'utilisation de SOAP en mode WSDl , ce qui est mon cas, seul ce paramètre est necessaire.

Mais cela ne résolu pas mon probleme de "formatage" d'entête ...

Pour rappel voila le format d'entête que j aimerai avoir :

string

<Culture>string</Culture>


<Name>string</Name>
string



</soap:Header>

Merci quand même ;)

'one day programming kicks my ass ' =]-
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
C'est pas ce qu'il y a de marqué sur la doc, mais si tu le dis, je te crois :-) (c'est un standard, mais pas fourni en standard au complet)

Et je sais ce qu'est SOAP, j'ai pas mal travaillé avec. Et je te garantis qu'on s'en sort très bien sans l'extension concernée. Et je ne comprends toujours pas ton problème pour construire ton header : c'est un flux xml...

Si ça peut t'aider, il y a quelques threads et articles interessants sur le net :
http://www.suraski.net/blog/index.php?/archives/5-PHP-5s-SOAP-extension-and-SalesForce.html
http://classes.scriptsphp.org/article.Construire-un-service-web-en-php-5
Messages postés
13
Date d'inscription
jeudi 27 mars 2003
Statut
Membre
Dernière intervention
14 mars 2006

Por construire une "enveloppe" soap de ce genre :

<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>
<entete> aaaa </entete>
</soap:Header>
<soap:Body>
<Fonction xmlns="nameSpace" />
</soap:Body>
</soap:Envelope>

voici le code :
//on creer le client
$client=new soapclient('adresse du fichier wsdl');

//on creer le Header
$head = new soapHeader("nameSpace", "entete","aaaa");

//appel de la foction voulu en locurence celle-ci n'a pas de parametre
$client->__soapCall('Fonction', $tableauDeParam,$tableauDoptions,$head);

Seulement ce que j aimerai c'est ca :

<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>
<entete> aaaa </entete>
<entete2> bbbb </entete2>
</soap:Header>
<soap:Body>
<Fonction xmlns="nameSpace" />
</soap:Body>
</soap:Envelope>

......?......?.....

Ps : example de code avec NuSoap qui fonctionne tres bien chez moi
$client=new soapclient('...../..../Export.asmx');
$client->setHeaders('

xxxxx

<Culture />


<Name>xxxxx</Name>
xxxxx



');

//Fonction a apeller,Parametre,Namespace,SoapAction
$result=$client->call('ExportPrice',"","","SoapAction");

'one day programming kicks my ass ' =]-
Messages postés
1662
Date d'inscription
lundi 16 septembre 2002
Statut
Membre
Dernière intervention
30 juillet 2008
1
Perso, je n'ai pas vu de modification sur www.php.net/soap depuis un bon bout étant traducteur.

, EssayezTestez avant de Poser une question !
http://www.lookstrike.com
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
ahhhh,

mais __soapCall prend une variable de "type" mixed pour les headers en input :

mixed __soapCall ( string function_name [, array arguments [, array options [, mixed input_headers [, array &output_headers]]]] )

Ce qui veut dire que tu dois logiquement pouvoir mettre un tableau de headers.
Messages postés
13
Date d'inscription
jeudi 27 mars 2003
Statut
Membre
Dernière intervention
14 mars 2006

ok, kool pour les tableaux mais c'est la mon problème, je ne sais pas comment arriver à ce resultat :

<soap:Header>
<entete>
aaaa 

bbb</code2>
   </entete>
   <entete2> 
       <code>bbbb 

<code2>ccc</code2>
</entete2>
</soap:Header>

'one day programming kicks my ass ' =]-
Messages postés
13
Date d'inscription
jeudi 27 mars 2003
Statut
Membre
Dernière intervention
14 mars 2006

Ok j ai trouvé ;)

je post dans le cas ou quelqu'un ai le mm pb :

//On creer deux nouveau header
$head2 = new SoapHeader ("NameSpace", "Partner", array('Name'=>xxxx,'Password'=>xxxx),true);
$head1 = new SoapHeader ("NameSpace", "Agency", array('Code'=>xxx,'Culture'=>'xxxx'), true);


//on en fait un tableau
$head4 = array($head1,$head2);

//on creer le client
$client = new SoapClient("URL du WSDl");

//Appel de la fonction avec le tableau d' header
$response = $client->__soapCall("Fonction",array(),array(),$head4);

le resultat du header :
<soap:Header>

aaaa 

<Culture>bbb</Culture>

<Partner>
<Name>bbbb </Name>
ccc


</Partner>
</soap:Header>

Merci pour votre aide !

'one day programming kicks my ass ' =]-