PHP中soap的用法实例


Posted in PHP onOctober 24, 2014

本文实例讲述了PHP中soap的用法,分享给大家供大家参考。具体用法分析如下:

PHP 使用soap有两种方式。

一、用wsdl文件

服务器端:

<?php

class service

{

  public function HelloWorld()

   {

      return  "Hello";

   }

  public  function Add($a,$b)

   {

      return $a+$b;

   }

}

$server=new SoapServer('soap.wsdl',array('soap_version' => SOAP_1_2));

$server->setClass("service");

$server->handle();

?>

资源描述文件,可以用工具(zend studio)生成。其实就是一个xml文件。
<?xml version="1.0" encoding="UTF-8"?>

<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://localhost/interface/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="soap" targetNamespace="http://localhost/interface/">

  <wsdl:types>

    <xsd:schema targetNamespace="http://localhost/interface/">

      <xsd:element name="HelloWorld">

        <xsd:complexType>

          <xsd:sequence>

            <xsd:element name="in" type="xsd:string"/>

          </xsd:sequence>

        </xsd:complexType>

      </xsd:element>

      <xsd:element name="HelloWorldResponse">

        <xsd:complexType>

          <xsd:sequence>

            <xsd:element name="out" type="xsd:string"/>

          </xsd:sequence>

        </xsd:complexType>

      </xsd:element>

      <xsd:element name="Add">

       <xsd:complexType>

        <xsd:sequence>

         <xsd:element name="in" type="xsd:int"></xsd:element>

        </xsd:sequence>

       </xsd:complexType>

      </xsd:element>

      <xsd:element name="AddResponse">

       <xsd:complexType>

        <xsd:sequence>
         <xsd:element name="out" type="xsd:int"></xsd:element>

        </xsd:sequence>

       </xsd:complexType>

      </xsd:element>

    </xsd:schema>

  </wsdl:types>

   <wsdl:message name="AddRequest">    <wsdl:part name="a" type="xsd:int"></wsdl:part>

   <wsdl:part name="b" type="xsd:int"></wsdl:part>

  </wsdl:message>

  <wsdl:message name="AddResponse">

   <wsdl:part name="c" type="xsd:int"></wsdl:part>

  </wsdl:message>

  <wsdl:portType name="TestSoap">     <wsdl:operation name="Add">

     <wsdl:input message="tns:AddRequest"></wsdl:input>

     <wsdl:output message="tns:AddResponse"></wsdl:output>

    </wsdl:operation>

  </wsdl:portType>

  <wsdl:binding name="soapSOAP" type="tns:TestSoap">

   <soap:binding style="document"

    transport="http://schemas.xmlsoap.org/soap/http" />

   <wsdl:operation name="Add">

    <soap:operation soapAction="http://localhost/interface/Add" />

    <wsdl:input>

     <soap:body use="literal"

      namespace="http://localhost/interface/" />

    </wsdl:input>

    <wsdl:output>

     <soap:body use="literal"

      namespace="http://localhost/interface/" />

    </wsdl:output>

   </wsdl:operation>

  </wsdl:binding>

  <wsdl:service name="TestSoap">

    <wsdl:port binding="tns:soapSOAP" name="soapSOAP">

      <soap:address location="http://localhost/interface/myservice.php"/>

    </wsdl:port>

  </wsdl:service>

</wsdl:definitions>

客户端调用:
<?php

$soap = new SoapClient('http://localhost/interface/soap.wsdl');

echo $soap->Add(1,2);

?>

二、不用wsdl文件

服务器端:

<?php

class service

{

  public function HelloWorld()

   {

      return  "Hello";

   }

  public  function Add($a,$b)

   {

      return $a+$b;

   }

}

$server=new SoapServer(null,array('uri' => "abcd"));

$server->setClass("service");

$server->handle();

?>

客户端:
<?php

try{

 $soap = new SoapClient(null,array(

   "location" => "http://localhost/interface/soap.php",

   "uri"      => "abcd",  //资源描述符服务器和客户端必须对应

   "style"    => SOAP_RPC,

   "use"      => SOAP_ENCODED

      ));
 echo $soap->Add(1,2);

}catch(Exction $e){

 echo print_r($e->getMessage(),true);

}

