PHP的soap 之 nusoap 的使用

今天不知道为什么想起了soap 这个东西,然后就弄了下,在php上使用的是nusoap。 一些基本的使用,高深的麻烦您自己看手册去
这个软件的下载在http://sourceforge.net/projects/nusoap/files/nusoap/0.9.5/nusoap-0.9.5.zip/download 下面我会加上附件。

说说这个东西,我曾经以为能用这个东西完成跨域名登陆,但是今天发现好象实现不了,
到底在什么地方可以应用上,也很茫然,希望知道在那里应用的朋友指点下,谢谢了!

关于soap的具体的原理,什么的我就不多说,想知道的你网上自己找下,基本上就是http协议与xml的应用。
先说下个这个东西的实现原理,基本上就向服务器发送请求实现一个服务器上的函数运行,然后得到返回值。
值,我感觉应该是string或者数组,或者int值,应该不能用对象的。

先看一个基本的使用很简单的
这是 soap_server.php 文件  这个在网络上能找的到

include_once("lib/nusoap.php"); //插入文件
$server=new soap_server();     //生成对象
$server->configureWSDL("test_wsdl", "");
$server->wsdl->schemaTargetNamespace="urn:test_wsdl";
$server->register("hello", //方法名
array(
"name"=>"xsd:string",
"call"=>"xsd:string",
"tele"=>"xsd:string",
),//输入参数
array(
"return"=>"xsd:string",
),//输出参数
"urn:test_wsdl",//名字空间
"urn:test_wsdl#hello",//名字空间#要操作的函数名
"rpc",//style
"encoded",//use
"This is test."//说明
);
//test方法实现
function hello($name,$call,$tele) {
if($name==""){
return new soap_fault("Client","","Must supply a valid name.");
}
return "Hello, " . $name." ".$call." ".$tele;
}
//Use the request to (try to) invoke the service
$HTTP_RAW_POST_DATA=isset($HTTP_RAW_POST_DATA)?$HTTP_RAW_POST_DATA:"";
$server->service($HTTP_RAW_POST_DATA);

在你写完了以后,在浏览器里输入url,应该会看到一个页面,根据那个页面分析下,会有很大的收获,
client端要根据上面的使用
这个是soap _client.php

include_once("lib/nusoap.php");  //插入文件
//设置参数数组
$para=array(
"name"=>"sera1ph.Liu",
"call"=>"123456",
"phone"=>"12345678",
);
//生成客户端对象,注意下面的url  ?wsdl是必须加的前面为服务端的文件
$client=new soapclient("http://localhost/nusoap/soap_server.php?WSDL");
//呼叫/使用 那个函数,注意名字空间的区分
$return=$client->call(‘hello‘,$para,"http://localhost/soap/test_wsdl","test_wsdl#hello");
print_r($return);

上面是一个很基本的使用,我想不过多的说了

下面看一个比较复杂的使用

require_once(‘../../lib/nusoap.php‘);
//取得值返回 返回的是一个数组
function validate($userName,$randomNum)
{
        $temp[‘userName‘] = $userName;
        $temp[‘randomNum‘] =$randomNum;
        return $temp;
}
//本想做个set一个get方法,但是这个时候发现了一个问题,以后再说
function refresh($refresh_userName,$refresh_randomNum)
{
        $temp[‘userName‘] = $userName;
        $temp[‘randomNum‘] =$randomNum;
        return $temp;
}

function logout($logout_userName)//注销用户名(退出登录)
{
$flag=$logout_userName;

        if($logout_userName=="" || $logout_userName!="叁石")
        {
        $flag = -1;
        }

return $flag;
}

$soap = new soap_server();
//参数一,服务名字,也就是server文件
//参数二,名字空间
$soap->configureWSDL(‘AuthorityServicewsdl‘, ‘urn:AuthorityServicewsdl‘);
//参数设置空间
$soap->wsdl->schemaTargetNamespace = ‘urn:AuthorityServicewsdl‘;
//上面跟原来的基本一样,但是大家注意声明的时候发生了变化
//下面是设置一个返回的数组类型
//参数一,为你自己命名的数据类型
//参数二,混合类型,不用管
//参数三。为结构体,或者数组(array)
//参数四,按照什么排序,有三个选择all(全部)|sequence(次序)|choice(选择)
//参数五,基本约束
//注意:上面5个我们不用改变
//参数6,最重要的参数,也就是我们返回的类型想对应
//返回数组下标 =>array(‘name‘=>"数组下标",‘type‘=>"xsd:对应的类型")
//类型基本包括 string,int, date,boolean 这几种形式
$soap->wsdl->addComplexType(‘userInfo‘,‘complexType‘,‘struct‘,‘all‘,‘‘,
        array(
            ‘userName‘ => array(‘name‘=>‘userName‘, ‘type‘=>‘xsd:string‘),
           ‘randomNum‘ => array(‘name‘=>‘randomNum‘, ‘type‘=>‘xsd:string‘)
                        )
                );

