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 Smarty 字符比较代码
Feb 27 PHP
PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
May 07 PHP
谨慎使用PHP的引用原因分析
Sep 06 PHP
基于PHP的简单采集数据入库程序
Jul 30 PHP
PHP中使用循环实现的金字塔图形
Nov 08 PHP
php隐藏IP地址后两位显示为星号的方法
Nov 21 PHP
php实现微信公众平台账号自定义菜单类
Dec 02 PHP
PHP+Javascript实现在线拍照功能实例
Jul 18 PHP
Netbeans 8.2将支持PHP7 更精彩
Jun 13 PHP
基于ThinkPHP5框架使用QueryList爬取并存入mysql数据库操作示例
May 25 PHP
PHP 构造函数和析构函数原理与用法分析
Apr 21 PHP
php优化查询foreach代码实例讲解
Mar 24 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
星际争霸任务指南——虫族
2020/03/04 星际争霸
特转载一高手总结PHP学习资源和链接.
2006/12/05 PHP
PHP采用XML-RPC构造Web Service实例教程
2014/07/16 PHP
CodeIgniter框架数据库事务处理的设计缺陷和解决方案
2014/07/25 PHP
php实现每天自动变换随机问候语的方法
2015/05/12 PHP
PHP设计模式之工厂模式详解
2017/10/24 PHP
浅谈PHP封装CURL
2019/03/06 PHP
javascript的对话框详解与参数
2007/03/08 Javascript
javascript之锁定表格栏位
2007/06/29 Javascript
JQuery 应用 JQuery.groupTable.js
2010/12/15 Javascript
线路分流自动智能跳转代码,自动选择最快镜像网站(js)
2011/10/31 Javascript
jquery toolbar与网页浮动工具条具体实现代码
2014/01/12 Javascript
JavaScript利用正则表达式去除日期中的-
2014/06/09 Javascript
分享一个常用的javascript静态类
2014/12/31 Javascript
node.js入门实例helloworld详解
2015/12/23 Javascript
jquery的ajax提交form表单的两种方法小结(推荐)
2016/05/25 Javascript
javascript数组去重方法分析
2016/12/15 Javascript
Angular2自定义分页组件
2017/04/19 Javascript
微信小程序实现登录遮罩效果
2018/11/01 Javascript
webpack 代码分离优化快速指北
2019/05/18 Javascript
javascript实现前端分页功能
2020/11/26 Javascript
[03:16]DOTA2完美大师赛小组赛精彩集锦
2017/11/22 DOTA
Python编写的com组件发生R6034错误的原因与解决办法
2013/04/01 Python
Python实现按中文排序的方法示例
2018/04/25 Python
matplotlib 输出保存指定尺寸的图片方法
2018/05/24 Python
对Python强大的可变参数传递机制详解
2019/06/13 Python
opencv+pyQt5实现图片阈值编辑器/寻色块阈值利器
2020/11/13 Python
使用CSS3的box-sizing属性解决div宽高被内边距撑开的问题
2016/06/28 HTML / CSS
HTML5 canvas 基本语法
2009/08/26 HTML / CSS
国家地理在线商店:Shop National Geographic
2018/06/30 全球购物
Stokke美国官方网店:高级儿童家具、推车、汽车座椅和配件
2020/06/06 全球购物
四风问题个人剖析材料
2014/10/07 职场文书
学校2015年纠风工作总结
2015/05/15 职场文书
如何写好活动总结
2019/06/21 职场文书
python实现股票历史数据可视化分析案例
2021/06/10 Python
Python实现滑雪小游戏
2021/09/25 Python