NuSoap
是
PHP
环境下的
WebService
编程工具,用于创建或调用
WebService
,是一个开源软件。它完全采用
PHP
语言编写、通过
HTTP
收发
SOAP
消息的一系列
PHP
类,由
NuSphere Corporation(http://www.nusphere.com/)
开发。
它的优势是不需要扩展库的支持,这种特性使它可用于所有的 PHP 环境,不受服务器安全设置的影响。
1. 首先,去 http://sourceforge.net/projects/nusoap/ 下载 nusoap-0.9.5.zip ,解压后把 lib 文件夹放到与你的 WebService 程序相同的目录,如 /WebService/lib 。
2. 服务端:建立 nusoapService.php 文件。
<?php
require_once("lib/nusoap.php");
$server = new soap_server;
// 避免乱码
$server->soap_defencoding = 'UTF-8';
$server->decode_utf8 = false;
$server->xml_encoding = 'UTF-8';
$server->configureWSDL('sayHello');// 打开 wsdl 支持
/*
注册需要被客户端访问的程序
类型对应值: bool->"xsd:boolean" string->"xsd:string"
int->"xsd:int" float->"xsd:float"
*/
$server ->register( 'sayHello' , // 方法名
array("name"=>"xsd:string"), // 参数,默认为 "xsd:string"
array ( "return" => "xsd:string" ) ); // 返回值,默认为 "xsd:string"
//isset 检测变量是否设置
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
//service 处理客户端输入的数据
$server ->service( $HTTP_RAW_POST_DATA );
/**
* 供调用的方法
* @param $name
*/
function sayHello( $name ) {
return "Hello, { $name } !" ;
}
?>
注:
1. 文件代码不能有任何输出 , 否则调用时会报类似如下错误:
XML error parsing SOAP payload on line x( 行号 ): Reserved XML Name
2. 要以 UTF-8 无 BOM 格式保存,不然客户端调用会出错。
3. 客户端:建立 nusoapClient.php 文件。
<?php
require_once ( "lib/nusoap.php" );
/*
通过 WSDL 调用 WebService
参数 1 WSDL 文件的地址 ( 问号后的 wsdl 不能为大写 )
参数 2 指定是否使用 WSDL
$client = new soapclient('http://localhost/WebService/nusoapService.php?wsdl',true);
*/
$client = new soapclient( 'http://localhost/WebService/nusoapService.php' );
$client ->soap_defencoding = 'UTF-8' ;
$client ->decode_utf8 = false ;
$client ->xml_encoding = 'UTF-8' ;
// 参数转为数组形式传递
$paras = array ( 'name' => 'Bruce Lee' );
// 目标方法没有参数时,可省略后面的参数
$result = $client ->call( 'sayHello' , $paras );
// 检查错误,获取返回值
if (! $err = $client ->getError()) { echo " 返回结果: " , $result ; }
else { echo " 调用出错: " , $err ; }
?>
注: 用 nusoap 实现 WebService, 不要开启 php 的 SOAP 扩展
它的优势是不需要扩展库的支持,这种特性使它可用于所有的 PHP 环境,不受服务器安全设置的影响。
1. 首先,去 http://sourceforge.net/projects/nusoap/ 下载 nusoap-0.9.5.zip ,解压后把 lib 文件夹放到与你的 WebService 程序相同的目录,如 /WebService/lib 。
2. 服务端:建立 nusoapService.php 文件。
<?php
require_once("lib/nusoap.php");
$server = new soap_server;
// 避免乱码
$server->soap_defencoding = 'UTF-8';
$server->decode_utf8 = false;
$server->xml_encoding = 'UTF-8';
$server->configureWSDL('sayHello');// 打开 wsdl 支持
/*
注册需要被客户端访问的程序
类型对应值: bool->"xsd:boolean" string->"xsd:string"
int->"xsd:int" float->"xsd:float"
*/
$server ->register( 'sayHello' , // 方法名
array("name"=>"xsd:string"), // 参数,默认为 "xsd:string"
array ( "return" => "xsd:string" ) ); // 返回值,默认为 "xsd:string"
//isset 检测变量是否设置
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
//service 处理客户端输入的数据
$server ->service( $HTTP_RAW_POST_DATA );
/**
* 供调用的方法
* @param $name
*/
function sayHello( $name ) {
return "Hello, { $name } !" ;
}
?>
注:
1. 文件代码不能有任何输出 , 否则调用时会报类似如下错误:
XML error parsing SOAP payload on line x( 行号 ): Reserved XML Name
2. 要以 UTF-8 无 BOM 格式保存,不然客户端调用会出错。
3. 客户端:建立 nusoapClient.php 文件。
<?php
require_once ( "lib/nusoap.php" );
/*
通过 WSDL 调用 WebService
参数 1 WSDL 文件的地址 ( 问号后的 wsdl 不能为大写 )
参数 2 指定是否使用 WSDL
$client = new soapclient('http://localhost/WebService/nusoapService.php?wsdl',true);
*/
$client = new soapclient( 'http://localhost/WebService/nusoapService.php' );
$client ->soap_defencoding = 'UTF-8' ;
$client ->decode_utf8 = false ;
$client ->xml_encoding = 'UTF-8' ;
// 参数转为数组形式传递
$paras = array ( 'name' => 'Bruce Lee' );
// 目标方法没有参数时,可省略后面的参数
$result = $client ->call( 'sayHello' , $paras );
// 检查错误,获取返回值
if (! $err = $client ->getError()) { echo " 返回结果: " , $result ; }
else { echo " 调用出错: " , $err ; }
?>
注: 用 nusoap 实现 WebService, 不要开启 php 的 SOAP 扩展