由于网上这种资料不是很多,自己研究了一些东西。
第一,很多 WEB SERVCIE是C#这类语言写的,所以他们返回的DATASET类型, PHP接收过来不像他们那么方便。
第二,个人认为 WEB SERVICE通信时间较长,感觉是个缺陷。
下面来说一下自己写的 PHP链接 WEB SERVICE类。
webserv.class. php
- //通讯类开始
-
- class webserv
- {
- //webservice 地址参数
- var $webadd = array(
- "publ" => "client.asmx?wsdl",
- "client" => "Client.asmx?wsdl",
- "bann" => "");
- //调用webservice
- function soap($class,$function,$par = array()){
- //链接web service
- $client = new SoapClient($this->webadd[$class]);
-
- $require = $client->$function($par);
- //调用信息debug
- if (is_soap_fault($require)) {
- echo "远程接口".$function."调用失败!";
- exit();
- }
- //获取返回值
- $function_result = $function."Result";
- $str = $require->$function_result;
- //解析XML
- $row = @simplexml_load_string( $str );
- //如果不能用XML解析直接返回
- if ($row == false) {
- if (is_string($str)){
- return $str;
- } else {
- $require = (get_object_vars($str));
- $str = $require[\'string\'];
- return $str;
- }
- }
- //结果转换为数组
- $row_arr = get_object_vars($row);
- print_r($row_arr);exit();
- $row_return = $row_arr[\'Table\'];
- //判断是不是多反馈记录
- if (is_array($row_arr[\'Table\'])) {
- foreach ($row_return as $key => $vlaues){
- $rows[$key] = get_object_vars($vlaues);
- }
- } else {
- $rows[0] = get_object_vars($row_arr[\'Table\']);
- }
- //通讯记录
- //$this->soap_log($class,$function,$par,$rows);
- return $rows;
- }
-
- //接口通讯记录
- function soap_log($class, $function, $in, $out){
- $log = date("Y-m-d H:i:s");
- $log .= " ".$class."->".$function." input:";
- $input = "";
- if ($in != array()) {
- foreach ($in as $key => $vlaue){
- $input .= $key."=".$vlaue;
- }
- $log .= $input." output:".var_export($rows)."\\n";
- }
- }
- }
复制代码
以上是通信类的内容。用法很简单
include 一下 php类文件
- <?
- include "./webserv.class.php";
- $webserv = new webserv;
- //这里是调用方法给传递的参数
- $a = array("aa"=>"aaaa");
- print_r($webser->soap("function_name",$a));
- ?>
复制代码
|