thinkphp nusoap-ThinkPHP中怎么调用nusoap?

问题描述

ThinkPHP中怎么调用nusoap?

项目中需要使用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!';
    }
 ?>

解决方案

你去网上下载一个soap里面文件有:
class.nusoap_base.php
class.nusoapmime.php
class.soap_fault.php
class.soap_parser.php
class.soap_server.php
class.soap_transport_http.php
class.soap_val.php
class.soapclient.php
class.wsdl.php
class.wsdlcache.php
class.xmlschema.php
class.nusoap.php这个文件默认是nusoap.php改成class.nusoap.php
然后把这个soap目录拷贝到
ThinkPHPExtendVendor目录下:
ThinkPHPExtendVendorsoap

然后在在你的项目目录里就可以使用了:
调用方法:
vendor('soap.class#nusoap'); //从soap目录导class.nusoap.php类文件
$client = new nusoap_client($url. "?WSDL", "wsdl");
/*
@这里是参考使用:
*$client->soap_defencoding = 'utf-8';
*$client->decode_utf8 = false;
*$client->xml_encoding = 'utf-8';
*return $client->call($method, $data);
*/
我的项目是:
wservicewserviceCommon
注意:Common目录是我自己定义的函数库
里面定义了一个common.php文件
下面是我测试用的函数:
/

*测试函数
*/
function test($url,$method,$data){
vendor('soap.class#nusoap'); //从soap目录导class.nusoap.php类文件
$client = new nusoap_client($url. "?WSDL", "wsdl");
$client->soap_defencoding = 'utf-8';
$client->decode_utf8 = false;
$client->xml_encoding = 'utf-8';
return $client->call($method, $data);
}

我这样是可以正常使用的

解决方案二:

你去网上下载一个soap里面文件有:
class.nusoap_base.php
class.nusoapmime.php
class.soap_fault.php
class.soap_parser.php
class.soap_server.php
class.soap_transport_http.php
class.soap_val.php
class.soapclient.php
class.wsdl.php
class.wsdlcache.php
class.xmlschema.php
class.nusoap.php这个文件默认是nusoap.php改成class.nusoap.php
然后把这个soap目录拷贝到
ThinkPHPExtendVendor目录下:
ThinkPHPExtendVendorsoap

然后在在你的项目目录里就可以使用了:
调用方法:
vendor('soap.class#nusoap'); //从soap目录导class.nusoap.php类文件
$client = new nusoap_client($url. "?WSDL", "wsdl");
/*
@这里是参考使用:
*$client->soap_defencoding = 'utf-8';
*$client->decode_utf8 = false;
*$client->xml_encoding = 'utf-8';
*return $client->call($method, $data);
*/
我的项目是:
wservicewserviceCommon
注意:Common目录是我自己定义的函数库
里面定义了一个common.php文件
下面是我测试用的函数:
/

*测试函数
*/
function test($url,$method,$data){
vendor('soap.class#nusoap'); //从soap目录导class.nusoap.php类文件
$client = new nusoap_client($url. "?WSDL", "wsdl");
$client->soap_defencoding = 'utf-8';
$client->decode_utf8 = false;
$client->xml_encoding = 'utf-8';
return $client->call($method, $data);
}

我这样是可以正常使用的

解决方案三:

如果你还没有搞定你可下载我的看看
http://download.csdn.net/detail/fuyuwenqaz/8300313

时间: 2024-12-27 13:28:19

thinkphp nusoap-ThinkPHP中怎么调用nusoap?的相关文章

ThinkPHP的模版中调用session数据的方法_php实例

ThinkPHP框架的模板中调用session数据的方法有很多,可以很据情况灵活运用,常见的有以下几类: 1.在模板中直接调用{$Think.session}获取session: 2.在<php></php>标签直接编写php代码来调用$_SESSION数据: 3.在模板中写<?php  ?>,然后在里面直接编写php代码来调用$_SESSION: 4.在Action中将$_SESSION变量通过assign()方法赋值给模板: 5.在自定义函数库中,新建一个函数用来返

