zoukankan      html  css  js  c++  java
  • PHP webservice 的初接触

    webservice 现在是开始流行了,很多业务开启了这个功能。去年接触的一个金融类的项目有类似功能调用。当时没放心思研究,最两天试着接触了下,还真不错的。起步其实挺简单。

    服务端的代码

    server.php

    <?php
    class PassPort {
    
        /**
         * 打招呼
         * @param string $name
         */
        public function hello($name) {
            return 'Hello '. $name. ' !<br />';
        }
    
        /**
         * 求和
         * @param int $a
         * @param int $b
         * @return int
         */
        public function add($a, $b) {
            return $a + $b;
        }
        
        /**
         * 再见了
         */
        public function say() {
            return 'GoodBye!<br />';
        }
    }

    首先需要有个 wsdl 文件。两种方法生成,一个是借助 SoapDiscovery.class.php 类生成,这个需要从网上找下。

    include 'server.php';//服务类的定义文件
    include 'SoapDiscovery.class.php';
    
    //第一个参数为类的名字,这里是 Api 也是生成的wsdl的文件的名字,第二个参数是服务的名字可以自己自由定义
    $wsdl = new SoapDiscovery('Api', 'service');
    $wsdl->getWSDL();

    还有一种方法是通过 ZendStudio 生成,这个其实也很简单。可能有人找不到添加 wsdl ,那就说明你没有安装这个插件。点Help=》Welcome 然后选中 WSDL,会重启一次。 

    新建的时候 tagert namespace 填写自己项目的访问地址 就可以基本不用改。生成之后需要改些东西。

    TestSoapSoap下面填写php webService 如soapservice.php
    NewOperation:添加方法。WebService里需要提供给别人调用的方法名
    input :设置输入参数名和类型
    output:设置返回值。
    Add part:如果在input里添加,就是添加多个参数
    set Type / set Element: 设置参数的input/output类型Type包含常见的数据类型(int,string,boolean,float,time…),Element就是自定义元素类型。

    注意一点,右侧的那些方法都是自己手动 通过 New Operation 来添加的,还有里面的参数。关于参数和返回有点需要注意的,可以没有参数,但是需要有返回,没有返回客户端不知道处理结果啊,我是这么想的,必须要有返回。

    这个时候看这好像完成了,其实没有,因为只有第一个方法(默认会有一个)是存在的,其他的都没有。需要点下中间的那个类似复选框的东西,然后在下面的界面点 Generate Binding Content 然后才可以正常用,否则会出现类似下面的提示错误。

    xxx is not a valid method for this service

    接下来就是写客户端的调用了 client.php。

    <?php
    ini_set('soap.wsdl_cache_enabled', 0);
    ini_set('display_errors', 1);
    error_reporting(E_ALL);//错误显示级别
    
    $client = new SoapClient('soap.wsdl');
    echo $client->hello('wayne');
    echo 'The result is:', $client->add(7, 8), '<br />';
    echo $client->say();
    unset($client);

    这里要提下,出现 xxx is not a valid method for this service 这样的提示,还有个可能就是你的服务端的方法改了,但是soap存在缓存,默认是打开的。linux环境下是 /tmp 目录下,调试过程中可以设置关闭缓存。使用语句  ini_set('soap.wsdl_cache_enabled', 0);来关闭。

    最后通过浏览器访问 client.php 就可以看到想要的结果了。

    Hello wayne !
    The result is:15
    GoodBye!

    好了,到这里,初步接触就结束了。其实实例化SoapServer SoapClient 对象的时候,还有好多参数,我现在的是 server.php 和 client.php 都在通一个目录下。不存在url,之类的路径问题。接下来就要关注这个了。

  • 相关阅读:
    android之Animation
    A. Puzzles CodeForces Round #196 (Div.2)
    HDU 4662 MU Puzzle 2013 Multi-University Training Contest 6
    UVa 11464 Even Parity 偶数矩阵
    LA 3635 Pie 派 NWERC 2006
    UVa 11520 Fill the Square 填充正方形
    UVa 11384 Help is needed for Dexter 正整数序列
    HDU 4639 Hehe 2013 Multi-University Training Contest 4
    HDU 4627 The Unsolvable Problem 2013 Multi-University Training Contest 3
    HDU 4608 I-number 2013 Multi-University Training Contest 1
  • 原文地址:https://www.cnblogs.com/wayne173/p/5917538.html
Copyright © 2011-2022 走看看