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定时自动生成静态HTML的实现代码
Jun 20 PHP
php做下载文件的实现代码及文件名中乱码解决方法
Feb 03 PHP
PHP源码之explode使用说明
Aug 05 PHP
PHP中使用cURL实现Get和Post请求的方法
Mar 13 PHP
基于AppServ,XAMPP,WAMP配置php.ini去掉警告信息(NOTICE)的方法详解
May 07 PHP
无刷新动态加载数据 滚动条加载适合评论等页面
Oct 16 PHP
PHP图片等比例缩放生成缩略图函数分享
Jun 10 PHP
在PHP中运行Linux命令并启动SSH服务的例子
Jun 12 PHP
基于PHP的简单采集数据入库程序
Jul 30 PHP
php通过两层过滤获取留言内容的方法
Jul 11 PHP
php图像处理函数imagecopyresampled用法详解
Dec 02 PHP
Laravel 实现密码重置功能
Feb 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
BBS(php &amp; mysql)完整版(四)
2006/10/09 PHP
详解:――如何将图片储存在数据库里
2006/12/05 PHP
PHP获取网卡地址的代码
2008/04/09 PHP
php Undefined index的问题
2009/06/01 PHP
php 操作调试的方法
2012/07/12 PHP
PHP实现的pdo连接数据库并插入数据功能简单示例
2019/03/30 PHP
ExtJS 简介 让你知道extjs是什么
2008/12/29 Javascript
jquery图片延迟加载 前端开发技能必备系列
2012/06/18 Javascript
js实现点击注册按钮开始读秒倒计时的小例子
2013/05/11 Javascript
js改变img标签的src属性在IE下没反应的解决方法
2013/07/23 Javascript
js 使FORM表单的所有元素不可编辑的示例代码
2013/10/17 Javascript
深入理解javascript作用域和闭包
2014/09/23 Javascript
JavaScript使用push方法添加一个元素到数组末尾用法实例
2015/04/06 Javascript
AngularJS指令用法详解
2016/11/02 Javascript
vue.js轮播图组件使用方法详解
2018/07/03 Javascript
vuex + axios 做登录验证 并且保存登录状态的实例
2018/09/16 Javascript
js中实例与对象的区别讲解
2019/01/21 Javascript
NodeJS 文件夹拷贝以及删除功能
2019/09/03 NodeJs
vue使用过滤器格式化日期
2021/01/20 Vue.js
python递归法解决棋盘分割问题
2019/07/17 Python
Python3.7 pyodbc完美配置访问access数据库
2019/10/03 Python
使用Django搭建一个基金模拟交易系统教程
2019/11/18 Python
Windows下Pycharm远程连接虚拟机中Centos下的Python环境(图文教程详解)
2020/03/19 Python
马来西亚在线时尚女装商店:KEI MAG
2017/09/28 全球购物
Notino希腊:购买香水和美容产品
2019/07/25 全球购物
生产总经理岗位职责
2013/12/19 职场文书
运动会广播稿400字
2014/01/25 职场文书
校长先进事迹材料
2014/02/01 职场文书
小学生国庆65周年演讲稿范文(2篇)
2014/09/21 职场文书
教师自查自纠工作情况报告
2014/10/29 职场文书
团员个人年度总结
2015/02/26 职场文书
2015年乡镇卫生院妇幼保健工作总结
2015/05/19 职场文书
幼儿园庆六一主持词
2015/06/30 职场文书
vue引入Excel表格插件的方法
2021/04/28 Vue.js
pytorch 运行一段时间后出现GPU OOM的问题
2021/06/02 Python
Oracle 死锁的检测查询及处理
2021/09/25 Oracle