Php5 + soap

B4loo Messages postés 13 Date d'inscription jeudi 27 mars 2003 Statut Membre Dernière intervention 14 mars 2006 - 7 févr. 2006 à 10:29
B4loo Messages postés 13 Date d'inscription jeudi 27 mars 2003 Statut Membre Dernière intervention 14 mars 2006 - 7 févr. 2006 à 15:45
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

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
7 févr. 2006 à 10:47
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
0
B4loo Messages postés 13 Date d'inscription jeudi 27 mars 2003 Statut Membre Dernière intervention 14 mars 2006
7 févr. 2006 à 11:01
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 ' =]-
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
7 févr. 2006 à 11:49
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
0
B4loo Messages postés 13 Date d'inscription jeudi 27 mars 2003 Statut Membre Dernière intervention 14 mars 2006
7 févr. 2006 à 12:16
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 ' =]-
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008
7 févr. 2006 à 13:10
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
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
7 févr. 2006 à 13:23
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.
0
B4loo Messages postés 13 Date d'inscription jeudi 27 mars 2003 Statut Membre Dernière intervention 14 mars 2006
7 févr. 2006 à 14:58
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 ' =]-
0
B4loo Messages postés 13 Date d'inscription jeudi 27 mars 2003 Statut Membre Dernière intervention 14 mars 2006
7 févr. 2006 à 15:45
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 ' =]-
0