Bonjour.

Je dois coder une fonction qui ferait appel à un Webservices (hyper classic) sur un site dont le site Serveur est accessible par login et mot de passe.

J'utilise un code PHP + Curl pour me loguer et cette partie là fonctionne.

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
  $ch = curl_init();
  $url = "http://mon_site_serveur_webservice";
  $user = "user";
  $password = "mot de passe";
  $fields = array( 'input_user'=>$user, 'input_pass'=>$password, 'submit_login'=>'Submit');
  $postvars = '';
  foreach($fields as $key=>$value) {
    $postvars .= $key . "=" . $value . "&";
  }
 
  curl_setopt($ch,CURLOPT_URL,$url);
  curl_setopt($ch,CURLOPT_HEADER, 0);
  curl_setopt($ch,CURLOPT_POST, True);                //0 for a get request
  curl_setopt($ch,CURLOPT_POSTFIELDS,$postvars);
  curl_setopt($ch,CURLOPT_RETURNTRANSFER, True);
  curl_setopt($ch,CURLOPT_FOLLOWLOCATION, True);
  curl_setopt($ch,CURLOPT_COOKIESESSION, true);
  curl_setopt($ch,CURLOPT_COOKIEJAR,'cookie.txt');
  curl_setopt($ch,CURLOPT_COOKIEFILE,'cookies.txt');
  curl_setopt($ch,CURLOPT_CONNECTTIMEOUT ,3);
  curl_setopt($ch,CURLOPT_TIMEOUT, 20);
 
  $response = curl_exec($ch);
  echo  "curl response is:" . $response."<br>";
  curl_close ($ch);
Cette partie là fonctionne parfaitement.

Avant la fermeture curl, j'insère mot code webservices 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
try
{
  $clientSOAP = new SoapClient( null,
    array (
      'uri' => 'http://mon_site/index.php?menu=rx_check_in&action=ws',
      'location' => 'http://mon_site/index.php?menu=rx_check_in&action=ws',
      'wsdl_cache' => 0,
      'trace' => 1,
      'exceptions' => 0
  ));
 
  $ret = $clientSOAP->__call('hello', array());
 
  echo $clientSOAP->__getLastResponse();
  echo $ret;
 
  echo '<br />';
 
  $ret = $clientSOAP->__call('donne', array('i'=>5));
  echo $ret;
 
}
catch(SoapFault $f)
{
  echo $f;
}
Et du coup, pas de connexion du webservice car, le contenu de __getLastResponse() m'affiche la page de login.
Donc perte de session ou pas la même.

Du coup, je me doute qu'il faille conserver la session ouverte.
J'essaye de glaner des infos là dessus, mais je n'y arrive pas.
Je ne sais pas si les deux codes peuvent utiliser la même session et comment.

Individuellement, sans authentification, le webservice fonctionne.
Je ne vois pas trop.

Si quelqu'un peut m'aider là dessus.

Franck