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和ACCESS写聊天室(二)
Oct 09 PHP
PHP函数spl_autoload_register()用法和__autoload()介绍
Feb 04 PHP
php常用Output和ptions/Info函数集介绍
Jun 19 PHP
PHP循环结构实例讲解
Feb 10 PHP
php的hash算法介绍
Feb 13 PHP
php定时执行任务设置详解
Feb 06 PHP
php实现用于计算执行时间的类实例
Apr 18 PHP
PHP和Mysql中转UTF8编码问题汇总
Oct 10 PHP
用PHP将Unicode 转化为UTF-8的实现方法(推荐)
Feb 08 PHP
PHP中for循环与foreach的区别
Mar 06 PHP
php生成微信红包数组的方法
Sep 05 PHP
PHP中mysqli_get_server_version()的实例用法
Feb 03 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中比较简单的导入phpmyadmin生成的sql文件的方法
2011/06/28 PHP
PHP中file_get_contents函数抓取https地址出错的解决方法(两种方法)
2015/09/22 PHP
My Desktop :) 桌面式代码
2008/12/29 Javascript
JAVASCRIPT  THIS详解 面向对象
2009/03/25 Javascript
javascript dom代码应用 简单的相册[firefox only]
2010/06/12 Javascript
非常漂亮的JS+CSS图片幻灯切换特效
2013/11/20 Javascript
如何防止回车(enter)键提交表单
2014/05/11 Javascript
ie8模式下click无反应点击option无反应的解决方法
2014/10/11 Javascript
使用do...while的方法输入一个月中所有的周日(实例代码)
2016/07/22 Javascript
javascript中的后退和刷新实现方法
2016/11/10 Javascript
JavaScript 中 apply 、call 的详解
2017/03/21 Javascript
angular2系列之路由转场动画的示例代码
2017/11/09 Javascript
在 Typescript 中使用可被复用的 Vue Mixin功能
2018/04/17 Javascript
vuex actions传递多参数的处理方法
2018/09/18 Javascript
vue如何进行动画的封装
2018/09/26 Javascript
详解JQuery基础动画操作
2019/04/12 jQuery
CKeditor富文本编辑器使用技巧之添加自定义插件的方法
2019/06/14 Javascript
11个Javascript小技巧帮你提升代码质量(小结)
2020/12/28 Javascript
Django基础知识与基本应用入门教程
2018/07/20 Python
WIn10+Anaconda环境下安装PyTorch(避坑指南)
2019/01/30 Python
python实现屏保程序(适用于背单词)
2019/07/30 Python
python处理自动化任务之同时批量修改word里面的内容的方法
2019/08/23 Python
python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例
2020/02/28 Python
python操作链表的示例代码
2020/09/27 Python
python实现学生信息管理系统源码
2021/02/22 Python
你正在寻找的CSS3 动画技术
2011/07/27 HTML / CSS
CSS3制作苹果风格键盘特效
2015/02/26 HTML / CSS
银行实习生自我鉴定范文
2013/09/19 职场文书
土木工程毕业生推荐信
2013/10/28 职场文书
任课老师推荐信范文
2013/11/24 职场文书
《会变的花树叶》教学反思
2014/02/10 职场文书
建筑工地门卫岗位职责
2014/04/30 职场文书
纪念九一八事变演讲稿:牢记九一八,屈辱怎能忘
2014/09/14 职场文书
2014年药店店长工作总结
2014/11/17 职场文书
2015年党员公开承诺书范文
2015/01/22 职场文书
2016年小学教师师德承诺书
2016/03/25 职场文书