nusoap是PHP环境下的WebService编程工具,用于创建或调用WebService。它是一个开源软件,是完全采用PHP语言编写的、通过HTTP收发SOAP消息的一系列PHP类。
nusoap的一个优势是不需要扩展库的支持,这种特性使得nusoap可以用于所有的PHP环境,不受服务器安全设置的影响。
1.下载nusoap文件
nusoap下载地址 文件在lib/nusoap.php
我的资源nusoap0.9.5
2.服务器端,建立nusoapService.php文件
// 引入nusoap文件
require_once 'nusoap.php';
$server = new soap_server();
// 避免乱码
$server->soap_defencoding = 'UTF-8';
$server->decode_utf8 = false;
$server->xml_encoding = 'UTF-8';
$server->configureWSDL('测试接口'); // 打开wsdl支持
/*
注册需要被客户端访问的程序
类型对应值:
bool->"xsd:boolean"
string->"xsd:string"
int->"xsd:int"
float->"xsd:float"
*/
$server->register(
'GetName', // 方法名
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 GetName($name) {
return "获取名字为:, { $name } !";
}
3.客户端,建立 nusoapClient.php 文件
// 使用nusoap请关闭phpsoap扩展,否则有冲突
require_once ("nusoap.php");
/*
通过 WSDL 调用 WebService
参数 1 WSDL 文件的地址 (问号后的wsdl不能为大写)
参数 2 指定是否使用 WSDL
$client = new soapclient('http://localhost/api/nusoapService.php?wsdl',true);
*/
$client = new soapclient('http://localhost/api/nusoapService.php'); // 方法1
//$client = new soapclient('http://localhost/api/nusoapService.php?wsdl',true); // 方法2,如果没有打开wsdl支持,则这个方法错误
// 避免乱码
$client->soap_defencoding = 'UTF-8';
$client->decode_utf8 = false;
$client->xml_encoding = 'UTF-8';
// 参数转为数组形式传递
$paras = array('name' => 'Caffrey Xin' );
// 目标方法没有参数时,可省略后面的参数
$result = $client->call( 'GetName', $paras );
// 检查错误,获取返回值
if (!$err = $client->getError()) {
echo " 返回结果: ", $result;
} else {
echo " 调用出错: ", $err;
}
4.返回结果: Hello, { Caffrey Xin } !
WSDL
WSDL是一种用于描述Web Service的XML语言。它是一种机读格式,把所有的访问服务所必须的信息提供给Web Service客户端。NuSOAP专门提供一个类进行WDSL文件的解析,并且从中提取信息。soapclient对象使用wsdl类来减轻开发者调用服务的难度。通过WSDL信息的帮助来创建报文,程序员仅仅需要知道操作的名字和参数就能调用它。
通过NuSOAP使用WSDL提供以下几点优点:
所有的服务元文件,如命名空间(namespaces),endpoint URLs,参数名(parameter names)等等都可以直接从WSDL文件获得,这样就允许客户端动态的适应服务器端的变化。因为从服务器随时可以获得,所以这些数据不再需要在用户脚本中使用硬性编码。
NuSoap调用WebService出现乱码的解决方法:
$client->soap_defencoding = 'utf-8';
$client->decode_utf8 = false;
$client->xml_encoding = 'utf-8';
文件代码不能有任何输出 , 否则调用时会报类似如下错误:
XML error parsing SOAP payload on line x( 行号 ): Reserved XML Name
参考:http://blog.csdn.net/haiqiao_2010/article/details/8813126