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生成html分页列表的代码
Mar 18 PHP
php中拷贝构造函数、赋值运算符重载
Jul 25 PHP
php多个字符串替换成同一个的解决方法
Jun 18 PHP
php删除字符串末尾子字符,删除开始字符,删除两端字符(实现代码)
Jun 27 PHP
如何使用PHP实现javascript的escape和unescape函数
Jun 29 PHP
php上传文件,创建递归目录的实例代码
Oct 18 PHP
php调用C代码的实现方法
Mar 11 PHP
PHP获取当前URL路径的处理方法(适用于多条件筛选列表)
Feb 10 PHP
cakephp2.X多表联合查询join及使用分页查询的方法
Feb 23 PHP
thinkPHP5.0框架独立配置与动态配置方法
Mar 17 PHP
PHP静态延迟绑定和普通静态效率的对比
Oct 20 PHP
PHP 自动加载类原理与用法实例分析
Apr 14 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
php快递单号查询接口使用示例
2014/05/05 PHP
php字符比较函数similar_text、strnatcmp与strcasecmp用法分析
2014/11/18 PHP
php抽象类使用要点与注意事项分析
2015/02/09 PHP
PHP实现一维数组转二维数组的方法
2015/02/25 PHP
PHP函数积累总结
2019/03/19 PHP
PHP中的self关键字详解
2019/06/23 PHP
PHP开发api接口安全验证操作实例详解
2020/03/26 PHP
自动生成文章摘要的代码[JavaScript 版本]
2007/03/20 Javascript
一个可以随意添加多个序列的tag函数
2009/07/21 Javascript
javascript拖拽上传类库DropzoneJS使用方法
2013/12/05 Javascript
页面加载完后自动执行一个方法的js代码
2014/09/06 Javascript
node.js中的fs.rename方法使用说明
2014/12/16 Javascript
javascript删除html标签函数cIsHTML
2017/01/09 Javascript
微信小程序开发之改变data中数组或对象的某一属性值
2018/07/05 Javascript
VueJS 取得 URL 参数值的方法
2019/07/19 Javascript
JavaScript实现PC端横向轮播图
2020/02/07 Javascript
原生JS实现记忆翻牌游戏
2020/07/31 Javascript
Vue中 axios delete请求参数操作
2020/08/25 Javascript
[01:52]DOTA2完美大师赛Vega战队趣味视频——kpii老师小课堂
2017/11/25 DOTA
[31:55]完美世界DOTA2联赛循环赛 IO vs GXR BO2第一场 11.04
2020/11/05 DOTA
python中mechanize库的简单使用示例
2014/01/10 Python
使用python检测主机存活端口及检查存活主机
2015/10/12 Python
Python与人工神经网络:使用神经网络识别手写图像介绍
2017/12/19 Python
Python+matplotlib实现计算两个信号的交叉谱密度实例
2018/01/08 Python
python链接oracle数据库以及数据库的增删改查实例
2018/01/30 Python
python表格存取的方法
2018/03/07 Python
浅谈Python 列表字典赋值的陷阱
2019/01/20 Python
python区分不同数据类型的方法
2019/10/14 Python
python编程进阶之类和对象用法实例分析
2020/02/21 Python
解决html5中的video标签ios系统中无法播放使用的问题
2020/08/10 HTML / CSS
英格兰橄榄球商店:England Rugby Store
2016/12/17 全球购物
乌克兰珠宝大卖场:Zlato.ua
2020/09/27 全球购物
上课迟到检讨书100字
2014/01/11 职场文书
学校消防演习方案
2014/02/19 职场文书
股权转让意向书
2014/04/01 职场文书
飞机制造技术专业求职信
2014/07/27 职场文书