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 相关文章推荐
JS实现php的伪分页
May 25 PHP
php 使用post,get的一种简洁方式
Apr 25 PHP
smarty基础之拼接字符串的详解
Jun 18 PHP
php获取字段名示例分享
Mar 03 PHP
PHP+jquery+ajax实现即时聊天功能实例
Dec 23 PHP
微信公众平台开发关注及取消关注事件的方法
Dec 23 PHP
PHP反射API示例分享
Oct 08 PHP
php Session无效分析资料整理
Nov 29 PHP
php7安装mongoDB扩展的方法分析
Aug 02 PHP
laravel 中如何使用ajax和vue总结
Aug 16 PHP
PHP小白必须要知道的php基础知识(超实用)
Oct 10 PHP
微信公众平台开发教程⑥ 微信开发集成类的使用图文详解
Apr 10 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
Discuz!下Memcache缓存实现方法
2010/05/28 PHP
PHP 常用数组内部函数(Array Functions)介绍
2013/06/05 PHP
PHP输出两个数字中间有多少个回文数的方法
2015/03/23 PHP
jquery 1.3.2 IE8中的一点点的小问题解决方法
2009/07/10 Javascript
Jquery.TreeView结合ASP.Net和数据库生成菜单导航条
2010/08/27 Javascript
javascript奇异的arguments分析
2010/10/20 Javascript
取得元素的左和上偏移量的方法
2014/09/17 Javascript
基于jquery ui的alert,confirm方案(支持换肤)
2015/04/03 Javascript
JS 根据子网掩码,网关计算出所有IP地址范围示例
2020/04/23 Javascript
JS与jQuery实现隔行变色的方法
2016/09/09 Javascript
原生JS取代一些JQuery方法的简单实现
2016/09/20 Javascript
详解js中Number()、parseInt()和parseFloat()的区别
2016/12/20 Javascript
jQuery实现遮罩层登录对话框
2016/12/29 Javascript
通俗解释JavaScript正则表达式快速记忆
2017/08/23 Javascript
js中DOM事件绑定分析
2018/03/18 Javascript
vue 利用路由守卫判断是否登录的方法
2018/09/29 Javascript
vue 搭建后台系统模块化开发详解
2019/05/01 Javascript
微信小程序 wxParse插件显示视频问题
2019/09/27 Javascript
js事件机制----捕获与冒泡机制实例分析
2020/05/22 Javascript
python批量同步web服务器代码核心程序
2014/09/01 Python
python使用Tesseract库识别验证
2018/03/21 Python
pygame游戏之旅 创建游戏窗口界面
2018/11/20 Python
TensorFlow tensor的拼接实例
2020/01/19 Python
keras获得某一层或者某层权重的输出实例
2020/01/24 Python
Python打包模块wheel的使用方法与将python包发布到PyPI的方法详解
2020/02/12 Python
python批量修改xml属性的实现方式
2020/03/05 Python
详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库
2021/01/24 Python
阿迪达斯中国官网:Adidas中国
2020/12/14 全球购物
大一自我鉴定范文
2013/12/27 职场文书
社区八一活动方案
2014/02/03 职场文书
《蜗牛》教学反思
2014/02/18 职场文书
保险专业大学生职业规划书
2014/03/03 职场文书
国际贸易实务实训报告
2014/11/05 职场文书
2014年度安全工作总结
2014/12/04 职场文书
2015年世界环境日活动方案
2015/05/05 职场文书
分享五个Node.js开发的优秀实践 
2022/04/07 NodeJs