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将数据导入到Foxmail
Oct 09 PHP
php学习 字符串课件
Jun 15 PHP
php中获取远程客户端的真实ip地址的方法
Aug 03 PHP
PHP数据类型之整数类型、浮点数的介绍
Apr 28 PHP
解析用PHP实现var_export的详细介绍
Jun 20 PHP
利用浏览器的Javascript控制台调试PHP程序
Jan 08 PHP
php 表单提交大量数据发生丢失的解决方法
Mar 03 PHP
php连接odbc数据源并保存与查询数据的方法
Dec 24 PHP
phpStudy访问速度慢和启动失败的解决办法
Nov 19 PHP
php技巧小结【推荐】
Jan 19 PHP
详解PHP中的 input属性(隐藏 只读 限制)
Aug 14 PHP
让你的PHP,APACHE,NGINX支持大文件上传
Mar 09 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
我的论坛源代码(一)
2006/10/09 PHP
php 无法载入mysql扩展
2010/03/12 PHP
PHP在获取指定目录下的目录,在获取的目录下面再创建文件,多平台
2011/08/03 PHP
php上传apk后自动提取apk包信息的使用(示例下载)
2013/04/26 PHP
php登陆页的密码处理方式分享
2013/10/14 PHP
javascript prototype 原型链
2009/03/12 Javascript
用Jquery实现多级下拉框无刷新的联动
2010/12/22 Javascript
JQueryEasyUI Layout布局框架的使用
2013/04/08 Javascript
JS获取随机数函数可自定义最小值最大值
2014/05/08 Javascript
如何让你的Lightbox支持滚轮缩放及Base64图片
2014/12/04 Javascript
三个js循环的关键字示例(for与while)
2016/02/16 Javascript
JavaScript实现带播放列表的音乐播放器实例分享
2016/03/07 Javascript
javascript检查某个元素在数组中的索引值
2016/03/30 Javascript
微信小程序之ES6与事项助手的功能实现
2016/11/30 Javascript
原生JavaScript实现Tooltip浮动提示框特效
2017/03/07 Javascript
Node.js学习之查询字符串解析querystring详解
2017/09/28 Javascript
简单易扩展可控性强的Jquery转盘抽奖程序
2019/03/16 jQuery
微信小程序实现渐入渐出动画效果
2019/06/13 Javascript
一次微信小程序内地图的使用实战记录
2019/09/09 Javascript
vuejs中父子组件之间通信方法实例详解
2020/01/17 Javascript
Vue 简单实现前端权限控制的示例
2020/12/25 Vue.js
node脚手架搭建服务器实现token验证的方法
2021/01/20 Javascript
零基础写python爬虫之urllib2中的两个重要概念:Openers和Handlers
2014/11/05 Python
Python正确重载运算符的方法示例详解
2017/08/27 Python
Python使用matplotlib绘制随机漫步图
2018/08/27 Python
django解决跨域请求的问题详解
2019/01/20 Python
Python语言进阶知识点总结
2019/05/28 Python
法国购买隐形眼镜和眼镜网站:Optical Center
2019/10/08 全球购物
毕业自荐书
2013/12/09 职场文书
父亲追悼会答谢词
2014/01/17 职场文书
一月红领巾广播稿
2014/02/11 职场文书
计算机专业毕业生求职信
2014/04/30 职场文书
中华魂演讲稿
2014/05/13 职场文书
企业务虚会发言材料
2014/10/20 职场文书
历史博物馆观后感
2015/06/05 职场文书
nginx日志格式分析和修改
2022/04/28 Servers