'encoding'=>'UTF-8'
function echoString($inputString) { return $inputString; } function echoTwoStrings($inputString1, $inputString2) { return array("outputString1" => $inputString1, "outputString2" => $inputString2); } $server = new SoapServer(null, array('uri' => "http://192.168.2.15")); $server->addFunction("echoString"); $server->addFunction("echoTwoStrings"); $server->addFunction(SOAP_FUNCTIONS_ALL); $server->handle();
<?php $options = array('uri' => "http://192.168.2.15", 'location'=>'http://192.168.2.15/soapserver.php', 'trace'=>true); $client = new SoapClient(null, $options); echo $client->echoString("aaa"); print_r($client->echoTwoStrings('B','A'));
<?php Class Test{ public function hello($val){ return ($val); } public function sum($v1,$v2){ return($v1+$v2); } } $server = new SoapServer(null, array('uri' => "http://192.168.2.15")); $server->setClass("Test"); $server->handle();
<?php $options = array('uri' => "http://192.168.2.15", 'location'=>'http://192.168.2.15/soapserver.php', 'trace'=>true); $client = new SoapClient(null, $options); echo $client->hello("Hello"); print_r($client->sum(10,20));
配置 Nginx
server { listen 80; server_name api.example.com; charset utf-8; access_log /var/log/nginx/api.example.com.access.log main; auth_basic "Login"; auth_basic_user_file htpasswd; location / { root /www/example.com/api.example.com; index index.html index.php; } ... ... }
創建密碼檔案,請參考《Netkiller Web 手札》
# cat /etc/nginx/htpasswd neo:$apr1$mnT/iqg5$gn7m7xx.eflX9VK6p8hyj0
SoapClient 需要 login與password兩個選項
<?php $options = array('uri' => "http://api.example.com", 'location'=>'http://api.example.com/soapserver.php', 'login'=>'neo', 'password'=>'chen', 'trace'=>true ); $client = new SoapClient(null, $options); try { echo $client->hello("Hello"); print_r($client->sum(10,20)); } catch (Exception $e) { echo 'Caught exception: ', $e->getMessage(), "\n"; }
soapfunc.php
$ cat soapfunc.php <?php function reverse($str){ $retval = ''; if(strlen($str) < 1) { return new SoapFault('Client','','Invalid string'); } for ($i = 1; $i <= strlen($str); $i++) { $retval .= $str[(strlen($str) - $i)]; } return $retval; } function sum($num1, $num2) { if (trim($num1) != intval($num1)) { return new SoapFault('Client','','The first number is invalid'); } if (trim($num2) != intval($num2)) { return new SoapFault('Client','','The second number is invalid'); } return ($num1 + $num2); } function gettime(){ $time=strftime("%Y-%m-%d %H:%M:%S"); return $time; } ?>
soapserver.php
$ cat soapserver.php <?php include_once('soapfunc.php'); $soap = new SoapServer(null,array('uri'=>"http://netkiller.6600.org/")); $soap->addFunction('reverse'); $soap->addFunction('sum'); $soap->addFunction('gettime'); $soap->addFunction(SOAP_FUNCTIONS_ALL); $soap->handle(); ?>
soapclient.php
$ cat soapclient.php <?php try { $client = new SoapClient(null, array('location' =>"http://netkiller.6600.org/soapserver.php",'uri' => "http://netkiller.6600.org/")); $str = "This string will be reversed"; $reversed = $client->reverse($str); echo "If you reverse '",$str,"', you get '",$reversed,"' </br>"; $n1=50; $n2=130; $sum = $client->sum($n1,$n2); echo "If you try ",$n1,"+",$n2,", you will get ",$sum,"</br>"; echo "The system time is: ",$client->gettime(); } catch (SoapFault $fault){ echo "Fault! code:",$fault->faultcode,", string: ",$fault->faultstring; } ?>