Bonjour à tous,

je cherche a créer un appel vers un webservice (wsdl/soap), mais je bute sur un soucis pour m'authentifier. C'est la première fois que j'utilise ce genre d'appel et de syntaxe, et malgré pas mal de temps passé sur les forums et autres, je n'ai malheureusement pas trouvé la solution. J'ai essayé plusieurs méthodes sans succès.
Voici le code que j'utilise :

Méthode 1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
$client_url = 'http://server.com/applicatifs.wsdl';
$options['exceptions'] = TRUE;
$options['trace'] = TRUE;
$client = new SoapClient($client_url, $options);
$headers = new SoapHeader("http://www.llnw.com/Reporting","AuthHeader",array("Username"=>"login","Password"=>"password"));
$response = $client->__soapCall("operation",array('valeur'),NULL,$headers);
J'obtiens un "Accès refusé".

Méthode 2
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
 
$client_url = 'http://server.com/applicatifs.wsdl';
$options['exceptions'] = TRUE;
$options['trace'] = TRUE;
$client = new SOAPClient($client_url, $options);
$username = 'login';
$password = 'password';
$wsse_ns = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd';
$security = new SoapVar(
						  array(new SoapVar(
							array(
							  new SoapVar($username, XSD_STRING, NULL, NULL, 'username', $wsse_ns),
							  new SoapVar($password, XSD_STRING, NULL, NULL, 'password', $wsse_ns),
							),
							SOAP_ENC_OBJECT,
							NULL,
							NULL,
							'UsernameToken',
							$wsse_ns
							)),
						  SOAP_ENC_OBJECT
						);
$headers[] = new SoapHeader($wsse_ns, 'Security', $security, FALSE);
$client->__setSoapHeaders($headers);
$response = $client->__soapCall("operation",array('valeur'));
De même, accès refusé.

Voici le schéma du wdsl :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
<wsdl:types xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://server.com/">
      <xsd:complexType name="AuthHeader">
        <xsd:sequence>
          <xsd:element name="username" type="xsd:string"/>
          <xsd:element name="password" type="xsd:string"/>
        </xsd:sequence>
      </xsd:complexType>
      <xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="AuthHeaderElement" type="tns:AuthHeader"/>
    </xsd:schema>
  </wsdl:types>
Voici le schéma de l'opération :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
Operation type:Request-response. The endpoint receives a message, and sends a correlated message.
     SOAP action:http://server.com/operation
          Input:operationRequest (soap:body, use = literal, part = AuthHeader)
               AuthHeader type AuthHeaderElement
                    username type string
                    password type string
               valeur type int
         Output:operationResponse (soap:body, use = literal, part = AuthHeader)
              AuthHeader type AuthHeaderElement
                    username type string
                    password type string
             result type string
Voilà pour les infos. Avez vous une idée pour résoudre ce soucis d'authentification lorsque je lance une requête ?
Merci pour votre aide.