Page 1 sur 2

Webservice d'une machine distante

Posté : 01 févr. 2011, 14:58
par Megadeth
Bonjour,

Je cherche depuis mon site a appelé un webservice sur une machine distante. Est-ce possible ?

Quelqu'un pourrait-il m'indiquer la marche à suivre svp merci. Je n'ai jamais fait et avoue être un peu perdu...

Cdlt,

Mega
;)

Re: Webservice d'une machine distante

Posté : 01 févr. 2011, 20:42
par jojolapine
Bonsoir,
Qu'entends-tu par "webservice"?
C'est du SOAP, du REST, d'autres trucs exotiques?
C'est toi qui t'en occupes de ce web service? sinon quel est le site?

Re: Webservice d'une machine distante

Posté : 02 févr. 2011, 11:08
par Megadeth
Bonjour jojolapine,

Oui, je dois faire appel à un webservice (que je ne gère pas) sur une machine distante via SOAP.

Je commence à me familiariser avec la mécanique, je m'en faisais toute une montagne et finalement ca semble "plutôt simple".

Voilà ce que j'ai fait (ca peut servir pour d'autres)
<?php
$client = new SoapClient("http://xx.xx.xx.xx/LesServices/MonServiceEnQuestion.asmx?wsdl");
//pour récupérer toutes les méthodes du service en question
$arFunctions = $client->__getFunctions();
foreach ($arFunctions as $function) {
echo $function.'<br/>'."
";
}

//mini-test perso
echo '<h2>';
echo date("d-m-Y");
echo '</h2>';

try{ 

	$client = new SoapClient("http://xx.xx.xx.xx/LesServices/MonServiceEnQuestion.asmx?wsdl");
  
	$param = array('MaFonction' => array('champ1'=>'valchamp1', 'champ2'=>'valchamp2', 'champ3'=>'valchamp3'));
  
	print_r($param); 
  
	$result = $client->__soapCall ('MaFonction', $param);

	print_r($result); 

		} catch (SoapFault $fault) {

	echo 'erreur : '.$fault;

}

?>
Mega
;)

Re: Webservice d'une machine distante

Posté : 02 févr. 2011, 11:24
par jojolapine
Bon ben ça à l'air de bien se passer ;)
Les membres en détresses devrait prendre exemple sur toi ;)

Bon courage pour la suite!

Re: Webservice d'une machine distante

Posté : 02 févr. 2011, 15:35
par Megadeth
Merci !

Par contre pour pallier à un souci "j'avais" mis mes valeurs dans un autre array puisque la page me renvoyait : stdClass Object ( [LoginResult] => )

Ce qui donnait : $param = array('Login' => array('champ 1'=>'valeur en dur 1', 'champ 2'=>'valeur en dur 2', 'champ 3 '=>'valeur en dur 3'));

Et j'ai beau faire la même chose avec une autre méthode :

$new = array('Fonction2' => array('param1'=>'val1', 'param2'=>'val2'));

J'obtiens un stdClass Object ( [Fonction2Result] => )

Bizarre, non ? J'ai tenté de ré-encapsuler le tout, en vain...

Mega
;)

Re: Webservice d'une machine distante

Posté : 02 févr. 2011, 15:49
par jojolapine
J'ai pas trop compris de quoi tu parles :?
Que donne un var_dump() du retour de la fonction appelée et pourquoi pose-t-il problème?

Re: Webservice d'une machine distante

Posté : 02 févr. 2011, 16:45
par Megadeth
Je m'explique, la première étape était de récupérer un id de session.
La 2ème étape est d'exécuter à partir de l'id de session une requête SQL basique $req.
Le résultat doit produire un xml...

A partir de :
$result = $client->__soapCall ('Login', $param)
;

J'ai fait ceci pour récupérer l'id :
foreach ($result as $element) {
$param2 = array('ExecuteSql' => array('id'=>$element, 'requete'=>$req));
}
J'ai ensuite fait :
$result2 = $client2->__soapCall ('ExecuteSql', $param2);
mais nada, nothing, que de chi à part :

stdClass Object ( [ExecuteSqlResult] => )

Il faut utiliser autre chose que __soapCall ? Il faut se tourner vers __doRequest ou ca n'a rien à voir ?

un var_dump de $result2 donne : object(stdClass)#4 (1) { ["ExecuteSqlResult"]=> string(283) "" }

Ca te parle, c'est plus clair ?

Mega
;)

Re: Webservice d'une machine distante

Posté : 02 févr. 2011, 16:48
par stealth35
pas besoin d'utiliser __call normalement on peux juste faire :
$result = $client->Login($param);

Re: Webservice d'une machine distante

Posté : 02 févr. 2011, 17:01
par jojolapine
Attention tout de même la méthode est obsolète aux dire de la doc : http://fr.php.net/manual/fr/soapclient.call.php

Pour ton problème il faudrait que tu tests ta requête soap séparément...
Tu te débrouilles pour avoir un id de session dont tu es sûr de l’existence et tu test le tout en dur...

Re: Webservice d'une machine distante

Posté : 02 févr. 2011, 17:41
par stealth35
Attention tout de même la méthode est obsolète aux dire de la doc : http://fr.php.net/manual/fr/soapclient.call.php

Pour ton problème il faudrait que tu tests ta requête soap séparément...
Tu te débrouilles pour avoir un id de session dont tu es sûr de l’existence et tu test le tout en dur...
appeler directement via __call est obsolète :wink:


Megadeth > fait des bloque try..catch avec des SoapFault en exception

Re: Webservice d'une machine distante

Posté : 03 févr. 2011, 14:10
par Megadeth
Bonjour Messieurs,

Je ne vois pas comment sortir une exception car la ligne concernée est :
$result2 = $client2->__soapCall ('ExecuteSql', $param2);
Le résultat retourné est :
stdClass Object ( [ExecuteSqlResult] => ) 
Le var_dump, lui, renvoie :
object(stdClass)#4 (1) { ["ExecuteSqlResult"]=> string(283) "" } 
Cdlt,

Mega
;)

Re: Webservice d'une machine distante

Posté : 03 févr. 2011, 14:19
par stealth35
c'est
try
{
    $result2 = $client2->ExecuteSql($param2);
}
catch(SoapFault $e)
{
    exit($e->getMessage());
}

Re: Webservice d'une machine distante

Posté : 03 févr. 2011, 14:42
par Megadeth
T'as le droit de dire le boulet =D>

J'ai pas d'erreur catchée :?

Re: Webservice d'une machine distante

Posté : 07 févr. 2011, 10:36
par Megadeth
Bonjour,

Si le var_dump renvoie ... { ["ExecuteSqlResult"]=> string(283) "" }, ca veut dire que mon tableau ExecuteSqlResult contient quelque chose ?

Mega
;)

Re: Webservice d'une machine distante

Posté : 07 févr. 2011, 10:46
par jojolapine
Bonjour,
Que donne un
var_dump($result2->ExecuteSqlResult)
ou
var_dump($result2['ExecuteSqlResult'])
ou