?>

希望本文所述对大家的PHP程序设计有所帮助。

PHP 相关文章推荐
帖几个PHP的无限分类实现想法~
Jan 02 PHP
MayFish PHP的MVC架构的开发框架
Aug 13 PHP
phpmyadmin打开很慢的解决方法
Apr 21 PHP
php实例分享之mysql数据备份
May 19 PHP
PHP实现显示照片exif信息的方法
Jul 11 PHP
thinkphp判断访客为手机端或PC端的方法
Nov 24 PHP
php+html5使用FormData对象提交表单及上传图片的方法
Feb 11 PHP
php实现异步将远程链接上内容(图片或内容)写到本地的方法
Nov 30 PHP
php封装的mongodb操作类代码
Aug 06 PHP
浅谈Laravel中的一个后期静态绑定
Aug 11 PHP
PHP实现的只保留字符串首尾字符功能示例【隐藏部分字符串】
Mar 11 PHP
laravel框架语言包拓展实现方法分析
Nov 22 PHP
php中socket的用法详解
Oct 24 #PHP
PHP利用header跳转失效的解决方法
Oct 24 #PHP
PHP与MYSQL中UTF8 中文排序示例代码
Oct 23 #PHP
php cookie名使用点号(句号)会被转换
Oct 23 #PHP
php格式化时间戳显示友好的时间实现思路及代码
Oct 23 #PHP
PHP正则表达式 /i, /is, /s, /isU等介绍
Oct 23 #PHP
PHP函数实现分页含文本分页和数字分页
Oct 23 #PHP
You might like
采用header定义为文件然后readfile下载(隐藏下载地址)
2014/01/31 PHP
[原创]php集成安装包wampserver修改密码后phpmyadmin无法登陆的解决方法
2016/11/23 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
JavaScript 关键字屏蔽实现函数
2009/08/02 Javascript
禁止选中文字兼容IE、Chrome、FF等
2013/09/04 Javascript
jQuery拖拽 &amp; 弹出层 介绍与示例
2013/12/27 Javascript
浅析jquery某一元素重复绑定的问题
2014/01/03 Javascript
JS实现向表格行添加新单元格的方法
2015/03/30 Javascript
实例讲解javascript注册事件处理函数
2016/01/09 Javascript
AngularJS使用指令增强标准表单元素功能
2016/07/01 Javascript
轻松掌握JavaScript状态模式
2016/09/07 Javascript
微信小程序 Page()函数详解
2016/10/17 Javascript
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
2016/12/14 Javascript
微信小程序之绑定点击事件实例详解
2017/07/07 Javascript
create-react-app构建项目慢的解决方法
2018/03/14 Javascript
vue移动端下拉刷新和上拉加载的实现代码
2018/09/08 Javascript
微信小程序中使用echarts的实现方法
2019/04/24 Javascript
express框架下使用session的方法
2019/07/31 Javascript
JavaScript enum枚举类型定义及使用方法
2020/05/15 Javascript
[03:44]2015国际邀请赛选手档案—Cloud9.NoTail
2015/07/28 DOTA
python使用正则表达式的search()函数实现指定位置搜索功能
2017/11/10 Python
python实现定时自动备份文件到其他主机的实例代码
2018/02/23 Python
python如何压缩新文件到已有ZIP文件
2018/03/14 Python
python 列表输出重复值以及对应的角标方法
2019/06/11 Python
什么是python类属性
2020/06/10 Python
详解python 内存优化
2020/08/17 Python
浅谈CSS3中display属性的Flex布局的方法
2017/08/14 HTML / CSS
捷克体育用品购物网站:D-sport
2017/12/28 全球购物
联想阿根廷官方网站:Lenovo Argentina
2019/10/14 全球购物
sort命令的作用和用法
2012/11/04 面试题
介绍一下linux的文件系统
2015/10/06 面试题
车间班组长岗位职责
2013/11/13 职场文书
小学德育工作经验交流材料
2014/05/22 职场文书
环境工程专业毕业生求职信
2014/09/30 职场文书
乡镇群众路线教育实践活动整改措施
2014/10/04 职场文书
初中化学教学反思
2016/02/22 职场文书