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

合集下载

PHP中使用XML-RPC构造Web Service简单入门

PHP中使用XML-RPC构造Web Service简单入门

PHP中使用XML-RPC构造Web Service简单入门[ Web Service介绍]Web Service就是为了异构系统的通信而产生的,它基本的思想就是使用基于XML的HTTP的远程调用提供一种标准的机制,而省去建立一种新协议的需求。

目前进行Web Service通信有两种协议标准,一种是XML-RPC,另外一种是SOAP。

XML-RPC比较简单,出现时间比较早,SOAP比较复杂,主要是一些需要稳定、健壮、安全并且复杂交互的时候使用。

PHP中集成了XML-RPC和SOAP两种协议的访问,都是集中在xmlrpc扩展当中。

另外,在PHP的PEAR中,不管是PHP 4还是PHP 5,都已经默认集成了XML-RPC扩展,而且该扩展跟xmlrpc扩展无关,能够独立实现XML-RPC的协议交互,如果没有xmlrpc扩展,建议使用PEAR::XML-RPC扩展。

我们这里主要是以XML-RPC来简单描述Web Service的交互过程,部分内容来自PHP手册,更详细内容,建议参考手册。

[ 安装xmlrpc扩展]如果你的系统中没有安装xmlrpc的php扩展,那么请正确安装。

在Windows平台下,首先把PHP安装目录下的扩展php_xmlrpc.dll放到C:\Windows或者C:\Winnt目录下,(PHP4的扩展在C:\php\extensions目录中,PHP5的扩展在C:\php\ext目录中),同时在C:\Windows\php.ini或者C:\Winnt\php.ini中把extension=php_xmlrpc.dll前面的分号";"去掉,然后重启Web服务器后查看phpinfo()有没有XML-RPC项目就能够确定是否已经正确安装xmlrpc扩展。

在Unix/Linux平台下,如果没有安装xmlrpc扩展,请在重新编译PHP,在configure的时候请加入--with-xmlrpc 选项,然后查看phpinfo()看是否正常安装xmlrpc。

PHP SOAP扩展实现Web Service[附带项目实例]

PHP SOAP扩展实现Web Service[附带项目实例]

PHP SOAP扩展实现Web Service一、什么是Web Service?随着Internet在各个领域应用的普及和深化,人们迫切需要能够方便实现Internet上跨平台、语言独立、松散耦合的异构应用的交互和集成。

Web Service作为一种新的计算技术应运而生,提出了面向服务的分布式计算模型。

Web Service采用标准化的通讯机制实现了不同开发环境和不同平台上的应用程序之间的互操作性,满足了人们对B2B(Business to Business,商务对商务)集成、A2A(Application to Application,应用程序对应用程序)通讯和交互处理应用程序通讯的不断增长的需求。

目前,Web Service已经成为学术界和技术厂商如IBM、SUN、Microsoft的研究热点。

接下来我们从Web Service的基本概念、特点、体系架构、以及核心技术XML、SOAP、UDDI 和WSDL进行详细的介绍1.Web Service基本概念2002年4月,W3C(Worldwide Web Consortium,万维网协会)给出定义:“Web Service是一种通过URL标识的软件应用程序,其接口及其绑定形式可以通过XML标准来定义、描述和查找,并能通过XML消息及Internet协议与其他程序进行直接交互”。

简单的说,一个Web Service就是一个能够使用XML消息通过网络来访问的接口,这个接口描述了一组可以访问的操作。

Web Service通过Web发布、查找和调用来实现其功能。

一个Web Service配置好后,就可以被其他应用程序和Web Service发现和调用,这样就既可以响应客户的一个简单请求,也可以完成一个复杂的商务流程。

2.Web Service特点(1)Web Service具有高度的可集成能力。

由于Web Service采用标准Web协议作为组件界面描述和协同描述规范,完全屏蔽了不同软件平台的差异,任何软件都可以通过标准的协议进行互操作,实现了高度的可集成性。

Web_Service和Soap

Web_Service和Soap

