Bonjour,
débutant en Webservices avec php, je suis amené dans mon projet à développer un client soap en php.
La partie serveur étant une "boite noire", je ne dispose que de l'url du fichier wsdl.
La récupération des types et fonctions possibles du coté serveur se trouvent ici :
(Résultat du code php)
<h1>Les fonctions </h1>
GetObjectsResponse GetObjects(GetObjectsRequest $request)
ExecuteChangesResponse ExecuteChanges(ExecuteChangesRequest $request)
ObjectSetType ExecuteSearch(SearchRequestType $request)
GetSearchMetadataResponse GetSearchMetadata(GetSearchMetadataRequest $request)
<h1>Les types </h1>
string GuidType
struct PropertyType { string propertyId; boolean settable; }
struct ModifiablePropertyType { }
.....
La ou je coince c'est que pour appeller ces fonctions je dois m'authentifier à l'application via la classe SoapHeader.
Malgré la création d'une instance de soapHeader, l'appel de la fonction me requiert toujours l'authentification.
Voici la norme requise pour la création de l'header correcte fourni par la documentation coté serveur.
An example XML schema for a security header is shown below.
<wsse:Security xmlns:wsse={see below}>
<wsse:UsernameToken>
<wsse:Username>{username}</wsse:Username>
<wsseassword>{password}</wsseassword>
</wsse:UsernameToken>
</wsse:Security>
The namespace for which the wsse: prefix is used above can be any one of the following, reflecting different versions of the WS-Security specification:
* http://schemas.xmlsoap.org/ws/2002/04/secext
* http://schemas.xmlsoap.org/ws/2002/07/secext
* http://schemas.xmlsoap.org/ws/2002/12/secext
* http://schemas.xmlsoap.org/ws/2003/06/secext
* http://www.docs.oasis-open.org/wss/2...secext-1.0.xsd
* http://docs.oasis-open.org/wss/2004/...secext-1.0.xsd
Pour info : je n'utilise pas nusoap mais l'extention de php 5
Voici le code coté client :
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
30
31
32
33 <?php define ("URLWSDL", 'http://monserver/FNCEWS35SOAP/WSDL'); ini_set("soap.wsdl_cache_enabled", false); try { // Log in using the list owner's id and password $username="test"; $password="test"; //création du webservice $client = new soapclient(URLWSDL); //création de l'header $params = array( "Username" => $username,"Password" => $password); ... $headerSOAP=new SoapHeader("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd",$params['Username'],$params['Password']) ; ..... $client->__setSoapHeaders($headerSOAP); echo $client->__soapcall("getObjects", array($idmType,$guid)); ..... }catch(Exception $e) { print $e; }
Le résultat de l'appel de la fonction me retourne exeption soaph : SoapFault exception: [SOAP-ENV:Server] The user is not authenticated.
De plus, pourriez vous me dire pourquoi j'ai une représentation de mon code source PHP le tout en commentaire visible sur le navigateur lors de la création de l'header c'est à dire à cette ligne : $headerSOAP=new SoapHeader("....",$params['Username'],$params['Password']) ;
Merci d'avance pour votre aide.
Au cas où, il faut fournir le wsdl , je peux le poster
Partager