PHP 中,在 php.ini 文件中开启了 php_soap.dll 扩展后,就可以支持 SOAP 了。
在soap扩展库中,主要包括三种对象。
1、SoapServer
用于创建php服务器端页面时定义可被调用的函数及返回响应数据。创建一个SoapServer对象的语法格式如下:
$soap = new SoapServer($wsdl, $array);
其中,$wsdl为shoap使用得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、SoapCliet
用于调用远程服务器上的SoapServer页面,并实现了对相应函数的调用。创建一个SoapClient对象的语法格式如下:
$soap = new SoapClient($wsdl,$array);
其中,参数$wsdl和$array与SoapServer相同。
创建SoapClient对象后,调用服务端页面中的函数相当于调用了SoapClient的方法,创建语法如下:
$soap->user_function($params);
其中,$soap是一个SoapClient对象,user_function是服务器端要调用的函数,$params 是要传入函数的参数。
3、SoapFault
SoapFault用于生成soap访问过程中可能出现的错误。创建一个soapFault对象的语法格式如下:
$fault = new SoapFault($faultcode,$faultstring);
其中,$faultcode是用户定义的错误代码,$faultstring是用户自定义的错误信息。soapFault 对象会在服务器端页面出现错误时自动生成,或者通过用户自行创建SoapFault对象时生成。对于 Soap访问时出现的错误,客户端可通过捕捉SoapFalut对象来获得相应的错误信息。
在客户端捕获SoapFault对象后,可以通过下面的代码获得错误代码和错误信息:
$fault->faultcode;//错误代码
$fault->faultstring;//错误信息
其中,$fault是在前面创建的SoapFault对象。
不论是SoapServer还是SoapClient,都接收两个参数,其中第二个参数是Option,它支持若干选项,这里我们用到的有:
uri:命名空间,客户端和服务端需要使用相同的命名空间
location:客户端用,用来指定服务端程序的访问地址,也就是本例第二段代码的程序地址。
trace:客户端用,为true时可以获取服务端和客户端通信的内容,以供调试。
Soapserver.php
<?php //先创建一个SoapServer对象实例,然后将我们要暴露的函数注册, //最后的handle()用来处理接受的soap请求 error_reporting(7); //正式发布时,设为 0 date_default_timezone_set('PRC'); //设置时区 /* 几个供client端调用的函数 */ function reverse($str) { $retval = ''; if (strlen($str) < 1) { return new SoapFault ('Client', '', 'Invalid string'); } for ($i = 1; $i <= strlen($str); $i++) { $retval .= $str [(strlen($str) - $i)]; } return $retval; } function add2numbers($num1, $num2) { if (trim($num1) != intval($num1)) { return new SoapFault ('Client', '', 'The first number is invalid'); } if (trim($num2) != intval($num2)) { return new SoapFault ('Client', '', 'The second number is invalid'); } return ($num1 + $num2); } function gettime() { $time = date('Y-m-d H:i:s', time()); return $time; } $soap = new SoapServer (null, array('uri' => "httr://test-rui")); $soap->addFunction('reverse'); $soap->addFunction('add2numbers'); $soap->addFunction('gettime'); $soap->addFunction(SOAP_FUNCTIONS_ALL); $soap->handle(); ?>
SoapClient.php
<?php error_reporting(7); try { $client = new SoapClient (null, array('location' => "http://www.yiigo.com/Soapserver.php", 'uri' => "http://test-uri")); $str = "This string will be reversed"; $reversed = $client->reverse($str); echo "if you reverse '$str', you will get '$reversed'"; $n1 = 20; $n2 = 33; $sum = $client->add2numbers($n1, $n2); echo "<br>"; echo "if you try $n1 + $n2, you will get $sum"; echo "<br>"; echo "The remoye system time is: " . $client->gettime(); } catch (SoapFault $fault) { echo "Fault! code:" . $fault->faultcode . " string:" . $fault->faultstring; } ?>
if you reverse 'This string will be reversed', you will get 'desrever eb lliw gnirts sihT'
if you try 20 + 33, you will get 53
The remoye system time is: 2012-05-28 16:14:29
通过SoapHeader实现身份认证
<?php class Server { public function auth($a) { if ($a != '123456789') { throw new SoapFault('Server', '用户身份认证信息错误'); } } public function say() { return 'Hi'; } } $srv = new SoapServer(null, array('uri' => 'http://localhost/namespace')); $srv->setClass('Server'); $srv->handle();
客户端
<?php $cli = new SoapClient(null, array('uri' => 'http://localhost/namespace/', 'location' => 'http://localhost/server.php', 'trace' => true)); //auth为服务端要处理的函数 12345689为参数 $h = new SoapHeader('http://localhost/namespace/', 'auth', '123456789', false, SOAP_ACTOR_NEXT); $cli->__setSoapHeaders(array($h)); try { echo $cli->say(); } catch (Exception $e) { echo $e->getMessage(); }
注意观察server.php中的server类有一个方法“auth”,刚好与header的名称对应,方法auth的参数$u,就是soapHeader的data,soapServer接收到这个请求会,先调用auth方法,并把“123456789”作为参数传递给该方法。mustUnderstand参数为false时,即便没有auth这个方法,say方法也会被调用,但是如果它为true的话,如果auth方法不存在,就会返回一个Soapfault告知该header没有被处理。actor参数指名那些role必须处理该header,这儿我理解得不是太透彻,不好说。
$file = $this->getSoapWSDL(); $client = new SoapClient($file);//url可以通过浏览器访问,不能直接调用解决 $param = array('userID' => 'test', 'merchantID' => 'test'); $returnSt = $client->checkUser($param); print_r($returnSt->checkUserResult); public function getSoapWSDL() { //定期将url的文件保存到本地 $file = Mage::getBaseDir() . DS . 'data' . DS . 'shengda' . DS . 'export.wsdl'; if (time() > filemtime($file) + 7 * 86400) { $url = "http://jf.sdo.com/ExchangeScore/ExchangeService.asmx?WSDL"; include_once(BP . DS . "lib/Snoopy.class.php"); $snoopy = new Snoopy; $snoopy->fetch($url); //获取所有内容 $snoopy->read_timeout = 4; $wsdl = $snoopy->results; if ($snoopy->status == '200' && !$snoopy->timed_out) { if (!is_dir(dirname($file))) { mkdir(dirname($file)); } file_put_contents($file, $wsdl); } } return $file; }
相关推荐
java代码-使用java解决http请求SOAP webService接口的源代码 ——学习参考资料:仅用于个人学习使用!
本文主要介绍了 Spring Boot 开发 SOAP WebService 的实现代码,包括如何在 Spring Boot 中开发 SOAP WebService 接口,以及接口如何同时支持 SOAP 和 RESTful 两种协议。SOAP WebService 是一个平台独立的、低耦合...
SOAP WebService调试工具是开发人员用来测试、验证和调试SOAP接口的重要工具。本文将详细介绍SOAP WebService调试工具,并以“SoapUI”为例进行讲解。 SOAPUI是一款功能强大的开源工具,专为SOAP和REST Web服务测试...
在这个场景下,我们将探讨如何使用C++和SOAP技术来实现调用Web服务接口,特别是涉及到上传文件和记录日志的功能。 首先,要理解C++调用Web服务的基本流程。这通常涉及以下步骤: 1. **创建SOAP客户端**: 使用C++,...
PHP使用SOAP调用WEBSERVICE接口
在本文中,我们将详细介绍如何使用 JAVA 调用 SAP SOAP webservice,包括配置 SAP 登录信息、创建 java 项目、添加 web 服务客户端、生成 JAVA 类、调用接口等步骤。 配置 SAP 登录信息 在使用 JAVA 调用 SAP SOAP...
WebService接口,也称为SOAP(Simple Object Access Protocol)服务,是一种基于XML的协议,用于不同应用程序之间交换结构化和类型化的数据。WebService接口利用WSDL(Web Services Description Language)定义服务...
在标题和描述中提到的"webservice,soap调用",这是指使用SOAP协议来调用Web服务的过程。SOAP消息通常以HTTP或HTTPS作为传输协议,其结构主要由三个部分组成:Header、Body和Envelope。Header部分包含了关于消息处理...
2. **创建WebService客户端**:使用WSDL(Web Service Description Language)文件,你可以自动生成Java客户端代码。Eclipse和MyEclipse都有工具可以做到这一点。WSDL文件描述了Web服务的接口、操作、消息格式等。 ...
本篇将深入探讨如何使用SOAP来调用WebService接口,以及相关工具的使用。 首先,我们需要理解SOAP的工作原理。SOAP基于XML(Extensible Markup Language),它定义了一个消息结构,使得应用程序可以发送和接收结构...
- 第三方应用在接入webservice接口前,必须遵循SOAP协议,这是Web服务通信的标准,保证了跨平台的数据交换。 - 提供了两个接口地址:测试地址和正式地址,开发者在开发和测试阶段可以使用测试地址,待验证无误后,...
本文主要介绍如何使用SOAP(Simple Object Access Protocol)方式来调用Webservice接口,以金蝶为例进行详细讲解。 首先,了解SOAP。SOAP是一种基于XML的协议,用于在Web上交换结构化的和类型化的信息。它通过HTTP...
综上所述,Java WebService接口开发涉及多个步骤,包括接口定义、服务实现、客户端代理生成、SOAP消息交换以及安全性和服务管理。掌握这些知识将有助于构建高效、可靠的分布式系统。通过实际案例的实践,你可以更...
### 使用HttpClient调用WebService接口详解 #### 一、概述 在现代软件开发中,Web服务(尤其是WebService)作为实现系统间交互的一种重要手段被广泛采用。WebService提供了通过HTTP协议进行远程过程调用的能力,...
LabView调用WebService接口是一种常见的数据交互方式,尤其在工业自动化和嵌入式系统中,它允许LabView程序与远程服务器进行数据交换。本教程将详细介绍如何在LabView中使用WebService,包括POST方法用于上传数据和...
### Java使用SOAP获取WebService实例解析 #### WebService简介 WebService是一种跨编程语言和操作系统平台的、在网络上进行数据交换的一种方式。它使用标准的Internet协议,如HTTP、XML、SOAP等来实现不同系统间的...
通过阅读提供的"java-soap-webservice"文档,你可以进一步了解具体的实现步骤,包括如何设置项目、配置JAX-WS、生成客户端代码、编写调用服务的代码,以及如何解析响应。实践中,不断动手操作和调试是掌握这一技术的...
它通过SOAP(Simple Object Access Protocol)协议传输数据,使用WSDL(Web Services Description Language)描述服务接口,而UDDI(Universal Description, Discovery, and Integration)则用于服务的发布和查找。...
【SOAP WebService简单例子】 SOAP(Simple Object Access Protocol)是一种基于XML的协议,用于在Web上交换结构化和类型化的信息。它允许服务提供者和消费者之间进行远程调用,使得分布式应用程序能够相互通信。在...
常见的WebService接口标准有SOAP(简单对象访问协议)和REST(Representational State Transfer)。 2. **Strom的特点**: - **用户友好**:Strom界面简洁,操作直观,使得开发者无需复杂的学习过程即可上手。 - ...