递四方物流插件
/services/OrderServices? wsdl
Байду номын сангаас
//指定server端代码的URI(资源标志符) $server->addFunction("add"); $server->handle(); ?>
创建客户端
<?php //建立一个参数数组,存储要访问的提供soap服务的计算机的地址与程序 $arrOptions=array( 'uri'=>'http://172.16.2.26:8026/', 'location'=>'http://172.16.2.26:8026/soap/server.php‘ ); $soapObject = new SoapClient(null,$arrOptions); //实例化客户端对象 echo $soapObject->add(20,30); //调用服务器端的函数add并返回值50 ?>
WSDL文档结构
WSDL是用xml语言来描述Web Service。 通过WSDL可以了解Web Service提供那 些方法、使用的协议和服务器地址。 WSDL主要由五部分组成
WSDL结构
一个WSDL文档是由5个主要元素组成:
types元素 message元素 portType元素 binding元素 service元素
WSDL
types:定义作为服务一部分进行交换的消息中包含的数据类型。数据类型可以是 简单、复杂、派生或者数组类型。在 WSDL 文档的消息元素中引用的类型(架构 定义或参考)是在该 WSDL 文档的类型元素中定义的。 message:定义该服务交换的消息。WSDL 文档对于每个交换消息有一个消息元 素,并且该消息元素包括与 \\ 消息相关的数据类型。例如,在清单 1 中,第一个 消息包括单个部分,它属于类型字符串。 portType:以抽象方式指定作为该服务一部分的操作和消息。对于它定义的每项 服务,WSDL 文档都有一个或多个 portType 定义。在清单 1 中,仅定义了一个 端口类型,即 WeatherService。 binding:将抽象的端口类型与其消息和操作绑定到传输协议和消息格式。在清单 1 中,定义了一个操作 getWeather,它同时具有输入和输出消息。这两则消息都 以 SOAP 正文格式交换。绑定传输协议是 HTTP。 service 和 port:通过为绑定提供单一地址,定义实际服务的名称并为该服务指定 一个端点。一个端口只能有一个地址。该 service 元素通过名称属性将相关端口 组合在一起,为该服务提供逻辑名称。在清单 1 中,定义了一个名为 WeatherWebService 的服务,该服务具有地址为 /weatherservice 的单一端口(或端点)。

Cakephp整合NuSOAP实现Webservice.Cakephp--NuSOAP--Webservice

Cakephp整合NuSOAP实现Webservice.Cakephp--NuSOAP--Webservice

