原文: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应用的更多相关文章

  1. php中soap的使用实例以及生成WSDL文件,提供自动生成WSDL文件的类库——SoapDiscovery.class.php类

    1. web service普及: Webservice soap wsdl区别之个人见解 Web Service实现业务诉求:  Web Service是真正“办事”的那个,提供一种办事接口的统称. ...

  2. php学习之道:php中soap的使用实例以及生成WSDL文件,提供自己主动生成WSDL文件的类库——SoapDiscovery.class.php类

    1. web service普及: Webservice soap wsdl差别之个人见解 Web Service实现业务诉求:  Web Service是真正"办事"的那个,提供 ...

  3. PHP中Soap模块安装与使用例子

    PHP5中的这个SOAP扩展目的是为了实现PHP对Web services的支持.与其它实现PHP对Web services的支持的方法不同,SOAP扩展是用C写的,因此它比其它方法具有速度优势 SO ...

  4. PHP中soap的使用例子

    PHP 使用soap有两种方式. 一.用wsdl文件 服务器端. <?phpclass service{ public function HelloWorld() { return " ...

  5. 终于解决了PHP调用SOAP过程中的种种问题。(转)

    最近在做公司和第三方的一个合作项目,需要调用统一验证接口和统一支付接口.由于牵涉公司机密,所以我要单独写一层PHP的接口给第三方用.前面那个验证接口主要卡在了des加密的方式上,这个有时间再说.这篇主 ...

  6. 简单对象访问协议(Simple Object Access Protocol),PHP调用SOAP过程中的种种问题;php的soap无故出错的真凶:wsdl缓存

       webservice的一种常用实现方式就是soap了.我们后端的JAVA也是用soap的原理实现的.那么我显然首先要上网上搜搜关于soap的文章.最早进入实现的是PHP写的nusoap类.这个n ...

  7. Web Service学习笔记(webservice、soap、wsdl、jws详细分析)

    Web Service概述 Web Service的定义 W3C组织对其的定义如下,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计.Web Service服务通常被定义为一组模块化的API ...

  8. Web Service学习笔记(webservice、soap、wsdl、jws详细分析) (转)

    Web Service概述 Web Service的定义 W3C组织对其的定义如下,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计.Web Service服务通常被定义为一组模块化的API ...

  9. Spring Boot SOAP Webservice例子

    前言 本文将学习如何利用Spring boot快速创建SOAP webservice服务: 虽然目前REST和微服务越来越流行,但是SOAP在某些情况下,仍然有它的用武之地: 在本篇 spring b ...

随机推荐

  1. 《Hadoop》对于高级编程Hadoop实现构建企业级安全解决方案

    本章小结 ●    理解企业级应用的安全顾虑 ●    理解Hadoop尚未为企业级应用提供的安全机制 ●    考察用于构建企业级安全解决方式的方法 第10章讨论了Hadoop安全性以及Hadoop ...

  2. passenger nginx

    sudo dd if=/dev/zero of=/swap bs=1M count=1024 sudo mkswap /swap sudo swapon /swap Nginx with Passen ...

  3. 用于主题检测的临时日志(18506589-369d-4505-a204-3678db17eae5 - 3bfe001a-32de-4114-a6b4-4005b770f6d7)

    这是一个未删除的临时日志.请手动删除它.(252f1b1e-5ce3-42a8-95da-bc0acbd4f637 - 3bfe001a-32de-4114-a6b4-4005b770f6d7)

  4. mysql压力测试

    1.采用 mysqlslap  压力测试 mysqlslap  --defaults-file=/etc/my.cnf --concurrency=200 --iterations=1 --numbe ...

  5. 【cocos2d-js公文】十八、Cocos2d-JS v3.0物业风格API

    1. 新的API风格 我们直接来看看你能够怎样使用Cocos2d-JS v3.0: 曾经的API 新的API node.setPosition(x, y); node.x = x; node.y = ...

  6. mySQl该数据库不能将中国的做法

    1. 更改MySQL安装文件夹(C:\Program Files\MySQL\MySQL Server 5.5)的my.ini文件 设置: default-character-set=utf8 cha ...

  7. Log4j 2.0在具体解释发展先进的使用—SocketAppender远程输出(五岁以下儿童)

    Log4j2的Appenders充分考虑输出日志事件.包装和过滤可以被转发,它包含的主要输出到本地文件.输出到远程主机, 文件包.注射.而且,根据该日志文件的时间点.自己主动文件大小的储存条件. 例如 ...

  8. HDOJ--4821--String【弦hash】

    联系:http://acm.hdu.edu.cn/showproblem.php?pid=4821 题意:给一个字符串,选m个长度为l的子串组成新的串.要求这m个子串互不同样,问有多少种组合. 字符串 ...

  9. HTC T328W刷机包 仿三星S5 UI美化 精简 S5落下

    ROM介绍 1.三星移植TouchWiz接口; 2.三星增加S4壁纸和图标美化; 3.正确ROM呈流线型; 4.正确ROM优化; 5.完成ROOT权限; 6.短信支持来信息亮屏功能(在短信设置里设置) ...

  10. directory not found for option

    directory not found for option '-LS60' 选择项目名称----->Targets----->Build Settings----->Search ...