//这里是注册函数
//参数一,函数名
//参数二,是这个函数接受的参数,注意指定类型
//参数三,为返回的值,不一定名字非叫return,叫其他的也可以,注意返回的类型,
//我这里是返回我自己定义的类型 tns:userInfo 如果为基本的类型为 xsd:string 这个样子
//其他的参数,只要统一就可以了,尤其是名字空间跟 soapaction
$soap->register(‘validate‘,                                                                                                                                                                        // method name
    array(‘userName‘ => ‘xsd:string‘,‘randomNum‘ => ‘xsd:string‘),        // input parameters
    //array(‘return‘ => ‘xsd:string‘),                        // output parameters
    array(‘return‘ => ‘tns:userInfo‘),
        ‘urn:AuthorityServicewsdl‘,                                        // namespace
    ‘urn:AuthorityServicewsdl#validate‘,                // soapaction
    ‘rpc‘,                                                                                // style
    ‘encoded‘,                                                                        // use
    ‘验证用户名及随机数‘                                                // documentation
);

$soap->register(‘refresh‘,                                                                                                                                                                        // method name
    array(‘refresh_userName‘ => ‘xsd:string‘,‘refresh_randomNum‘ => ‘xsd:string‘),        // input parameters
    //array(‘return‘ => ‘xsd:string‘),// output parameters
        array(‘return‘ => ‘tns:userInfo‘),
    ‘urn:AuthorityServicewsdl‘,                                                                                                                                                        // namespace
    ‘urn:AuthorityServicewsdl#refresh‘,                                                                                                                        // soapaction
    ‘rpc‘,                                                                                                                                                                                                                                        // style
    ‘encoded‘,                                                                                                                                                                                                                        // use
    ‘按时地方‘                                                                                                                                                                                                                        // documentation
);

$soap->register(‘logout‘,                                                                                                                                                                                // method name
    array(‘logout_userName‘ => ‘xsd:string‘),                                                                                                // input parameters
    array(‘return‘ => ‘xsd:int‘),                                                                                                                                                // output parameters
    ‘urn:AuthorityServicewsdl‘,                                                                                                                                                        // namespace
    ‘urn:AuthorityServicewsdl#logout‘,                                                                                                                        // soapaction
    ‘rpc‘,                                                                                                                                                                                                                                        // style
    ‘encoded‘,                                                                                                                                                                                                                        // use
    ‘退出登录‘                                                                                                                                                                                                                        // documentation
);
//大家可能对 $HTTP_RAW_POST_DATA 这个变量比较疑惑,我们没有定义,怎么出来的呢
//我也有这样的想法,不过我看了下手册解释是 usually is the value of $HTTP_RAW_POST_DATA
//所以大家就别管它了,就这样使用吧
$soap->service($HTTP_RAW_POST_DATA);

我们现在看下 客户端的使用

require_once(‘../../lib/nusoap.php‘);

