Skip to content

Instantly share code, notes, and snippets.

@iampava
Created May 17, 2018 08:34
Show Gist options
  • Save iampava/6d161a1839d089317a07bb430a540a5c to your computer and use it in GitHub Desktop.
Save iampava/6d161a1839d089317a07bb430a540a5c to your computer and use it in GitHub Desktop.
SOAP Web Service in PHP | Author: Lucian Bosinceanu
<?php
define ('WS_URL', 'http://localhost/weather/ws.php');
try {
$client = new SoapClient(null, // nu furnizam niciun WSDL
array('location' => WS_URL, // adresa serviciului Web
'uri' => 'http://web.info/porto', // spatiul de nume corespunzator serviciului Web apelat
'trace' => 1 // se vor furniza informatii de depanare
)
);
$date = $_POST["date"];
$res = $client->__soapCall('getWeather', array($date));
$response = prepareResponse($res);
echo "<p>$response</p>";
} catch (SOAPFault $exception) { // eroare :(
echo 'An exception occurred: ' . $exception->faultstring;
}
function prepareResponse($result) {
$dom = new DOMDocument();
//echo $result;
$dom->loadXML($result);
$response = "Weather is " . $dom->getElementsByTagName('type')[0]->nodeValue . "<br>" .
"Temperature is " . $dom->getElementsByTagName('temperature')[0]->nodeValue . "<br>" .
"Wind is " . $dom->GetElementsByTagName('wind')[0]->nodeValue;
return $response;
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<form action="/weather/app.php" method = "post">
Date:<br>
<input type="date" name="date"><br>
<br><br>
<input type="submit" value="Submit">
</form>
</body>
</html>
<?php
/*
<weather>
<type></type>
<temperature></temperature>
<wind></wind>
</weather>
*/
try {
// nu oferim nicio descriere WSDL, stabilim URI-ul serviciului
$server = new SoapServer(null,
array('uri' => 'http://web.info/porto') // spatiul de nume folosit
);
// adaugam metodele implementate
$server->addFunction('getWeather');
// asteptam cereri SOAP
$server->handle();
} catch (SOAPFault $exception) {
echo 'An exception occurred: ' . $exception;
}
// functie care furnizeaza cantitatea dintr-un sortiment de portocale
// (rezultatul intors va fi eterogen)
function getWeather ($date) {
$results = array("sunny","rain","storm","tornado","heavy storm","cold","hailstorm");
$d = strtotime($date);
$day_of_week = date("N",$d);
return generateXMLResponse($results[$day_of_week],20,40);
}
function generateXMLResponse($p_type,$p_temperature,$p_wind) {
$dom = new DOMDocument("1.0", "ISO-8859-1");
$weather = $dom->createElement('weather');
$type = $dom->createElement('type',$p_type);
$temperature = $dom->createElement('temperature',$p_temperature);
$wind = $dom->createElement('wind',$p_wind);
$weather->appendChild($type);
$weather->appendChild($temperature);
$weather->appendChild($wind);
$dom->appendChild($weather);
return $dom->saveXML();
}
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment