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 array操作10个小技巧分享
Jun 23 PHP
PHP高自定义性安全验证码代码
Nov 27 PHP
php后退一页表单内容保存实现方法
Jun 17 PHP
解析左右值无限分类的实现算法
Jun 20 PHP
smarty内置函数capture用法分析
Jan 22 PHP
symfony表单与页面实现技巧
Jan 26 PHP
PHP使用mkdir创建多级目录的方法
Dec 22 PHP
win平台安装配置Nginx+php+mysql 环境
Jan 12 PHP
php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8示例
May 28 PHP
PHP中Array相关函数简介
Jul 03 PHP
yii2.0整合阿里云oss上传单个文件的示例
Sep 19 PHP
php设计模式之工厂方法模式分析【星际争霸游戏案例】
Jan 23 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
laravel Model 执行事务的实现
2019/10/10 PHP
javascript中的undefined 与 null 的区别  补充篇
2010/03/17 Javascript
浅谈javascript的原型继承
2012/07/25 Javascript
推荐10个2014年最佳的jQuery视频插件
2014/11/12 Javascript
JavaScript数组去重的3种方法和代码实例
2015/07/01 Javascript
jQuery编程中的一些核心方法简介
2015/08/14 Javascript
最细致的vue.js基础语法 值得收藏!
2016/11/03 Javascript
原生js实现倒计时功能(多种格式调用)
2017/01/12 Javascript
Vue-Access-Control 前端用户权限控制解决方案
2017/12/01 Javascript
微信小程序实现两个页面传值的方法分析
2018/12/11 Javascript
Layui弹出层 加载 做编辑页面的方法
2019/09/16 Javascript
vue实现表格过滤功能
2019/09/27 Javascript
Python模块学习 re 正则表达式
2011/05/19 Python
在 Python 应用中使用 MongoDB的方法
2017/01/05 Python
python 连接sqlite及简单操作
2017/06/30 Python
Python3.X 线程中信号量的使用方法示例
2017/07/24 Python
python查找指定文件夹下所有文件并按修改时间倒序排列的方法
2018/10/21 Python
python pyheatmap包绘制热力图
2018/11/09 Python
Python 可变类型和不可变类型及引用过程解析
2019/09/27 Python
Python3中的f-Strings增强版字符串格式化方法
2020/03/04 Python
pycharm 2020.2.4 pip install Flask 报错 Error:Non-zero exit code的问题
2020/12/04 Python
python 录制系统声音的示例
2020/12/21 Python
Python中全局变量和局部变量的理解与区别
2021/02/07 Python
html5拖拽应用记录及注意点
2020/05/27 HTML / CSS
跑步爱好者一站式服务网站:Jack Rabbit
2016/09/01 全球购物
老海军美国官网:Old Navy
2016/09/05 全球购物
Gtech官方网站:地毯清洁器、吸尘器及园艺设备
2018/05/23 全球购物
手工制作的男士奢华英国鞋和服装之家:Goodwin Smith
2019/06/21 全球购物
营销主管自我评价怎么写
2013/09/19 职场文书
护士自我介绍信
2014/01/13 职场文书
《奇妙的国际互联网》 教学反思
2014/02/25 职场文书
《池塘边的叫声》教学反思
2014/04/12 职场文书
公司爱心捐款倡议书
2014/05/14 职场文书
2014年技术部工作总结
2014/12/12 职场文书
收入证明怎么写
2015/06/12 职场文书
RestTemplate如何通过HTTP Basic Auth认证示例说明
2022/03/17 Java/Android