$client=new soapclient(‘http://localhost/nusoap/samples/server/AuthorityService.php?wsdl‘,true);
$err = $client->getError();

$username = "叁石";
$randomnum = "d8A9";
$params1 = array(‘userName‘=>$username,‘randomNum‘=>$randomnum);
$reversed = $client->call(‘validate‘,$params1);//此为返回值
//echo "注册值<br>";
print_r ($reversed);
echo "<br>";

$refresh_username = "叁石";
$refresh_randomnum = "d8A9";
$params1 = array(‘refresh_userName‘=>$refresh_username,‘refresh_randomNum‘=>$refresh_randomnum);
$reversed = $client->call(‘refresh‘,$params1);
//echo "取得值<br>";
print_r ($reversed);
echo "<br>";

$logout_username = "叁石";
$params1 = array(‘logout_userName‘=>$logout_username);
$reversed = $client->call(‘logout‘,$params1);
echo $reversed;

这个就不用多说了,一看应该就明白了 是数组返回的我使用print_r输出了
关于这个功能,我说下我做的实验
首先我用set方法设置了下一个公共变量的值,当用get取得的时候,值为空
说明,每次是建立一个新的访问所以值没有保留
测试2,我使用cookie 设置的值,在get方法的时候,没有取得
说明:没闹明白原因
测试3,使用session  在get方法的时候,也没有取得值
说明,没闹明白
但是取得文件或者数据库连接取得值是没有问题的,也就是可以取得固定介质中的值,文件或者数据库

这个东西到底能干什么还真不清楚,我想是可以完成,2种不同语言的交接,比如 php与asp与jsp的交互
也许有人茫然了,我这里丢了一个感念,soap返回的是一个流,所有可以当作文本流来对待,
使用socket取得。
关于nusoap的使用就到这里了,我不大去弄它的具体原理了,能够使用就够了!所以没有对nusoap的代码做分析

PHP的soap 之 nusoap 的使用

时间: 2024-10-11 07:21:59

PHP的soap 之 nusoap 的使用的相关文章

如何在symfony 控制器里面创建soap web service

通过一些工具将一个控制器设置成一个soap服务将会非常简单.首先,你必须安装了php soap扩展.由于php soap扩展现在不能生成wsdl,你要么自己从头开始创建要模使用第三方生成器. php中有一些可以使用的soap服务接口.Zend SOAP 和 NuSOAP就是其中两个.尽管php soap扩展在这些例子中被使用,通用的思想还是可以被用在其他应用接口. SOAP 的工作是通过暴露PHP对象给外部实体的(使用soap服务的人).首先,创建一个Helloservice类-表示你将在你的s

JAVA调用NuSoap服务

NuSoap是PHP环境下的WebService编程工具,用于创建或调用WebService,是一个开源软件.它完全采用PHP语言编写.通过HTTP收发SOAP消息的一系列PHP类,由NuSphere Corporation(http://www.nusphere.com/)开发.它的优势是不需要扩展库的支持,这种特性使它可用于所有的PHP环境,不受服务器安全设置的影响. 用到的jar包: jaxrpc.jar commons-discovery-0.2.jar commons-logging-

NuSOAP简介 php中使用webservice

许多机构已经采用了Apach和PHP作为他们的Web应用环境.在Web services模式中采用PHP可能看上去可能会比较难.但是事实上,搭配NuSoap,你可以轻松的应用PHP构建SOAP的客户端和服务器端. PHP SOAP服务器   用PHP和NuSoap来建立SOAP服务器非常容易.基本上,你只要写出你想要暴露给你的Web services的函数,然后用NuSoap去注册它们就可以了.OK,另外还需要两步才能完成PHP SOAP服务器的建立.首先你还要在你的PHP代码中创建NuSoap

SOAP扩展PHP轻松实现WebService

最近在一个PHP项目中对接外部接口涉及到WebService,搜索引擎上相关文章不是很多,找到的大都是引用一个号称很强大的开源软件 NuSOAP(下载地址:http://sourceforge.net/projects/nusoap/),即一些类.文章写描述的环境是PHP 4.3,现在都流行PHP 5.2或PHP 5.3了.先拿来试试,运行出错,原来NuSOAP提供的soapclient类与PHP 5中新增了内置的SOAP扩展的SoapClient类冲突了. 虽然NuSOAP号称可以用于所有的P

利用php soap实现web service

php有两个扩展可以实现web service,一个是NuSoap,一个是php 官方的soap扩展,由于soap是官方的,所以我们这里以soap来实现web service.由于默认是没有打开soap扩展的,所以自己先看一下soap扩展有没有打开. 在soap编写web service的过程中主要用到了SoapClient,SoapServer,SoapFault三个类. SoapClient类 这个类用来使用Web services.SoapClient类可以作为给定Web services

php nusoap类的使用、用法、出错 及说明

NuSOAP 是 PHP 环境下的 WEB 服务编程工具,用于创建或调用 WEB 服务它是一个开源软件,当前版本是 0.7.2 ,支 持 SOAP1.1 WSDL1.1 ,可以与其他支持 SOAP1.1 和 WSDL1.1 的系统互操作 NuSOAP 完全由PHP语言编写,由一 系列 PHP 类组成,不需要扩展库的支持,这种特性使得 NuSOAP 可以用于所有的 PHP 环境,不受服务器安全设置的影响 1. NuSOAP 的获取和安装NuSOAP 项目建立在 SourceForge 上,网络地址

利用PHP SOAP扩展实现简单Web Services

原文:利用PHP SOAP扩展实现简单Web Services WebServices能干什么? WebServices 可以将应用程序转换为网络应用程序. 通过使用 WebServices,您的应用程序可以向全世界发布信息,或提供某项功能. 好了,关于WebServices网上资料很多,就不过多介绍了,直接进入主题. PHP有两个扩展类库可以实现WebServices,一个是NuSoap,一个是php官方自带的Soap扩展,在使用上大致都差不多,就拿官方自带的Soap扩展来说吧. 在Soap编

php soap实例讲解

php soap实例讲解 一,什么是soap,什么是wsdl,为什么要用他们 SOAP是基于XML和HTTP通信协议,xml各种平台,各种语言都支持的一个种语言.http呢它得到了所有的因特网浏览器及服务器的支持. WSDL 指网络服务描述语言 (Web Services Description Language),是一种使用 XML 编写的文档.这种文档可描述某个 Web service.它可规定服务的位置,以及此服务提供的操作. 我是做php的,你是java的,他是做.net,如果我们三个之

PHP内置SOAP扩展客户端的使用例子

SOAP已经是属于OUT范畴的技术了,不过因为历史原因,时不时还是会用到它,以前都是用NuSOAP,现在准备试试PHP内置的SOAP扩展.由于文本只打算说说客户端的用法,所以得先找一些能直接用的服务端,Xmethods提供了一些有趣的选择,这里选择其中的服务,功能很简单,就是提供一个IP地址,然后返回国家名称. 先创建一个client实例: $client = new SoapClient('http://www.ecubicle.net/iptocountry.asmx?wsdl', arra