Cakephp整合NuSOAP实现Webservice1. 下载nusoap 库2. 解压到 /app/vendors/nusoap ,目录结构类似:/app/vendors/nusoap/lib/app/vendors/nusoap/samples3. 封装为一个component,保存到 /app/controllers/components/soap.php,以方便在controller里调用:<?php/*** @author RainChen @ Wed Mar 12 17:55:59 CST 2008* @uses wrap nusoap lib* @access public* @version 0.1*/class SoapComponent extends Component{var $defaultClientOptions = array('endpoint' => '','wsdl' => false,'proxyhost' => false,'proxyport' => false,'proxyusername' => false,'proxypassword' => false,'timeout' => 0,'response_timeout' => 20,);var $defaultCallOptions = array('serviceUrl' => '','operation' => '','namespace' => '','soapAction' => '','params' => array(),'debug' => false, // set to true to return debug info'encoding' => 'UTF-8','rpcParams' => null,'style' => 'rpc','headers' => false,'use' => 'encoded','autoCheckWSDL' => true, // if serviceUrl end with "?WSDL" then set the client options['wsdl'] to be true);function initialize(&$controller){vendor('nusoap/lib/nusoap');}/*** @author RainChen @ Wed Mar 12 17:55:37 CST 2008* @uses return a soap client object* @access public* @param mix $options (see $this->defaultClientOptions)* @return object* @version 0.1*/function client($options){$defaultClientOptions = $this->defaultClientOptions;if(!is_array($options)){$options = array('endpoint' => $options);}$options = am($this->defaultClientOptions, $options);return (new nusoap_client($options['endpoint'], $options['wsdl'], $options['proxyhost'], $options['proxyport'], $options['proxyusername'], $options['proxypassword'], $options['timeout'], $options['response_timeout']));}/*** @author RainChen @ Wed Mar 12 17:55:16 CST 2008* @uses quick call* @access public* @param array $options (see $this->defaultCallOptions)* @return array* @version 0.1*/function call($options){$defaultOptions = $this->defaultCallOptions;$options = am($defaultOptions, $options);if($options['soapAction'] == ''){$options['soapAction'] = $options['namespace']. '/'. $options['operation']; }$clientOptions = $this->defaultClientOptions;$clientOptions['endpoint'] = $options['serviceUrl'];if($options['autoCheckWSDL']){if(strpos($options['serviceUrl'], '?WSDL') > 0){$clientOptions['wsdl'] = true;}}$client = $this->client($clientOptions);$client->soap_defencoding = $options['encoding'];$client->decode_utf8 = false;$result = $client->call($options['operation'], $options['params'], $options['namespace'], $options['soapAction'], $options['headers'], $options['rpcParams'], $options['style'], $options['use']); $return = array('fault' => null,'error' => null,'result' => null,);if($client->fault){$return['fault'] = $result;}else{$err = $client->getError();if ($err){$return['error'] = $err;}else{$return['result'] = $result;}}if($options['debug']){$return['request'] = $client->request;$return['response'] = $client->response;$return['debug'] = $client->getDebug();}return $return;}/*** @author RainChen @ Wed Mar 12 17:57:29 CST 2008* @uses quick debug for $this->call() result;* @access public* @param array $result* @return void* @version 0.1*/function debug($result){if ($result['fault']) {echo '<h2>Fault (Expect - The request contains an invalid SOAP body)</h2><pre>';print_r($result['fault']); echo '</pre>';} else {if ($result['error']) {echo '<h2>Error</h2><pre>' . $result['error'] . '</pre>';} else {echo '<h2>Result</h2><pre>'; print_r($result['result']); echo '</pre>';}}echo '<h2>Request</h2><pre>' . htmlspecialchars($result['request'], ENT_QUOTES) . '</pre>';echo '<h2>Response</h2><pre>' . htmlspecialchars($result['response'], ENT_QUOTES) . '</pre>';echo '<h2>Debug</h2><pre>' . htmlspecialchars($result['debug'], ENT_QUOTES) . '</pre>';}}?>4. 在任意controller里添加测试:class TestController extends AppController{var $components = array(''Soap');function test(){$soapRequest = array('serviceUrl' => 'http://webService.asmx?WSDL','operation' => 'getUser','encoding' => 'UTF-8','debug' => true, // set to true to return debug info'params' => array('username' => 'abc',),);$result = $this->Soap->call($soapRequest);isset($soapRequest['debug']) && $soapRequest['debug'] && $this->Soap->debug($result);}}备注:构建服务端时,serviceUrl 须加 ?WSDL 后缀2. 返回结果在:$soapRequest['result']中3.如果$soapRequest 中有debug选项,$result会包含调试信息,可通过$this->Soap->debug($result) 快速调试。

php中创建和调用webservice接口示例

php中创建和调用webservice接口示例

这篇文章主要介绍了php中创建和调用webservice接口示例,包括webservice基本知识、webservice服务端例子、webservice客户端例子,需要的朋友可以参考下作为开发者来讲,要想写webservice接口或者调用别人的webservice接口,首先需要了解什么是webservice。

简单说, webservice就是一些站点开放一些服务出来, 也可以是你自己开发的service, 也就是一些方法, 通过url,指定某一个方法名,发出请求,站点里的这个服务(方法),接到你的请求,根据传过来的参数,做一些处理,然后把处理后的结果以xml形式返回来给你,你的程序就解析这些xml数据,然后显示出来或做其它操作。

写webservice需要了解:基础的web services 平台是xml + http;另外web services 平台的元素:soap (简易对象访问协议),uddi (通用描述、发现及整合),wsdl (web services 描述语言);任何webservice都包括客户端和服务端。

下面以实例讲解如何用php写webservice接口让别人调用:首先需要建一个.wsdl文件,那么php如何建这个文件呢。

有两种方式可以实现,一种是直接用zend studio工具生成;另一种就是php根据soapdiscovery.class.php自动生成wsdl 文件;具体哪一种根据自己情况选择,我一般用的是前者这样比较快速。

下面写一下用类如何生成wsdl文件,首先需要上网上下载那个类文件,然后引入类文件后,看如下代码:creat_wsdl.php代码如下:include_once('service.php');include_once('soapdiscovery.class.php');$wsdl=new soapdiscovery('service','soap');//第一参数为类名,也是生成wsdl的文件名service.wsdl,第二个参数是服务的名字可以随便写$wsdl-&gt;getwsdl();?&gt;这样运行creat_wsdl.php文件就可以生成wsdl文件了。

基于SOAP扩展的Web Service应用研究

基于SOAP扩展的Web Service应用研究
效 率 和 安 全 性 的 目的 。 关键 词 : A O S P扩展 We ri 压 缩 加 密 bS v c e e
1 引言
SA O P是 We rc bS v e在分 布式环境 中交换信 息的 e i 轻量级协议。S A O P本身并没有定义程序 语义 , 而是 以
X 的形 式提供 了一 个简单 且轻量 , ML 用于在分 布式 环 境 中交换结构化和类型化信息 的机制。X 的平台 无 ML 关性使得 S A 消息可 以 用于任何平 台和系统 。在 实 O P 际应用中 , A O S P消息 的传输还 存在 着许 多 不足 , 如效 率低 , 安全性不 足等。利 用 S A O P扩展 机制 , 以更 改 可 往返 于 We rc bS v e客户端/ 务端 的 S A e i 服 O P消息来 增
加 W bS rc e v e的功能 , e i 以弥补 S A O P消 息传输 中的不
足 。本 文利 用 S A 扩展机 制实现 了用户对线 上传 输 OP
的 X / O P消息 的处理和控 制。 MLS A
图 1 S A 扩展工作原理 图 OP
在 Ci t S r r 同时进行 , ln 和 e v 端 e e 以免造成 S A O P消息 的
输之前 , 我们 通过 S A O P扩展 压缩 要 传输 的 文本 内容
A eD s r le 在 S A 请求或 者响应 从 X 并 l f re eii : O P az ML
行 化之后。
为 了实现 数 据 压 缩 , 使 用 A eS r le和 B - 需 l f rei az J e
( )定 义 一 个 SA 扩 展 类 , 类 继 承 自 1 OP 该

soapclient webservice 方法

SoapClient是一个PHP提供的类,可以用于通过SOAP协议与远程Web服务进行通信。

在使用SoapClient来调用Web服务的方法时,需要了解一些关键知识和注意事项。

一、了解SoapClient和WebService1. SoapClient是一个PHP中提供的类,可以用于创建SOAP客户端,通过SOAP协议与远程Web服务进行通信。

2. Web服务是一个通过网络进行通信的软件系统,通常使用SOAP协议进行数据交换。

二、使用SoapClient调用WebService方法1. 创建SoapClient对象在PHP中,可以使用new关键字来创建SoapClient对象,如下所示:$client = new SoapClient("");其中,是目标Web服务的WSDL(Web服务描述语言)位置区域。

2. 调用Web服务方法通过SoapClient对象,可以使用__soapCall方法来调用远程Web 服务的方法,如下所示:$result = $client->__soapCall("methodName",array($parameters));其中,methodName是目标Web服务中的方法名,$parameters是调用方法所需的参数。

三、注意事项1. 错误处理在调用Web服务方法时,需要对异常和错误进行适当的处理。

可以使用try...catch语句来捕获SoapFault异常,进行错误处理和日志记录。

2. 安全性在与远程Web服务进行通信时,需要考虑数据的安全性和隐私保护。

可以通过SoapClient的一些安全配置来保护通信数据的安全性。

3. 性能优化在调用Web服务方法时,需要考虑性能优化的问题。

可以对SoapClient对象进行一些配置,如设置超时时间、设置缓存等,以提高通信效率。

四、示例代码```php<?php// 创建SoapClient对象$client = new SoapClient("");// 调用Web服务方法try {$result = $client->__soapCall("methodName",array($parameters));// 处理调用结果var_dump($result);} catch (SoapFault $e) {// 处理异常echo "Error: " . $e->getMessage();}```以上就是使用SoapClient调用WebService方法的一些关键知识和注意事项。

PHP5对webservice的实现

PHP5对webservice的实现来段企业级应用吧,主要是讲PHP5对webservice的一些实现(以下的程序可以被JA V A,NET,C等正常调用)国内用PHP写WebService的真的很少,网上资料也没多少,公司的项目开发过程中,经历了不少这方面的东西,写出来以供大家参考(谢谢老农提供的WSDL和程序文件)客户端<?phpheader ( "Content-Type: text/html; charset=utf-8" );/** 指定WebService路径并初始化一个WebService客户端*/$ws = "http://soap/soapCspMessage.php?wsdl";$client = new SoapClient ( $ws, array ('trace' => 1, 'uri' => '/SoapDiscovery/' ) );/** 获取SoapClient对象引用的服务所提供的所有方法*/echo ("SOAP服务器提供的开放函数:");echo ('<pre>');var_dump ( $client->__getFunctions () );echo ('</pre>');echo ("SOAP服务器提供的Type:");echo ('<pre>');var_dump ( $client->__getTypes () );echo ('</pre>');echo ("执行GetGUIDNode的结果:");//$users = $client->GetUsers();//var_dump($HelloWorld );$parameters = array('uname'=>'zxsv',"upassword"=>'123');$out = $client->HelloWorld($parameters);$datadb = $out->HelloWorldResponse;var_dump($out);?>服务端<?phpclass Member{public $UserId;public $Name;public function __construct($parmas){$this->UserId = $parmas[0];$this->Name = $parmas[1];}}$servidorSoap = new SoapServer('testphp.xml',array('uri' => '/','encoding'=>'utf-8','soap_version' => SOAP_1_2 )); $servidorSoap->setClass(Testphp);$servidorSoap->handle();class Testphp {public function HelloWorld($uid){return array('HelloWorldResult'=>"mystring".$uid->{'uname'}.' and '.$uid->{'upassword'});}public function GetMember($uid){$s=array();for($i=0;$i<$uid->{'uid'};$i++){$s[] =&new Member(array($i, $uid->{'uname'}.'我测试'.$i));}return array('GetMemberResult'=>$s);}}?>到这里应该都看的懂吧下面是WSDL文件<?xml version="1.0" encoding="utf-8"?><wsdl:definitions xmlns:soap="/wsdl/soap/" xmlns:tm="/wsdl/mime/textMatching/"xmlns:soapenc="/soap/encoding/"xmlns:mime="/wsdl/mime/" xmlns:tns="/" xmlns:s="/2001/XMLSchema"xmlns:soap12="/wsdl/soap12/"xmlns:http="/wsdl/http/"targetNamespace="/" xmlns:wsdl="/wsdl/"> <wsdl:types><s:schema elementFormDefault="qualified" targetNamespace="/"> <s:element name="HelloWorld"><s:complexType><s:sequence><s:element minOccurs="0" maxOccurs="1" name="uname" type="s:string" /><s:element minOccurs="0" maxOccurs="1" name="upassword" type="s:string" /></s:sequence></s:complexType></s:element><s:element name="HelloWorldResponse"><s:complexType><s:sequence><s:element minOccurs="0" maxOccurs="1" name="HelloWorldResult"type="s:string" /></s:sequence></s:complexType></s:element><s:element name="GetMember"><s:complexType><s:sequence><s:element minOccurs="1" maxOccurs="1" name="uid" type="s:int" /><s:element minOccurs="0" maxOccurs="1" name="uname" type="s:string" /></s:sequence></s:complexType></s:element><s:element name="GetMemberResponse"><s:complexType><s:sequence><s:element minOccurs="0" maxOccurs="1" name="GetMemberResult" type="tns:ArrayOfMember" /></s:sequence></s:complexType></s:element><s:complexType name="ArrayOfMember"><s:sequence><s:element minOccurs="0" maxOccurs="unbounded" name="Member" nillable="true" type="tns:Member" /></s:sequence></s:complexType><s:complexType name="Member"><s:sequence><s:element minOccurs="1" maxOccurs="1" name="UserId" type="s:int" /><s:element minOccurs="0" maxOccurs="1" name="Name" type="s:string" /></s:sequence></s:complexType></s:schema></wsdl:types><wsdl:message name="HelloWorldSoapIn"><wsdl:part name="parameters" element="tns:HelloWorld" /></wsdl:message><wsdl:message name="HelloWorldSoapOut"><wsdl:part name="parameters" element="tns:HelloWorldResponse" /></wsdl:message><wsdl:message name="GetMemberSoapIn"><wsdl:part name="parameters" element="tns:GetMember" /></wsdl:message><wsdl:message name="GetMemberSoapOut"><wsdl:part name="parameters" element="tns:GetMemberResponse" /></wsdl:message><wsdl:portType name="TestPHPSoap"><wsdl:operation name="HelloWorld"><wsdl:input message="tns:HelloWorldSoapIn" /><wsdl:output message="tns:HelloWorldSoapOut" /></wsdl:operation><wsdl:operation name="GetMember"><wsdl:input message="tns:GetMemberSoapIn" /><wsdl:output message="tns:GetMemberSoapOut" /></wsdl:operation></wsdl:portType><wsdl:binding name="TestPHPSoap" type="tns:TestPHPSoap"><soap:binding transport="/soap/http" /><wsdl:operation name="rld"><soap:operation soapAction="/HelloWorld" /> <wsdl:input><soap:body use="literal" /></wsdl:input><wsdl:output><soap:body use="literal" /></wsdl:output></wsdl:operation><wsdl:operation name="GetMember"><soap:operation soapAction="/GetMember" /> <wsdl:input><soap:body use="literal" /></wsdl:input><wsdl:output><soap:body use="literal" /></wsdl:output></wsdl:operation></wsdl:binding><wsdl:binding name="TestPHPSoap12" type="tns:TestPHPSoap"><soap12:binding transport="/soap/http" /><wsdl:operation name="HelloWorld"><soap12:operation soapAction="/HelloWorld" /> <wsdl:input><soap12:body use="literal" /></wsdl:input><wsdl:output><soap12:body use="literal" /></wsdl:output></wsdl:operation><wsdl:operation name="GetMember"><soap12:operation soapAction="/GetMember" /><wsdl:input><soap12:body use="literal" /></wsdl:input><wsdl:output><soap12:body use="literal" /></wsdl:output></wsdl:operation></wsdl:binding><wsdl:service name="TestPHP"><wsdl:port name="TestPHPSoap" binding="tns:TestPHPSoap"><soap:address location="http://soap/goodwsdl/testphp.php" /></wsdl:port><wsdl:port name="TestPHPSoap12" binding="tns:TestPHPSoap12"><soap12:address location="http://soap/goodwsdl/testphp.php" /></wsdl:port></wsdl:service></wsdl:definitions>这里有返回的两个字段,一个是返回字符串,这个很好理解<s:element name="HelloWorld"><s:complexType><s:sequence><s:element minOccurs="0" maxOccurs="1" name="uname" type="s:string" /><s:element minOccurs="0" maxOccurs="1" name="upassword" type="s:string" /></s:sequence></s:complexType></s:element><s:element name="HelloWorldResponse"><s:complexType><s:sequence><s:element minOccurs="0" maxOccurs="1" name="HelloWorldResult" type="s:string" /></s:sequence></s:complexType></s:element>这一段就字符串的那返回数组的就比较麻烦了,我和老农搞了一两周才发现是WSDL文件写错了,看下面的一段<s:element name="GetMember"><s:complexType><s:sequence><s:element minOccurs="1" maxOccurs="1" name="uid" type="s:int" /><s:element minOccurs="0" maxOccurs="1" name="uname" type="s:string" /></s:sequence></s:complexType></s:element><s:element name="GetMemberResponse"><s:complexType><s:sequence><s:element minOccurs="0" maxOccurs="1" name="GetMemberResult" type="tns:ArrayOfMember" /></s:sequence></s:complexType></s:element><s:complexType name="ArrayOfMember"><s:sequence><s:element minOccurs="0" maxOccurs="unbounded" name="Member" nillable="true" type="tns:Member" /></s:sequence></s:complexType><s:complexType name="Member"><s:sequence><s:element minOccurs="1" maxOccurs="1" name="UserId" type="s:int" /><s:element minOccurs="0" maxOccurs="1" name="Name" type="s:string" /></s:sequence></s:complexType>第一段GetMember是输入,最重要的是GetMemberResponse这段,看type="tns:ArrayOfMember"这里,返回一个数组,WSDL中定义了ArrayOf这个,后面的就简单了,ArrayOfMember的类型是type="tns:Member" ,从name="Member"得到要返回的数组,完工。

php+soap

soap编码转换phpsoapphp在给CHINAZ资讯(dedecms)做同步bbsmax passport登陆api时,因为bbsmax使用utf-8编码,而资讯这边用的是GBK编码,导致乱码。

开始想自己转码,但有点麻烦。

后面想SOAP既然用来针对不同平台,那肯定也包括编码问题,就又认真看了PHP手册,介绍里虽然没有提到,却发现Examples 里有,访问很简单。

只要这么简单,剩下的PHP自己帮忙实现了!实现身份认证通过SoapHeaderSoapHeader实现身份认证之前一直抱怨php的soap很傻,在client端有设置header的方法,在server端却没有取header的方法。

那是很傻很天真,直接用正则表达式从soap信封的header中提取header信息。

最近由于有项目要发布webservice,重新燃起对soap的兴趣,看了w3的英文文档,那是个云里雾里。

收集了一些资料,做了一个关于saop header进行身份认证的实验。

在这个实验中,假定soap client用一个字符串作为身份认证的标识,soap server取到这个字符串后,对其进行辨认,如果与期望相符合,认证通过,如果不符,抛出soapFault。

理论就不多说了,我也不懂,直接上代码client.php<?php$cli=new SoapClient(null,array('uri'=>'http://127.0.0.1/namespace/','location'=>'http://localhost/server.php','trace'=>true));$h=new SoapHeader('http://127.0.0.1/namespace/','auth','123456789',false,SOAP_ACTOR_NEXT); $cli->__setSoapHeaders(array($h));try{echo$cli->say();}catch(Exception$e){echo$e->getMessage();}server.php<?phpclass Server{public function auth($a){if($a!='123456789'){throw new SoapFault('Server','您无权访问');}}function say(){return'Hi';}}$srv=new SoapServer(null,array('uri'=>'http://localhost/namespace'));$srv->setClass('Server');$srv->handle();以上代码就实现了认证的功能,最关键的地方就是SoapHeader的构造。

PHP中soap用法示例【SoapServer服务端与SoapClient客户端编写】

PHP中soap⽤法⽰例【SoapServer服务端与SoapClient客户端编写】本⽂实例讲述了PHP中soap⽤法。

分享给⼤家供⼤家参考,具体如下:⼀、⾸先要设置服务器环境修改php.ini得添加extension=php_soap.dll (加载soap 内置包)修改soap.wsdl_cache_enabled=1 改为soap.wsdl_cache_enabled=0 这个是soap的缓存,测试的时候最好改为0,上线稳定了改为1soap有两种模式⼀种是wsdl,⼀种是no-wsdl⼆、熟悉⼏个函数1. SoapServerSoapServer⽤于创建php服务器端页⾯时定义可被调⽤的函数及返回响应数据格式:$soap = new SoapServer($wsdl,$array);其中,$wsdl为soap使⽤得wsdl⽂件,wsdl是描述Web Service的⼀种标准格式,若将$wsdl设置为null,则表⽰不使⽤wsdl模式。

$array是 SoapServer的属性信息,是⼀个数组。

SoapServer对象的addFunction⽅法是⽤来声明哪个函数可以被客户端调⽤,语法格式如下:$soap->addFunction($function_name);其中,$soap是⼀个SoapServer对象,$function_name是需要被调⽤的函数名。

SoapServer对象的handle⽅法⽤来处理⽤户输⼊并调⽤相应的函数,最后返回给客户端处理的结果。

语法格式如下: $soap->handle([$soap_request]);其中,$soap是⼀个SoapServer对象,$soap_request是⼀个可选参数,⽤来表⽰⽤户的请求信息。

如果不指定$soap_request,则表⽰服务器将接收⽤户的全部请求。

2. SoapClientSoapClient⽤于调⽤远程服务器上的SoapServer页⾯,并实现了对相应函数的调⽤格式:$soap = new SoapClient($wsdl,$array);参数$wsdl和$array与SoapServer相同SoapClient的⽅法,创建语法如下:$soap->user_function($params);其中,$soap是⼀个SoapClient对象,user_function是服务器端要调⽤的函数,$params 是要传⼊函数的参数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

利用PHP SOAP扩展实现简单Web Services
WebServices能干什么?
WebServices 可以将应用程序转换为网络应用程序。

通过使用WebServices,您的应用程序可以向全世界发布信息,或提供某项功能。

好了,关于WebServices网上资料很多,就不过多介绍了,直接进入主题。

PHP有两个扩展类库可以实现WebServices,一个是NuSoap,一个是php官方自带的Soap扩展,在使用上大致都差不多,就拿官方自带的Soap扩展来说吧。

在Soap编写WebServices中主要用到了SoapClient,SoapServer,SoapFault三个类。

SoapClient:用户访问的类,也就是客户端,使用WebServices的类
SoapServer:提供WebServices类,服务端
SoapFault:异常处理类
作为示例,写个超级简单的的WebServices来感受下吧,直接代码说话
1、Myself.class.php--业务逻辑类,功能实现类
<?php
//业务逻辑类
class Myself{
public function info(){
return "新浪微博:Balla_兔子,求关注啦~";
}
}
?>
很简单,无需多余解释,返回一个字符串。

2、soapServer.php--服务端类,提供服务
<?php
//服务端
require_once('Myself.class.php');
$parameter=array(
'uri'=>'http://localhost/',
'location'=>'http://localhost/soap/soapServer.php'
);
$soapServer=new SoapServer(null,$parameter);
$soapServer->setClass('Myself');
$soapServer->handle();
?>
SoapServer有两种操作模式:
上面举例的是non-WSDL模式,在实例化SoapServer类时,一个参数是放WSDL文件,在non-WSDL模式里,可以为空,把配置参数以数组的形式写在第二个参数。

如果用的是WSDL模式,可以直接用WSDL文件让服务器读取配置参数,www.6969g.om 此时可以省略第二个数组参数。

配置参数有许多,上面为简单举例只列出2个,具体大家可以在网上查查
uri--命名空间
location--服务地址
1、WSDL模式在WSDL模式中,构造器可以使用WSDL文件名作为参数,并从WSDL中提取服务所使用的信息。

2、non-WSDL模式在non-WSDL模式中,使用参数来传递要使用的信息,用来管理服务的行为。

在SoapServer类的众多方法中,有三个方法比较重要。

它们是SoapServer::setClass()、SoapServer::addFunction()、SoapServer::handle()。

特别注意,在handle方法之前之后均不能输出任何参数,否则会出错。

3、soapClient.php--客户端类,使用服务
<?php
//客户端
$parameter=array(
'uri'=>'http://localhost/',
'location'=>'http://localhost/soap/soapServer.php'
);
try{
$soapClient=new SoapClient(null,$parameter);
echo $soapClient->info();
}catch(Exception $e){
echo $e->getMessage();
}
?>
SoapClient类可以作为给定WebServices的客户端。

它有两种操作形式:( 和SoapServer的两种模式差不多)
1、WSDL 模式
2、Non-WSDL 模式
以上就是利用PHP SOAP扩展实现的简单WebServices,我们访问soapClient.php试试看。

相关文档
最新文档