PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Authentification SOAP
Authentification SOAP
Débuté par Olivier L., 10 sep. 2009 12:10 - 2 réponses
Posté le 10 septembre 2009 - 12:10
Bonjour,

Cette question a déjà été posée sur plusieurs forums mais toujours sans réponse...

J'aimerais savoir comment peut-on s'authentifier sur un Web Service SOAP sur un site en PHP?

Voici le code PHP qui fonctionne :

<?php
include("../../config/config.inc.php");
class SoapHeaderAuthUser {

/** @var string */
public $login;
/** @var string */
public $password;

public function __construct($login, $password) {
$this->login = $login;
$this->password = $password;
}
}
try {
$options = Array(
'trace' => true,
'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP
);

$client = new SoapClient(WEB_PATH."soap/service.php?class=biens&wsdl", $options);
$loginpassword = new SoapHeaderAuthUser("monlogin", "monpassword");
$soapHeaders[] = new SoapHeader(WEB_PATH.'soap/', 'authUser', $loginpassword);
$client->__setSoapHeaders($soapHeaders);

$res = $client->getBiens("", "`id`");

foreach($res as $bien) {
echo $bien->id.": ".utf8_decode($bien->commune).", ".utf8_decode($bien->ville)."<br />";
}

} catch(Exception $e) {

echo $e->getMessage();
echo "<hr><strong>Raw Soap response:</strong><br>";
echo htmlentities($client->__getLastResponse());
echo "<hr><strong>Raw Soap request:</strong><br>";
echo htmlentities($client->__getLastRequest());

}

?>

Pour l'authentification, j'utilise
SOAPAjouteEntête("authUser","login:monlogin,password:monpassword","http://www.monsite.be/soap/",Vrai)
J'ai comme résultat "Invalid Account".
Quand je vois le code PHP, le paramètre ajouté dans le header soap est un objet. Hors si je fais la même chose sous Windev, SOAPAjouteEntête n'accepte pas un objet en paramètre, il faut absolument une chaine de caractères. Comment dois-je faire pour envoyer monlogin et monpassword ?

Merci d'avance
Posté le 10 septembre 2009 - 12:34
Bonjour,

je ne vais pas apporter la solution, mais la façon dont j'opère lorsque
j'ai ce type de problème.

Mettre en place sur le serveur les logs, ou un outil sur le poste client
permettant de récupérer tous les échanges sur le port 80.

Faire un test avec une page html et faire un test avec windev et
comparer le contenu (dans les logs ou le sniffer) et adapter le code en
conséquence.

En fonction des tests tu seras où agir, et si les fonctions SOAP de
windev ne permettent pas de structurer correctement ton message, tu
devras passer par httprequete.

Olivier L. a écrit :
Bonjour,

Cette question a déjà été posée sur plusieurs forums mais toujours sans réponse...

J'aimerais savoir comment peut-on s'authentifier sur un Web Service SOAP sur un site en PHP?

Voici le code PHP qui fonctionne :

<?php
include("../../config/config.inc.php");
class SoapHeaderAuthUser {

/** @var string */
public $login;
/** @var string */
public $password;

public function __construct($login, $password) {
$this->login = $login;
$this->password = $password;
}
}
try {
$options = Array(
'trace' => true,
'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP
);

$client = new SoapClient(WEB_PATH."soap/service.php?class=biens&wsdl", $options);
$loginpassword = new SoapHeaderAuthUser("monlogin", "monpassword");
$soapHeaders[] = new SoapHeader(WEB_PATH.'soap/', 'authUser', $loginpassword);
$client->__setSoapHeaders($soapHeaders);

$res = $client->getBiens("", "`id`");

foreach($res as $bien) {
echo $bien->id.": ".utf8_decode($bien->commune).", ".utf8_decode($bien->ville)."<br />";
}

} catch(Exception $e) {

echo $e->getMessage();
echo "<hr><strong>Raw Soap response:</strong><br>";
echo htmlentities($client->__getLastResponse());
echo "<hr><strong>Raw Soap request:</strong><br>";
echo htmlentities($client->__getLastRequest());

}

?>

Pour l'authentification, j'utilise
SOAPAjouteEntête("authUser","login:monlogin,password:monpassword","http://www.monsite.be/soap/",Vrai)
J'ai comme résultat "Invalid Account".
Quand je vois le code PHP, le paramètre ajouté dans le header soap est un objet. Hors si je fais la même chose sous Windev, SOAPAjouteEntête n'accepte pas un objet en paramètre, il faut absolument une chaine de caractères. Comment dois-je faire pour envoyer monlogin et monpassword ?

Merci d'avance



--
suivre ce lien pour répondre:
http://cerbermail.com/…
Daniel
;-)
Posté le 10 septembre 2009 - 17:09
Merci pour ton idée lumineuse!

J'ai sniffé ma connexion et j'ai pu voir comment mon fichier PHP structurait le login et le mot de passe.

Voici comment il faut faire pour s'authentifier avec SOAPAjouteEntête :

SOAPAjouteEntête("authUser","<login>monlogin</login><password>monpassword</password>","http://monsite.be/soap/",Vrai)

Encore merci!