ThinkPHP里用U方法调用js文件实例

  本文实例讲述了ThinkPHP里用U方法调用js文件的方法.分享给大家供大家参考.具体如下: 在TP里提供了在模板文件中直接调用函数的快捷方法.U是其中之一.手册里有它的用法: 代码如下: {:U('User/insert' )} 先把js文件的后缀改成html(这个不会影响),然后写个JsAction,在里面进行调用: ? 1 2 3 4 5 6 7 8 9 <?php class JsAction extends Action{ function nav() { $this->disp

ThinkPHP控制器间实现相互调用的方法_php实例

本文实例讲述了ThinkPHP控制器间实现相互调用的方法.分享给大家供大家参考.具体实现方法如下: ThinkPHP同一个项目里,两个控制器的方法如何相互调用呢?ThinkPHP提供了一个A(),通过它可以使控制器之间的方法相互调用,使得代码可以重复利用. 官方似乎对A()方法没有相关使用文档,现在通过一个例子来说一下如使用A()方法. 有两个控制器,ColumnsAction和NewsAction.ncatlist()是ColumnsAction的分类列表方法,现在我要在控制器NewsActi

ThinkPHP里用U方法调用js文件实例_php实例

本文实例讲述了ThinkPHP里用U方法调用js文件的方法.分享给大家供大家参考.具体如下: 在TP里提供了在模板文件中直接调用函数的快捷方法.U是其中之一.手册里有它的用法: 复制代码 代码如下: {:U('User/insert' )} 先把js文件的后缀改成html(这个不会影响),然后写个JsAction,在里面进行调用: <?php class JsAction extends Action{ function nav() { $this->display('Index:js:nav

THINKPHP项目开发中的日志记录实例分析_php实例

本文实例讲述了THINKPHP项目开发中的日志记录用法.分享给大家供大家参考.具体方法如下: 1.建立日志表 复制代码 代码如下: CREATE TABLE `logs` (    `id` int(11) NOT NULL auto_increment,    `guid` varchar(100) character set utf8 NOT NULL,    `addtime` timestamp NOT NULL default CURRENT_TIMESTAMP,    `accoun

如何让thinkphp在模型中自动完成session赋值小教程_php技巧

相信用过thinkphp的用户都知道thinkphp的模型可以完成很多辅助功能,比如自动验证.自动完成等,今天在开发中遇到自动完成中需要获取session值 然后自动赋值的功能,具体看代码: class ArticlelModel extends Model { protected $_auto = array ( array('addtime','time',1,'function'), array('username','getName',1,'callback') ); //这个函数获取s

ThinkPHP Where 条件中使用表达式

原文:ThinkPHP Where 条件中使用表达式 Where 条件表达式格式为: $map['字段名'] = array('表达式', '操作条件'); 其中 $map 是一个普通的数组变量,可以根据自己需求而命名.上述格式中的表达式实际是运算符的意义: TP运算符 SQL运算符 例子 实际查询条件 eq = $map['id'] = array('eq',100); 等效于:$map['id'] = 100; neq != $map['id'] = array('neq',100); id

ThinkPHP自动完成中使用函数与回调方法实例_php实例

本文实例讲述了ThinkPHP自动完成中使用函数与回调方法.分享给大家供大家参考.具体方法如下: ThinkPHP 自动填充格式如下: 复制代码 代码如下: array(填充字段,填充内容[,填充条件][,附加规则]) 附加规则,可选,包括: string:字符串,表示填充内容为字符串(默认). function:使用函数,表示填充的内容是一个函数返回值. callback:使用方法,表示填充的内容是一个当前 Model 的方法返回值. field:字段,表示填充的内容是一个其他字段的值. Th

thinkPHP js文件中U方法不被解析问题的解决方法_php实例

本文实例分析了thinkPHP js文件中U方法不被解析问题.分享给大家供大家参考,具体如下: 我想在js文件中写ajax, 写完发现异常, 本以为是js文件中不支持ajax 后来发现时地址解析错误. 也就是U方法在js文件中不被解析. 貌似thinkphp解析,tpl文件中的一些元素. js文件中的ajax function ajaxCheckTel(tel,id){ var res = ''; $.ajax({ type:"post", url:ajaxurl, // 地址解析有误