Discuz教程网

php调用web service方法

[复制链接]
authicon dly 发表于 2011-1-7 12:42:46 | 显示全部楼层 |阅读模式
由于网上这种资料不是很多,自己研究了一些东西。
第一,很多WEB SERVCIE是C#这类语言写的,所以他们返回的DATASET类型,PHP接收过来不像他们那么方便。
第二,个人认为WEB SERVICE通信时间较长,感觉是个缺陷。
下面来说一下自己写的PHP链接WEB SERVICE类。
webserv.class.php
  1. //通讯类开始
  2.   
  3. class webserv
  4. {
  5. //webservice 地址参数
  6. var $webadd = array(
  7.     "publ" => "client.asmx?wsdl",   
  8.      "client" => "Client.asmx?wsdl",   
  9.       "bann" => "");  
  10.      //调用webservice
  11.     function soap($class,$function,$par = array()){
  12.      //链接web service
  13.      $client = new SoapClient($this->webadd[$class]);
  14.      
  15.      $require = $client->$function($par);
  16.      //调用信息debug
  17.      if (is_soap_fault($require)) {
  18.       echo "远程接口".$function."调用失败!";
  19.       exit();
  20.      }
  21.   //获取返回值
  22.      $function_result = $function."Result";
  23.      $str = $require->$function_result;
  24.       //解析XML
  25.      $row = @simplexml_load_string( $str );
  26.      //如果不能用XML解析直接返回
  27.      if ($row == false) {
  28.       if (is_string($str)){
  29.        return $str;
  30.       } else {
  31.        $require = (get_object_vars($str));
  32.        $str = $require[\'string\'];
  33.        return $str;
  34.       }
  35.      }
  36.   //结果转换为数组
  37.      $row_arr = get_object_vars($row);
  38.      print_r($row_arr);exit();
  39.   $row_return = $row_arr[\'Table\'];
  40.   //判断是不是多反馈记录
  41.   if (is_array($row_arr[\'Table\'])) {
  42.    foreach ($row_return as $key => $vlaues){
  43.      $rows[$key] = get_object_vars($vlaues);
  44.    }
  45.   } else {
  46.    $rows[0] = get_object_vars($row_arr[\'Table\']);
  47.   }
  48.   //通讯记录
  49.   //$this->soap_log($class,$function,$par,$rows);
  50.       return $rows;
  51.     }
  52.    
  53.     //接口通讯记录
  54.     function soap_log($class, $function, $in, $out){
  55.      $log = date("Y-m-d H:i:s");
  56.      $log .= " ".$class."->".$function." input:";
  57.       $input = "";
  58.      if ($in != array()) {
  59.       foreach ($in as $key => $vlaue){
  60.        $input .= $key."=".$vlaue;
  61.       }
  62.       $log .= $input." output:".var_export($rows)."\\n";
  63.      }
  64.     }
  65. }
复制代码

  
以上是通信类的内容。用法很简单
include 一下php类文件
  
  1. <?
  2. include "./webserv.class.php";
  3. $webserv = new webserv;
  4. //这里是调用方法给传递的参数
  5. $a = array("aa"=>"aaaa");
  6. print_r($webser->soap("function_name",$a));
  7. ?>
复制代码








上一篇:PHP静态类
下一篇:PHP操作ubb代码类
authicon 福倒菜菜子 发表于 2011-6-23 04:00:26 | 显示全部楼层
楼主威武
authicon ningbear 发表于 2011-6-23 05:09:48 | 显示全部楼层
不错不错,我喜欢
authicon YNKAZUKI 发表于 2011-6-23 21:59:54 | 显示全部楼层
好东西,要下来看看
authicon 蓝天blue 发表于 2011-6-24 11:00:02 | 显示全部楼层
顶啦,不错吧
authicon D_hong 发表于 2011-6-25 06:00:04 | 显示全部楼层
谢谢,学习了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1314学习网 ( 浙ICP备10214163号 )

GMT+8, 2025-5-3 03:41

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表