PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV (précédentes versions) → [EXEMPLE] Client php/curl pour webservice Windev/Webdev en awws sous IIS6/7
[EXEMPLE] Client php/curl pour webservice Windev/Webdev en awws sous IIS6/7
Débuté par Support CER, 19 déc. 2018 16:58 - Aucune réponse
Membre enregistré
4 messages
Posté le 19 décembre 2018 - 16:58
Bonjour,

Comme j'ai beaucoup galéré pour aider un de mes clients je vous livre une petite page de code php/curl pour tout ceux qui doivent utiliser un webservice écrit avec WinDev/WebDev qui fonctionne avec le gestionnaire d'application en awws et hébergé sur un serveur IIS (6 ou 7).

Je l'ai testé avec mon web service, ça fonctionne même en https avec authentification !

Vous pouvez préalablement vérifier que votre web service fonctionne correctement avec SoapUI et récuperer le code XML depuis l'interface de SoapUI.

<?php
error_reporting(E_ALL);
//Exemple de code php pour acceder à un Web Service SOAP Windev/Webdev avec serveur d'application (awws) hebergé sous IIS6/7
//
//Le web service en exemple s'appelle MONSERVICE et posséde une fonction MaFonction qui attend 2 paramètres pParam1 et pParam2
//
//On met dans $xml_data les paramètres à passer à la fonction MaFonction via le Web Service MONSERVICE
$xml_data = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<pParam1>Valeur 1</pParam1>
<pParam2>Valeur 2</pParam2>
</soapenv:Body>
</soapenv:Envelope>';
//On Déclare l'Url et la Page (ici ils sont identique)
$url = "http://monsite.domaine.fr/MONSERVICE_WEB/awws/MONSERVICE_WEB.awws";
$page = "http://monsite.domaine.fr/MONSERVICE_WEB/awws/MONSERVICE_WEB.awws";

//On Définit les Headers de la requête en précisant sans SOAPAction le nom du web service (tel qu'il est hebergé sous IIS) et la fonction a utiliser
$headers = array(
"Accept-Encoding: gzip,deflate",
"Content-type: text/xml;charset=\"UTF-8\"",
"SOAPAction: \"urn:MONSERVICE_WEB/MaFonction\"",
"Content-length: ".strlen($xml_data),
"Host: gerausiv.c-e-r.fr",
"Connection: Keep-Alive",
"Cache-Control: no-cache",
"Pragma: no-cache"
);


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, True);
curl_setopt($ch, CURLOPT_HEADER, False);
//A modifier si la valeur par défaut ne convient pas
// curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
//Ceci n'est pas nécessaire
// curl_setopt($ch, CURLOPT_USERAGENT, 'Apache-HttpClient/4.1.1 (java 1.5)');

curl_setopt($ch, CURLOPT_FRESH_CONNECT, TRUE);

//Enlevez les commentaires si https et que la vérification du certificat vous bloque
// curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

// Applique le code XML à notre appel curl
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_data);

//A utiliser si l'accès est protégé par un User/Login
// curl_setopt($ch, CURLOPT_USERPWD,"utilisateur:motdepasse");
// curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);

//Retirer les commentaires en cas d'erreur :
// curl_setopt($ch, CURLINFO_HEADER_OUT, TRUE);
// curl_setopt($ch, CURLOPT_VERBOSE, TRUE);

$data = curl_exec($ch);
$err = curl_errno($ch);
$inf = curl_getinfo($ch);

echo "CURL : $url, CURL_ERRNO=$err";
//Retirer les commentaires en cas d'erreur pour visualiser le retour :
// echo "<pre>\n";
// var_dump($inf);
// echo "</pre>\n";

// Affiche le Résultat :
var_dump($data);
curl_close($ch);
?>


J'espère que cela pourra aider ceux d'entre vous qui comme moi ne maitrisent pas php et qui doivent tout de même s'en sortir.

Bien Cordialement,
Pascal