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设计模式 Prototype (原型模式)代码
Jun 26 PHP
php 对输入信息的进行安全过滤的函数代码
Jun 29 PHP
解析关于wamp启动是80端口被占用的问题
Jun 21 PHP
解析strtr函数的效率问题
Jun 26 PHP
领悟php接口中interface存在的意义
Jun 27 PHP
PHP 安全检测代码片段(分享)
Jul 05 PHP
分享PHP函数实现数字与文字分页代码
Jul 28 PHP
php限制文件下载速度的代码
Oct 20 PHP
php抓取网站图片并保存的实现方法
Oct 29 PHP
PHP实现RSA签名生成订单功能【支付宝示例】
Jun 06 PHP
PHP策略模式定义与用法示例
Jul 27 PHP
PHP常用header头定义代码示例汇总
Aug 29 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 curl参数的详解
2013/06/17 PHP
Firefox getBoxObjectFor getBoundingClientRect联系
2008/10/26 Javascript
10个新的最有前途的JavaScript框架
2009/03/12 Javascript
js与jquery中获取当前鼠标的x、y坐标位置的代码
2011/05/23 Javascript
通过jQuery源码学习javascript(二)
2012/12/27 Javascript
JS实现生成会变大变小的圆环实例
2015/08/05 Javascript
JavaScript类型系统之布尔Boolean类型详解
2016/06/26 Javascript
基于AngularJS前端云组件最佳实践
2016/10/20 Javascript
easyUI实现(alert)提示框自动关闭的实例代码
2016/11/07 Javascript
js实现文本上下来回滚动
2017/02/03 Javascript
JavaScript中Array方法你该知道的正确打开方法
2018/09/11 Javascript
ionic使用angularjs表单验证(模板验证)
2018/12/12 Javascript
layui table去掉右侧滑动条的实现方法
2019/09/05 Javascript
Node绑定全局TraceID的实现方法
2019/11/14 Javascript
package.json各个属性说明详解
2020/03/11 Javascript
nodejs中内置模块fs,path常见的用法说明
2020/11/07 NodeJs
Python3中bytes类型转换为str类型
2018/09/27 Python
Python Sphinx使用实例及问题解决
2020/01/17 Python
pytorch中的inference使用实例
2020/02/20 Python
在python image 中实现安装中文字体
2020/05/16 Python
浅谈Python中文件夹和python package包的区别
2020/06/01 Python
在vscode中启动conda虚拟环境的思路详解
2020/12/25 Python
css3实现背景模糊的三种方式(小结)
2020/05/15 HTML / CSS
一个精品风格的世界:Atterley
2019/05/01 全球购物
会计毕业生求职简历的自我评价
2013/10/20 职场文书
毕业生的自我鉴定
2013/10/29 职场文书
高中军训感言400字
2014/02/24 职场文书
库房管理员岗位职责
2014/03/09 职场文书
收款委托书范本
2014/09/11 职场文书
教代会开幕词
2015/01/28 职场文书
2016大学生入党积极分子心得体会
2016/01/06 职场文书
python spilt()分隔字符串的实现示例
2021/05/21 Python
Redis Cluster 字段模糊匹配及删除
2021/05/27 Redis
关于Mybatis中SQL节点的深入解析
2022/03/19 Java/Android
使用 CSS 构建强大且酷炫的粒子动画效果
2022/08/14 HTML / CSS
Win10服务主机占用内存怎么办?Win10服务主机进程占用大量内存解决方法
2022/09/23 数码科技