项目中需要使用webservice,我们选了nusoap,但是一直无法将ThinkPHP与nusoap这两者结合起来用,求大神帮助。
服务器端:
<?php
class ServerAction extends Action {
public function _initialize() {
Vendor('Ns.nusoap');
// 初始化服务对象 , 这个对象是类 soap_server 的一个实例
$soap = new soap_server ();
// 调用服务对象的 register 方法注册需要被客户端访问的程序。
// 只有注册过的程序,才能被远程客户端访问到。
$soap->register ( 'hello' );
// 最后一步,把客户端通过 post 方式提交的数据,传递给服务对象的 service 方法。
// service 方法处理输入的数据,调用相应的函数或方法,并且生成正确的反馈,传回给客户端。
$soap->service ( $HTTP_RAW_POST_DATA );
}
// 定义服务程序
function hello() {
return 'Hello World!';
}
}
?>
客户端:
<?php
class ClientAction extends Action {
public function test() {
Vendor('Ns.nusoap');
// 初始化客户端对象,这个对象是类 soapclient 的一个实例,
// 把服务程序的 URL 地址传递给soapclient类的构造函数。
$client = new soapclient ( 'http://127.0.0.1/nusoap/Server/' );
// 利用客户端对象的 call 方法调用 WEB 服务的程序
$str = $client->call ( 'hello' );
// 客户端对象的 getError() 方法可以用来检查调用过程是否出现错误。
// 如果没有错误, getError() 方法返回 false ;如果有错误, getError()方法返回错误信息。
if (! $err = $client->getError ()) {
echo " 程序返回 :", htmlentities ( $str, ENT_QUOTES );
} else {
echo " 错误 :", htmlentities ( $err, ENT_QUOTES );
}
}
}
?>
nusoap类库放在ThinkPHP/Extend/Vendor/Ns/下面。
运行客户端报错:错误 :XML error parsing SOAP payload on line 1: Reserved XML Name
如果将服务器端代码直接写成一个php文件,不用ThinkPHP就没有问题,如下:
<?php
require_once ("../../ns/nusoap.php");
// 初始化服务对象 , 这个对象是类 soap_server 的一个实例
$soap = new soap_server ();
// 调用服务对象的 register 方法注册需要被客户端访问的程序。
// 只有注册过的程序,才能被远程客户端访问到。
$soap->register ( 'hello' );
// 最后一步,把客户端通过 post 方式提交的数据,传递给服务对象的 service 方法。
// service 方法处理输入的数据,调用相应的函数或方法,并且生成正确的反馈,传回给客户端。
$soap->service ( $HTTP_RAW_POST_DATA );
// 定义服务程序
function hello() {
return 'Hello World!';
}
?>