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+javascript实现二级级联菜单的制作
May 06 PHP
php mssql 数据库分页SQL语句
Dec 16 PHP
php中对2个数组相加的函数
Jun 24 PHP
php 操作数组(合并,拆分,追加,查找,删除等)
Jul 20 PHP
php多任务程序实例解析
Jul 19 PHP
PHP中echo,print_r与var_dump区别分析
Sep 29 PHP
ThinkPHP实现ajax仿官网搜索功能实例
Dec 02 PHP
PHP中的静态变量及static静态变量使用详解
Nov 05 PHP
Yii多表联合查询操作详解
Jun 02 PHP
Thinkphp5行为使用方法汇总
Dec 21 PHP
PHP+Oracle本地开发环境搭建方法详解
Apr 01 PHP
php 的多进程操作实践案例分析
Feb 28 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将数据导入到Foxmail
2006/10/09 PHP
PHP如何得到当前页和上一页的地址?
2006/11/27 PHP
CodeIgniter配置之database.php用法实例分析
2016/01/20 PHP
PHP页面跳转实现延时跳转的方法
2016/12/10 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
Array.slice()与Array.splice()的返回值类型
2006/10/09 Javascript
JavaScript CSS修改学习第二章 样式
2010/02/19 Javascript
jQuery中:first-child选择器用法实例
2014/12/31 Javascript
js获取时间并实现字符串和时间戳之间的转换
2015/01/05 Javascript
JS实现点击按钮自动增加一个单元格的方法
2015/03/09 Javascript
JavaScript DOM事件(笔记)
2015/04/08 Javascript
JQuery标签页效果的两个实例讲解(4)
2015/09/17 Javascript
JS识别浏览器类型(电脑浏览器和手机浏览器)
2016/11/18 Javascript
BootStrap中Table隐藏后显示问题的实现代码
2017/08/31 Javascript
vue-openlayers实现地图坐标弹框效果
2020/09/24 Javascript
Python 流程控制实例代码
2009/09/25 Python
Eclipse + Python 的安装与配置流程
2013/03/05 Python
python在命令行下使用google翻译(带语音)
2014/01/16 Python
Python使用re模块正则提取字符串中括号内的内容示例
2018/06/01 Python
详解PyCharm安装MicroPython插件的教程
2019/06/24 Python
解决django-xadmin列表页filter关联对象搜索问题
2019/11/15 Python
PyCharm无法引用自身项目解决方式
2020/02/12 Python
Python文字截图识别OCR工具实例解析
2020/03/05 Python
python如何判断IP地址合法性
2020/04/05 Python
不到20行实现Python代码即可制作精美证件照
2020/04/24 Python
如何利用Python 进行边缘检测
2020/10/14 Python
python 调整图片亮度的示例
2020/12/03 Python
HTML最新标准HTML5总结(必看)
2016/06/13 HTML / CSS
社区爱国卫生月活动总结
2014/06/30 职场文书
乡镇综治宣传月活动总结
2014/07/02 职场文书
测绘工程专业求职信
2014/07/15 职场文书
宣传部部长竞选稿
2015/11/21 职场文书
三好学生评选事迹材料(2016精选版)
2016/02/25 职场文书
PyQt5 QThread倒计时功能的实现代码
2021/04/02 Python
MySQL配置主从服务器(一主多从)
2021/08/07 MySQL
CSS基础详解
2021/10/16 HTML / CSS