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
J'obtiens un "Accès refusé".
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);
Méthode 2
De même, accès refusé.
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'));
Voici le schéma du wdsl :
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 <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>
Voilà pour les infos. Avez vous une idée pour résoudre ce soucis d'authentification lorsque je lance une requête ?
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
Merci pour votre aide.
Partager