Webservice d'une machine distante

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Webservice d'une machine distante

Re: Webservice d'une machine distante

par Megadeth » 07 févr. 2011, 12:56

Bonjour et MERCI stealth35.
foreach ($result2 as $element2) {
echo htmlspecialchars($element2);
}
a bien renvoyé ce que j'attendais mais pourquoi ce stdClass Object ( [ExecuteSqlResult] => ) alors ?

Encore merci.

bien à toi !

Mega
;)

Re: Webservice d'une machine distante

par stealth35 » 07 févr. 2011, 12:14

Bonjour,

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

Mega
;)
oui c'est sans doute du XML, regarde dans la source HTML, ou fais un htmlspecialchars dessus

Re: Webservice d'une machine distante

par jojolapine » 07 févr. 2011, 10:46

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

Re: Webservice d'une machine distante

par Megadeth » 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
;)

Re: Webservice d'une machine distante

par Megadeth » 03 févr. 2011, 14:42

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

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

Re: Webservice d'une machine distante

par stealth35 » 03 févr. 2011, 14:19

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

Re: Webservice d'une machine distante

par Megadeth » 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
;)

Re: Webservice d'une machine distante

par stealth35 » 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

Re: Webservice d'une machine distante

par jojolapine » 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...

Re: Webservice d'une machine distante

par stealth35 » 02 févr. 2011, 16:48

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

Re: Webservice d'une machine distante

par Megadeth » 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
;)

Re: Webservice d'une machine distante

par jojolapine » 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?

Re: Webservice d'une machine distante

par Megadeth » 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
;)

Re: Webservice d'une machine distante

par jojolapine » 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!

Re: Webservice d'une machine distante

par Megadeth » 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
;)