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 Mysql日期和时间函数集合
Nov 16 PHP
php中通过Ajax如何实现异步文件上传的代码实例
May 07 PHP
PHP json格式和js json格式 js跨域调用实现代码
Sep 08 PHP
PHP中使用memcache存储session的三种配置方法
Apr 05 PHP
浅谈discuz密码加密的方式
May 22 PHP
PHP中使用sleep造成mysql读取失败的案例和解决方法
Aug 21 PHP
php计算两个日期相差天数的方法
Mar 14 PHP
php实现文件与16进制相互转换的方法示例
Feb 16 PHP
PHP实现mysqli批量执行多条语句的方法示例
Jul 22 PHP
PHP实现正则表达式分组捕获操作示例
Feb 03 PHP
php xhprof使用实例详解
Apr 15 PHP
laravel中数据显示方法(默认值和下拉option默认选中)
Oct 11 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设计模式之解释器模式的深入解析
2013/06/13 PHP
安装apache2.2.22配置php5.4(具体操作步骤)
2013/06/26 PHP
PHP函数strip_tags的一个bug浅析
2014/05/22 PHP
小试JQuery的AutoComplete插件
2011/05/04 Javascript
根据经纬度计算地球上两点之间的距离js实现代码
2013/03/05 Javascript
js算法中的排序、数组去重详细概述
2013/10/14 Javascript
XMLHttpRequest处理xml格式的返回数据(示例代码)
2013/11/21 Javascript
js打造数组转json函数
2015/01/14 Javascript
简单实现异步编程promise模式
2015/07/31 Javascript
jQuery Mobile弹出窗、弹出层知识汇总
2016/01/05 Javascript
基于jquery编写分页插件
2016/03/07 Javascript
js验证框架实现代码分享
2016/05/18 Javascript
node.js实现快速截图
2016/08/27 Javascript
JS简单实现数组去重的方法示例
2017/03/27 Javascript
Javascript(es2016) import和require用法和区别详解
2017/08/11 Javascript
js禁止Backspace键使浏览器后退的实现方法
2017/09/01 Javascript
node.js基础知识小结
2018/02/26 Javascript
node.js监听文件变化的实现方法
2019/04/17 Javascript
详解JavaScript类型判断的四种方法
2020/10/21 Javascript
由Python运算π的值深入Python中科学计算的实现
2015/04/17 Python
在Django的URLconf中使用命名组的方法
2015/07/18 Python
python开发之thread线程基础实例入门
2015/11/11 Python
使用Python保存网页上的图片或者保存页面为截图
2016/03/05 Python
Python在图片中添加文字的两种方法
2017/04/29 Python
用Eclipse写python程序
2018/02/10 Python
用Python将mysql数据导出成json的方法
2018/08/21 Python
Python爬虫学习之获取指定网页源码
2019/07/30 Python
在keras中获取某一层上的feature map实例
2020/01/24 Python
Python异常原理及异常捕捉实现过程解析
2020/03/25 Python
美国手工艺品市场的领导者:Annie’s
2019/04/04 全球购物
毕业生机械建模求职信
2013/10/14 职场文书
高一物理教学反思
2014/01/24 职场文书
企业家王石演讲稿:坚持与放下
2014/04/27 职场文书
小学教师个人总结
2015/02/05 职场文书
复兴之路观后感
2015/06/02 职场文书
运动会宣传稿100字
2015/07/23 职场文书