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 相关文章推荐
整理的9个实用的PHP库简介和下载
Nov 09 PHP
php中转义mysql语句的实现代码
Jun 24 PHP
PHP中strtotime函数使用方法详解
Nov 27 PHP
解析如何在PHP下载文件名中解决乱码的问题
Jun 20 PHP
ThinkPHP中的create方法与自动令牌验证实例教程
Aug 22 PHP
PHP实现通用alert函数的方法
Mar 11 PHP
php实现的一个简单json rpc框架实例
Mar 30 PHP
php数组比较实现查找连续数的方法
Jul 29 PHP
php array_walk 对数组中的每个元素应用用户自定义函数详解
Nov 18 PHP
php使用parse_str实现查询字符串解析到变量中的方法
Feb 17 PHP
不常用但很实用的PHP预定义变量分析
Jun 25 PHP
PHP的new static和new self的区别与使用
Nov 27 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获取Google AJAX Search API 数据的代码
2010/03/12 PHP
网站用php实现paypal整合方法
2010/11/28 PHP
php file_put_contents()功能函数(集成了fopen、fwrite、fclose)
2011/05/24 PHP
php 目录遍历、删除 函数的使用介绍
2013/04/28 PHP
php脚本运行时的超时机制详解
2016/02/17 PHP
ThinkPHP自定义Redis处理SESSION的实现方法
2016/05/16 PHP
php 使用curl模拟ip和来源进行访问的实现方法
2017/05/02 PHP
phpStudy配置多站点多域名方法及遇到的403错误解决方法
2017/10/19 PHP
PHPStorm2020.1永久激活及下载更新至2020(推荐)
2020/09/25 PHP
常用DOM整理
2015/06/16 Javascript
js如何打印object对象
2015/10/16 Javascript
uploadify多文件上传参数设置技巧
2015/11/16 Javascript
jQuery技巧之让任何组件都支持类似DOM的事件管理
2016/04/05 Javascript
微信小程序 Template详解及简单实例
2017/01/05 Javascript
EasyUi 打开对话框后控件赋值及赋值后不显示的问题解决办法
2017/01/19 Javascript
Nodejs--post的公式详解
2017/04/29 NodeJs
vue中实现左右联动的效果
2018/06/22 Javascript
微信小程序如何利用getCurrentPages进行页面传值
2019/07/01 Javascript
vue2.x 对象劫持的原理实现
2020/04/19 Javascript
深入理解Django中内置的用户认证
2017/10/06 Python
python+pyqt5实现KFC点餐收银系统
2019/01/24 Python
python视频按帧截取图片工具
2019/07/23 Python
Python Socket TCP双端聊天功能实现过程详解
2020/06/15 Python
scrapy redis配置文件setting参数详解
2020/11/18 Python
Python+unittest+requests+excel实现接口自动化测试框架
2020/12/23 Python
HTML5 video标签(播放器)学习笔记(一):使用入门
2015/04/24 HTML / CSS
英国家庭家具、照明和花园家具购物网站:Furniture123
2018/12/31 全球购物
法国面料和小百货在线商店:Mondial Tissus
2019/03/23 全球购物
婚鞋、新娘鞋、礼服鞋、童鞋:Nina Shoes
2019/09/04 全球购物
KIKO MILANO俄罗斯官网:意大利领先的化妆品和护肤品品牌
2021/01/09 全球购物
应聘医学检验人员自荐信
2013/09/27 职场文书
岗位竞聘报告范文
2014/11/06 职场文书
幼儿园开学家长寄语(2016秋季)
2015/12/03 职场文书
素质教育学习心得体会
2016/01/19 职场文书
本地通过nginx配置反向代理的全过程记录
2021/03/31 Servers
php 原生分页
2021/04/01 PHP