NuSOAP 是 PHP 环境下的 WEB 服务编程工具,用于创建或调用 WEB 服务,是php实现webservices的一个重要组成部分,我希望跟大家一起学习。
hello world是应用最广泛的入门程序之一,先建服务端,代码如下:
<? require_once("lib/nusoap.php"); function HelloWorld() { return 'Hello,world'; } $server = new soap_server; $server->register('HelloWorld'); $server->service($HTTP_RAW_POST_DATA); ?>
HelloWorld()函数是一个服务程序,实际上就是返回一个"Hello,World!"的字符串;
$server 是一个服务对象,它是soap_server的一个实例;
register方法是注册被客户端访问的程序,参数是函数名称不带括号,函数的参数是作为register方法身的参数调用,下面有演示;
service是处理输入的数据,调用相对应的程序,返回给客户端。
综上,一个服务端的程序好了,下来就是客户端,代码如下:
<? require_once("lib/nusoap.php"); $client = new soapclient('http://localhost/nusoap/server.php'); $string = $client->call('HelloWorld'); if(!$err = $client->getError()){ echo "The program return:".htmlentities($string,ENT_QUOTES); } else echo "ERR:".htmlentities($err,ENT_QUOTES); ?>
$client 是一个soapclient的实例,地址用的是url不是相对地址;
call是调用web服务的程序,调用方式跟服务端的register方法基本一样;
getError检查掉用过程是否出错,没有错,返回的false,出错,返回出错信息。
在浏览器访问http://localhost/nusoap/client.php
得到输出的结果:Hello,World!
服务端的程序代码如下:
<? require_once("lib/nusoap.php"); function strings($string1,$string2) { if(is_string($string1)&&is_string($string2)) return "two strings:".$string1." and ".$string2; else return new soap_fault('Client','','two string required!'); } $server = new soap_server; $server->register('strings'); $server->service($HTTP_RAW_POST_DATA); ?>
code ,必填参数 , 建议值为“ Client ”或“ Server ”,指明错误是客户端的错误还是服务端的错误。
faultactor ,预留项,现在还没有使用
faultstring ,错误的描述信息
faultdetail ,可选项, XML 格式的数据 , 说明详细的错误信息
客户端代码如下:
<? require_once("lib/nusoap.php"); $client = new soapclient('http://localhost/nusoap/server1.php?',); $parameters = array('Hello','world'); $string = $client->call('strings',$parameters); if(!$err = $client->getError()) { echo "The server return:".$string; } else echo "ERROR:".$err; ?>
注意的是call的参数调用
服务端代码如下:
<? require_once("lib/nusoap.php"); function strings($string1,$string2) { if(is_string($string1)&&is_string($string2)) return "two strings:".$string1." and ".$string2; else return new soap_fault('Client','','two string required!'); } $server = new soap_server; $server->configureWSDL('strings'); $server->register('strings',array("string1"=>"xsd:string", "string2"=>"xsd:string"),array("return"=>"xsd:string")); $HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA)? $HTTP_RAW_POST_DATA:''; $server->service($HTTP_RAW_POST_DATA); ?>
注意的是register的参数
通过http://localhost/nusoap/server1.php?wsdl 查看wsdl的内容如下图
客户端代码如下:
<? require_once("lib/nusoap.php"); $client = new soapclient('http://localhost/nusoap/server1.php?wsdl',true); $parameters = array('Hello','world'); $string = $client->call('strings',$parameters); if(!$err = $client->getError()) { echo "The server return:".$string; } else echo "ERROR:".$err; echo '<p/>'; echo 'Request:'; echo '<pre>',htmlspecialchars($client->request,ENT_QUOTES),'</pre>'; echo 'Response:'; echo '<pre>',htmlspecialchars($client->response,ENT_QUOTES ),'</pre>'; ?>
为了方便调试我加入了request和response来显示运行信息。在服务端加入$debug=1再在客户端加上
echo '<h2>Debug</h2><pre>' . htmlspecialchars($client->getDebug(), ENT_QUOTES) . '</pre>';即显示调试内容。