Webservice d'une machine distante

Mammouth du PHP | 737 Messages

01 févr. 2011, 14:58

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
;)
Dyslexics are teople poo

ViPHP
ViPHP | 3607 Messages

01 févr. 2011, 20:42

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?

Mammouth du PHP | 737 Messages

02 févr. 2011, 11:08

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
;)
Dyslexics are teople poo

ViPHP
ViPHP | 3607 Messages

02 févr. 2011, 11:24

Bon ben ça à l'air de bien se passer ;)
Les membres en détresses devrait prendre exemple sur toi ;)

Bon courage pour la suite!

Mammouth du PHP | 737 Messages

02 févr. 2011, 15:35

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
;)
Dyslexics are teople poo

ViPHP
ViPHP | 3607 Messages

02 févr. 2011, 15:49

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?

Mammouth du PHP | 737 Messages

02 févr. 2011, 16:45

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
;)
Dyslexics are teople poo

ViPHP
ViPHP | 5462 Messages

02 févr. 2011, 16:48

pas besoin d'utiliser __call normalement on peux juste faire :
$result = $client->Login($param);

ViPHP
ViPHP | 3607 Messages

02 févr. 2011, 17:01

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...

ViPHP
ViPHP | 5462 Messages

02 févr. 2011, 17:41

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

Mammouth du PHP | 737 Messages

03 févr. 2011, 14:10

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
;)
Dyslexics are teople poo

ViPHP
ViPHP | 5462 Messages

03 févr. 2011, 14:19

c'est
try
{
    $result2 = $client2->ExecuteSql($param2);
}
catch(SoapFault $e)
{
    exit($e->getMessage());
}

Mammouth du PHP | 737 Messages

03 févr. 2011, 14:42

T'as le droit de dire le boulet =D>

J'ai pas d'erreur catchée :?
Dyslexics are teople poo

Mammouth du PHP | 737 Messages

07 févr. 2011, 10:36

Bonjour,

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

Mega
;)
Dyslexics are teople poo

ViPHP
ViPHP | 3607 Messages

07 févr. 2011, 10:46

Bonjour,
Que donne un
var_dump($result2->ExecuteSqlResult)
ou
var_dump($result2['ExecuteSqlResult'])
ou