2 lbp608 lbp608 于 2014.05.17 16:26 提问

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!';
    }
 ?> 

3个回答

fuyuwenqaz
fuyuwenqaz   2014.12.25 20:04

你去网上下载一个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目录拷贝到
ThinkPHP\Extend\Vendor目录下:
ThinkPHP\Extend\Vendor\soap

然后在在你的项目目录里就可以使用了:
调用方法:
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);
*/
我的项目是:
wservice\wservice\Common
注意: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);
}

我这样是可以正常使用的

fuyuwenqaz
fuyuwenqaz   2014.12.25 20:03

你去网上下载一个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目录拷贝到
ThinkPHP\Extend\Vendor目录下:
ThinkPHP\Extend\Vendor\soap

然后在在你的项目目录里就可以使用了:
调用方法:
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);
*/
我的项目是:
wservice\wservice\Common
注意: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);
}

我这样是可以正常使用的

fuyuwenqaz
fuyuwenqaz   2014.12.25 20:13

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
thinkphp集成nusoap
1、到git搜索nusoap下载 2、拷贝nusoap到thinkphp的vendor目录下(这里用的是thinkphp3.2.3) 3、执行 vendor("nusoap",VENDOR_PATH . "nusoap/", ".php"); $client = new \nusoap_client($wsdl,true); $err = $client->getError(); if
nusoap在thinkphp下创建webservice
注:此代码为非原创,根据原代码做了Thinkphp下实现 根据nusoap在thinkphp下创建webservice 和在原生PHP下创建方法无差别,仅需将接口具体实现代码放在thinkphp控制器外即可。其余代码放在控制器内外均可。此例中放在控制器外,控制器为空 如需将接口实现代码放在class内,需新建一个class,注册接口时使用 class名.函数名 ,如API.test(API为
简单地使用nusoap调用webservice
使用php调用webservice,有个非常方便的封装类nusoap,可以在http://sourceforge.net/projects/nusoap/files/下载。 NuSOAP中最常用到的类是soap_server和soapclient, 其中soap_server用于创建 Webservice服务,类soapclient则用于调用Webservice .这两个类的定义都在li
NuSOAP的使用说明
NuSOAP 是 PHP 环境下的 WEB 服务编程工具,用于创建或调用 WEB 服务。它是一个开源软件,当前版本是 0.7.2 ,支持 SOAP1.1 、 WSDL1.1 ,可以与其他支持 SOAP1.1 和 WSDL1.1 的系统互操作。 NuSOAP 完全由PHP语言编写,由一系列 PHP 类组成,不需要扩展库的支持,这种特性使得 NuSOAP 可以用于所有的 PHP 环境,不受服务器安全设
webservice——nusoap详解
PHP SOAP服务器 用PHP和NuSoap来建立SOAP服务器非常容易。基本上,你只要写出你想要暴露给你的Web services的函数,然后用NuSoap去注册它们就可以了。OK,另外还需要两步才能完成PHP SOAP服务器的建立。首先你还要在你的PHP代码中创建NuSoap对象的一个实例,然后用HTTP POST方法将原始数据传给NuSoap进行处理 NuSOAP的使用比较简单,其中最
PHP搭建WebService(免配置) NuSoap的使用
今天看到一程序运用到NuSOAP,查了一下相关资料,发现用处也挺大的,又增长了知识。转载一下作个记录吧。NuSOAP 是 PHP 环境下的 WEB 服务编程工具,用于创建或调用 WEB 服务。它是一个开源软件,当前版本是 0.7.2 ,支持 SOAP1.1 、 WSDL1.1 ,
NuSOAP详细项目案例
最近对一个中型网站进行二次开中,碰到关于nusoap的使用。本人有幸参考原来前辈写的案例:特此拿出来分享。 基础问题直接跳过,下面有 NuSOAP webservice接口使用详解 的网址。 好了。上代码。 服务端的代码如下: /**  * Created by JetBrains PhpStorm.  * User: Administrator  * Date: 1
NUSOAP参考文档
nusoap参考手册 ,HTML格式,学习参考用的。
Nusoap问题解决一例
<br />借用Nusoap调用webservice 时遇到这一问题:<br /> <br /> SoapClient::SoapClient() expects parameter 2 to be array<br /> <br />在网上查了一下,由于php5中的冲突,我要把soapclient改成soap_client,其实这个解决方案并不一定完整;<br />但是当我改成后发觉系统报错:<br /> <br />Class 'soap_client' not found in <br /> <br
用NuSoap实现php调用webservice
<br />NuSOAP 是 PHP 环境下的 WEB 服务编程工具,用于创建或调用 WEB 服务。它是一个开源软件,当前版本是 0.7.2 ,支持 SOAP1.1 、 WSDL1.1 ,可以与其他支持 SOAP1.1 和 WSDL1.1 的系统互操作。 NuSOAP 完全由PHP语言编写,由一系列 PHP 类组成,不需要扩展库的支持,这种特性使得 NuSOAP 可以用于所有的 PHP 环境,不受服务器安全设置的影响。 <br /><br />1. NuSOAP 的获取和安装 <br /><br />NuS