基础概念
SOAP(Simple Object Access Protocol )简单对象访问协议是在分散或分布式的环境中交换信息的简单的协议,是一个基于XML的协议,它包括四个部分:SOAP封装(envelop),封装定义了一个描述消息中的内容是什么,是谁发送的,谁应当接受并处理它以及如何处理它们的框架;SOAP编码规则(encoding rules),用于表示应用程序需要使用的数据类型的实例; SOAP RPC表示(RPC representation),表示远程过程调用和应答的协定;SOAP绑定(binding),使用底层协议交换信息。
WSDL(Web Service Description Language)就是描述XML Web服务的标准XML格式,WSDL由Ariba、Intel、IBM和微软等开发商提出。它用一种和具体语言无关的抽象方式定义了给定Web服务收发的有关操作和消息。就其定义来说,你还不能把WSDL当作一种对象接口定义语言,例如,CORBA或COM等应用程序体系结构就会用到对象接口定义语言。 WSDL保持协议中立,但它确实内建了绑定SOAP的支持,从而同SOAP建立了不可分割的联系。所以,当我在这篇文章中讨论WSDL的时候,我会假定你把SOAP作为了你的通讯协议。
SOAP和WSDL虽然是web service的两大标准,但是两者并没有必然的联系,都可以独立使用。它们之间的关系就类似HTTP和Html之间的关系。前者是一种协议,后者是对一个Web Server的描述。
环境配置
PHP必须支持SOAP扩展
windows下直接修改php.ini配置文件:
extension=php_soap.dll
注释去掉,重启服务
Linux下,编译安装扩展,可参看教程Centos下编译安装PHP扩展
示例
$client = new SoapClient('http://test.test.com/testService.asmx?wsdl'); //wsdl必须添加
$param = array('param1'=>'value1','param2'=>'value2',.....);
$p = $client->__soapCall('callbackFunction',array('parameters' => $param));
print_r($p->callbackFunctionResult);
注意:
1.第一行代码的wsdl必须要添加,否则有可能报错
Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://test.test.com/testService.asmx' : Premature end of data in tag html
2. 第三行代码 callbackFuntion 表示要调用的函数名
3. 第四行代码$p->callbackFunctionResult 这个是固定的,在PHP调用某个方法后,soap对象会自动生成相对应的方法名加上Result后缀的方法,用来显示调用结果,比如我callbackFunction 是test 那么第四行代码应该为:$p->testResult