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.MVC的模板标签系统(三)
Sep 05 PHP
php 静态变量的初始化
Nov 15 PHP
DEDE采集大师官方留后门的删除办法
Jan 08 PHP
探讨各种PHP字符串函数的总结分析
Jun 05 PHP
PHP中的按位与和按位或操作示例
Jan 27 PHP
在WordPress中安装使用视频播放器插件Hana Flv Player
Jan 04 PHP
实例讲解PHP设计模式编程中的简单工厂模式
Feb 29 PHP
orm获取关联表里的属性值
Apr 17 PHP
PHP实现防盗链的方法分析
Jul 25 PHP
yii2.0整合阿里云oss删除单个文件的方法
Sep 19 PHP
php实现微信公众平台发红包功能
Jun 14 PHP
Thinkphp5.0框架的Db操作实例分析【连接、增删改查、链式操作等】
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 格式化数字的时候注意数字的范围
2010/04/13 PHP
php 文章调用类代码
2011/08/11 PHP
解析PHP跳出循环的方法以及continue、break、exit的区别介绍
2013/07/01 PHP
PHP利用REFERER根居访问来地址进行页面跳转
2013/09/28 PHP
PHP中字符与字节的区别及字符串与字节转换示例
2016/10/15 PHP
thinkphp5 URL和路由的功能详解与实例
2017/12/26 PHP
Laravel框架实现model层的增删改查(CURD)操作示例
2018/05/12 PHP
索趣科技的答案
2007/02/07 Javascript
关于document.cookie的使用javascript
2008/04/11 Javascript
拖动布局之保存布局页面cookies篇
2010/10/29 Javascript
运用JQuery的toggle实现网页加载完成自动弹窗
2014/03/18 Javascript
Jquery validation remote 验证的缓存问题解决方法
2014/03/25 Javascript
使用jquery获取url以及jquery获取url参数的实现方法
2016/05/25 Javascript
vue集成百度UEditor富文本编辑器使用教程
2018/09/21 Javascript
jqGrid表格底部汇总、合计行footerrow处理
2019/08/21 Javascript
python 获取et和excel的版本号
2009/04/09 Python
python基础教程之实现石头剪刀布游戏示例
2014/02/11 Python
pygame播放音乐的方法
2015/05/19 Python
python 获取指定文件夹下所有文件名称并写入列表的实例
2018/04/23 Python
django框架自定义模板标签(template tag)操作示例
2019/06/24 Python
Python使用Slider组件实现调整曲线参数功能示例
2019/09/06 Python
python3 使用openpyxl将mysql数据写入xlsx的操作
2020/05/15 Python
通过cmd进入python的步骤
2020/06/16 Python
CSS3实现多背景模拟动态边框的效果
2016/11/08 HTML / CSS
如何在Canvas上的图形/图像绑定事件监听的实现
2020/09/16 HTML / CSS
Linux管理员面试题 Linux admin interview questions
2016/07/08 面试题
英语专业学子个人的自我评价
2013/10/02 职场文书
大学生党员自我批评
2014/02/14 职场文书
yy婚礼司仪主持词
2014/03/14 职场文书
公司总经理岗位职责
2014/03/15 职场文书
高中教师考核方案
2014/05/18 职场文书
商务专员岗位职责范本
2014/06/29 职场文书
普通党员对照检查材料
2014/09/24 职场文书
用Python将库打包发布到pypi
2021/04/13 Python
sqlserver2017共享功能目录路径不可改的解决方法
2021/04/16 SQL Server
SpringCloud中分析讲解Feign组件添加请求头有哪些坑梳理
2022/06/21 Java/Android