Bonjour,

Je cherche à consommer un WebService en utilisant SoapClient de php.
Avant de me lancer j'ai voulu voir les résultats que j'allais recevoir en utilisant une requête, j'ai donc utilisé SoapUI.
Je dois envoyer un certificat SSL, j'utilise le fichier WSDL qui m'a été donné et je reçois bien une réponse avec plusieurs éléments...

Du coup je passe à la partie php en essayant de reproduire le même test avec la même requête et le même fichier wsdl.
Voici mon code :
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
34
35
36
37
38
39
40
41
42
43
44
45
$context = stream_context_create(
            array(
                "ssl" => array(
                    "verify_peer" => true,
                    "local_cert"  => $cert_file
                )
            )
        );
        $settings = array(
            'trace'              => 1,
            'exceptions'         => 1,
            'soap_version'       => SOAP_1_1,
            'stream_context'     => $context
        );
        $client = new SoapClient($wsdl_file, $settings);
        $params = new stdClass();
        $params->ActivityStatus = array(
            'item' => 'PRIS'
        );
        $params->EndDateHigh = '2016-12-12';
        $params->EndDateLow = '2016-07-12';
        $params->FolderType = array(
            'item' => '09'
        );
        $params->User = 'SDDJ7206';
        //USER SDDJ7206 ou HQJV4127
        $header = new \SoapHeader('http://schemas.microsoft.com/ws/2005/05/addressing/none', 'Action', null, false);
        $client->__setSoapHeaders($header);
        try{
            $result = $client->ZetrActivityList($params);
            echo "====== REQUEST HEADERS =====" . PHP_EOL;
            var_dump($client->__getLastRequestHeaders());
            echo "========= REQUEST ==========" . PHP_EOL;
            var_dump($client->__getLastRequest());
            echo "========= RESPONSE HEADER =========" . PHP_EOL;
            var_dump($client->__getLastResponseHeaders());
            echo "========= RETURN RESPONSE =========" . PHP_EOL;
            var_dump($client->__getLastResponse());
            echo "========= RESPONSE =========" . PHP_EOL;
            var_dump($result);
        }
        catch(Exception $e){
            echo $e;
            var_dump($client);
        }
$cert_file est un lien vers mon certificat en .pem, $wsdl_file est le path du fichier wsdl.

Voici ce que j'obtiens :
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
====== REQUEST HEADERS =====
 
C:\wamp64\www\Services\cemaphore\app\Controller\XmlController.php:85:string 'POST /xxxxxxx/xxxxxx
 
Host:  xxxxxxxxxxxxxxx.com //pour des raisons de sécurité, je dois masquer le HOST
 
Connection: Keep-Alive
 
User-Agent: PHP-SOAP/7.0.10
 
Content-Type: text/xml; charset=utf-8
 
SOAPAction: ""
 
Content-Length: 574
 
 
 
' (length=196)
 
========= REQUEST ==========
 
C:\wamp64\www\Services\cemaphore\app\Controller\XmlController.php:87:string '<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:sap-com:document:sap:soap:functions:mc-style" xmlns:ns2="http://schemas.microsoft.com/ws/2005/05/addressing/none"><SOAP-ENV:Header><ns2:Action/></SOAP-ENV:Header><SOAP-ENV:Body><ns1:ZetrActivityList><ActivityStatus><item>PRIS</item></ActivityStatus><EndDateHigh>2016-12-12</EndDateHigh><EndDateLow>2016-07-12</EndDateLow><FolderType><item>09</item></FolderType><User>SDDJ7206</User></ns1:ZetrActivityList></SOAP-ENV:Body></SOAP-ENV:Envelope>
' (length=574)
 
========= RESPONSE HEADER =========
 
C:\wamp64\www\Services\cemaphore\app\Controller\XmlController.php:89:string 'HTTP/1.1 200 OK
 
X-Backside-Transport: OK OK
 
Connection: Keep-Alive
 
Transfer-Encoding: chunked
 
Date: Fri, 15 Dec 2017 16:26:35 GMT
 
Server: Apache
 
Content-Type: text/xml; charset=UTF-8
 
X-Client-IP: xx.xx.xx.xxx
 
' (length=217)
 
========= RETURN RESPONSE =========
 
C:\wamp64\www\Services\cemaphore\app\Controller\XmlController.php:91:string '<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Header><t:trackingHeader xmlns:t="http://www.xxxxxxxxx.com" xmlns:date="http://exslt.org/dates-and-times" xmlns:str="http://exslt.org/strings" xmlns:regExp="http://exslt.org/regular-expressions"><t:requestId>38b902a2-a282-4aa9-ae2b-333ae1e82684</t:requestId><t:timestamp>2017-12-15T17:26:35+01:00</t:timestamp></t:trackingHeader></soap:Header><soap:Body><ns2:ZetrActivityListResponse xmlns:ns2="urn:sap-com:document:sap:soap:functions:mc-style"><Folders/><Messages/><ReturnCode/></ns2:ZetrActivityListResponse></soap:Body></soap:Envelope>' (length=665)
 
========= RESPONSE =========
 
C:\wamp64\www\Services\cemaphore\app\Controller\XmlController.php:93:
object(stdClass)[11]
  public 'Folders' => 
    object(stdClass)[12]
  public 'Messages' => 
    object(stdClass)[13]
  public 'ReturnCode' => string '' (length=0)
Désolé mais je suis obligé de masquer certaines info (liens et IP). Donc comme vous pouvez le voir, la connexion est ok mais le retour est vide. La seul chose qui est différente, c'est la syntax de la requête voici celle envoyé avec soapUI

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
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
    <Action s:mustUnderstand="0" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none" />
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <ZetrActivityList xmlns="urn:sap-com:document:sap:soap:functions:mc-style">
        <ActivityStatus xmlns="">
            <item>PRIS</item>
        </ActivityStatus>
        <CleSite xmlns="" />
        <CodeInsee xmlns="" />
        <EndDateHigh xmlns="">2016-12-12</EndDateHigh>
        <EndDateLow xmlns="">2016-07-12</EndDateLow>
        <FolderType xmlns="">
            <item>09</item>
        </FolderType>
        <IdPlaque xmlns="" />
        <ProjectStatus xmlns="" />
        <User xmlns="">HQJV4127</User>
    </ZetrActivityList>
</s:Body>
</s:Envelope>
Je ne sais pas si il me manque un paramètre dans ma configuration mais je ne pense pas être très loin... Merci pour vos retours !