php中soap应用
原文:php中soap应用
SOAP:简单对象访问协议
(SOAP:Simple Object Access Protocol)
简单对象访问协议(SOAP)是一种轻量的、简单的、基于 XML 的协议,它被设计成在 WEB 上交换结构化的和固化的信息。 SOAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议( HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。它还支持从消息系统到远程过程调用(RPC)等大量的应用程序。
下面已一个简单的例子介绍一下soap在php中的应用。
1、使用php提供soap接口给其他人
要使用php提供soap接口,我们唯一需要做的就是使用SoapServer类声明一个接口。
下面是示例代码:
php文件:SoapInterfaceProvider.php
<?php
/**
* 要提供给用户调用的接口
*
*/
function getSoapData() {
$data = '<?xml version="1.0" encoding="utf8" ?><data>hello world<data>';
return $data;
}
//第一个参数代表wsdl,第二个参数uri参数代表命名空间
$soap = new SoapServer(null, array('uri' => 'http://www.qqstore.net/soap/'));
//声明供用户调用的接口
$soap -> addFunction("getSoapData");
$soap -> handle();
?>
2、调用php中已经提供好的soap接口
要测试步骤1中提供的接口,只需要执行下面的测试代码。(只需要执行下面的代码,不需要事先启动或执行
SoapInterfaceProvider.php文件,调用下面的测试代码的时候,php会自动执行SoapInterfaceProvider.php文件。所以
这里的location参数非常重要,不能出错,必须是实际放置SoapInterfaceProvider.php的位置)
php文件:SoapClient.php
<?php
/*
创建Soap客户端,第一个参数代表wsdl,第二个参数中location代表定义SoapServer的php文件的位置,uri参数代表命名空间
测试中发现,这里的uri即使与SoapInterfaceProvide.php中定义的不一样也没有问题,可能与我只有这一个soap接口有关。
*/
$client = new SoapClient(null, array(
'location' => 'http://localhost/webcenter/soap/SoapInterfaceProvider.php',
'uri' => 'http://www.qqstore.net/soap/'));
//调用getSoapData接口
$data = $client -> getSoapData();
echo "获取到数据:" . $data;
?>
在浏览器中输入下面连接进行测试:http://localhost/soap/SoapClient.php (根据实际位置进行调整)
执行结果:
获取到数据:<?xml version="1.0" encoding="utf-8" ?><data>hello world<data>
3、代码优化
上面提供的soap接口的文件SoapInterfaceProvider.php中,只有一个方法,如果有很多方法需要提供的话,每次都调用addFunction方法就显得有点麻烦了。并且将所有实际的方法都写在SoapInterfaceProvider.php文件中也不太合适。
这里我们可以将所有实际要调用的方法提出来放到一个单独的php类中,并且使用setClass方法一次性声明所有的接口。
下面是示例代码:
php文件:SoapMethod.class.php
<?php
class SoapMethod {
/**
* 要提供给用户调用的接口
*
*/
function getSoapData() {
$data = '<?xml version="1.0" encoding="utf-8" ?><data>hello world<data>';
return $data;
}
/**
* 要提供给用户调用的接口1
*
*/
function getSoapData1() {
$data1 = '<?xml version="1.0" encoding="utf-8" ?><data>hello world<data>';
return $data1;
}
}
?>
php文件:SoapInterfaceProvider.php
<?php
//引入包含实际调用的方法的类
require_once './function.class.php';
//第一个参数代表wsdl,第二个参数uri参数代表命名空间
$soap = new SoapServer(null, array('uri' => 'http://www.qqstore.net/soap/'));
//声明供用户调用的接口
$soap -> setClass("SoapMethod");
$soap -> handle();
?>
我在进行测试时,一开始没有使用setClass方法,而是使用了addFunction方法,实际调用的方法也时放到了SoapMethod类中,和
上面的SoapMethod.class.php代码一样。结果调用addFunction方法时,出现如下错误:
Fatal error: Uncaught SoapFault exception: [HTTP] Not Found in C:/AppServ/www/webcenter/soap/SoapClient.php:4 Stack trace: #0 [internal function]: SoapClient->__doRequest('<?xml version="...', 'http://localhos...', 'http://www.qqst...', 1, 0) #1 [internal function]: SoapClient->__call('getSoapData', Array) #2 C:/AppServ/www/webcenter/soap/SoapClient.php(4): SoapClient->getSoapData() #3 {main} thrown in C:/AppServ/www/webcenter/soap/SoapClient.php on line 4
后发现是用于方法定义在了类中,SoapInterfaceProvider.php文件中无法找到。将SoapMethod.class.php中的类定义去掉,只保留定
义的方法就可以了。
如果创建SoapClient时传入的location参数有问题,也会出现上面的错误。
php中soap应用的更多相关文章
- php中soap的使用实例以及生成WSDL文件,提供自动生成WSDL文件的类库——SoapDiscovery.class.php类
1. web service普及: Webservice soap wsdl区别之个人见解 Web Service实现业务诉求: Web Service是真正“办事”的那个,提供一种办事接口的统称. ...
- php学习之道:php中soap的使用实例以及生成WSDL文件,提供自己主动生成WSDL文件的类库——SoapDiscovery.class.php类
1. web service普及: Webservice soap wsdl差别之个人见解 Web Service实现业务诉求: Web Service是真正"办事"的那个,提供 ...
- PHP中Soap模块安装与使用例子
PHP5中的这个SOAP扩展目的是为了实现PHP对Web services的支持.与其它实现PHP对Web services的支持的方法不同,SOAP扩展是用C写的,因此它比其它方法具有速度优势 SO ...
- PHP中soap的使用例子
PHP 使用soap有两种方式. 一.用wsdl文件 服务器端. <?phpclass service{ public function HelloWorld() { return " ...
- 终于解决了PHP调用SOAP过程中的种种问题。(转)
最近在做公司和第三方的一个合作项目,需要调用统一验证接口和统一支付接口.由于牵涉公司机密,所以我要单独写一层PHP的接口给第三方用.前面那个验证接口主要卡在了des加密的方式上,这个有时间再说.这篇主 ...
- 简单对象访问协议(Simple Object Access Protocol),PHP调用SOAP过程中的种种问题;php的soap无故出错的真凶:wsdl缓存
webservice的一种常用实现方式就是soap了.我们后端的JAVA也是用soap的原理实现的.那么我显然首先要上网上搜搜关于soap的文章.最早进入实现的是PHP写的nusoap类.这个n ...
- Web Service学习笔记(webservice、soap、wsdl、jws详细分析)
Web Service概述 Web Service的定义 W3C组织对其的定义如下,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计.Web Service服务通常被定义为一组模块化的API ...
- Web Service学习笔记(webservice、soap、wsdl、jws详细分析) (转)
Web Service概述 Web Service的定义 W3C组织对其的定义如下,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计.Web Service服务通常被定义为一组模块化的API ...
- Spring Boot SOAP Webservice例子
前言 本文将学习如何利用Spring boot快速创建SOAP webservice服务: 虽然目前REST和微服务越来越流行,但是SOAP在某些情况下,仍然有它的用武之地: 在本篇 spring b ...
随机推荐
- ROADS+dijkstra的灵活运用+POJ
ROADS Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10742 Accepted: 3949 Descriptio ...
- 使用智能移动设备访问Ossim制
使用智能移动设备访问Ossim制 下面我们用iPad,iPhone通路ossim效果系统. 高清视频:http://www.tudou.com/programs/view/TikMZ1z1ELw ip ...
- eclipse android ndk 提示Type 'JNIEnv' could not be resolved 等信息解决办法
新配置完eclipse c++ android ndk 环境后,导入项目提示以下信息 是由于没有将jni.h导入的缘故,而这个文件在ndk的目录下面.所以,参照以下步骤:Project Propert ...
- 采用shell脚本统计代码的行数
刚毕业那会儿有一次去台湾公司面试,我问多行代码怎么写.我从来没有想过这个问题,粗略计算,.惊叹:大概几十万行不行. 最近整理资料,看着eclipse左边全面上市,我觉得这个东西.代码共同拥有的行倒底总 ...
- apache 提示You don't have permission to access /test.php on this server.怎样解决
原文:apache 提示You don't have permission to access /test.php on this server.怎样解决 关键字: Apache 403 For ...
- 用CSS3制作很特别的波浪形菜单
原文:用CSS3制作很特别的波浪形菜单 网页菜单我们见过很多,各种炫酷的.实用的菜单比比皆是.昨天我看到一款很特别的CSS3菜单,它的外形是波浪形的,弯弯曲曲,结合背景,看上去还挺不错的,下面看下一效 ...
- 使用Advanced Installer将.exe程序重新封装为.msi程序
原文:使用Advanced Installer将.exe程序重新封装为.msi程序 使用Advanced Installer将.exe程序重新封装为.msi程序 首先安装Advanced instal ...
- 浅析Java中的final关键字(转)
谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法.下 ...
- Visual Studio Code开发TypeScript
[Tool] 使用Visual Studio Code开发TypeScript [Tool] 使用Visual Studio Code开发TypeScript 注意 依照本篇操作步骤实作,就可以在 ...
- JavaScript之事件处理详解
一.事件传播机制 客户端JavaScript程序(就是浏览器啦)采用了异步事件驱动编程模型.当文档.浏览器.元素或与之相关的对象发生某些有趣的事情时,Web浏览器就会产生事件(event).如果Jav ...