PHP如何调用Delphi开发的DataSnap/Restful接口服务

2017-06-16 11:36:38来源:CSDN作者:xieyunc人点击

前面博主写过一篇“ASP如何调用Delphi开发的DataSnap/Restful接口服务”的文章,有网友反映不知道如何使用PHP来调用。

其实PHP调用Restful接口服务比ASP更简单,写一个例子说明一下。

1、通用接口函数调用文件:testRestful.php

<?php	header("Content-Type:text/html;charset=utf-8");?><?php//数组转换成以'/'分隔的字符串 function http_build_query_delphi($arr){	//$arr = array('url'=>'http://www.jb51.net','name'=>'脚本之家','str'=>'PHP教程'); 	$result = '';	//foreach($arr as $key=>$value){ 	foreach($arr as $value){ 		$result .= '/'.$value; 	}	if (strlen($result)>0)		$result = substr($result,1); //删除第一个"/"字符	return $result;}/** * [http 调用接口函数] * @Date   2016-07-11 * @Author GeorgeHao * @param  string       $url     [接口地址] * @param  array        $params  [数组] * @param  string       $method  [GET/POST/DELETE/PUT] * @param  array        $header  [HTTP头信息] * @param  integer      $timeout [超时时间] * @return [type]                [接口返回数据] */function http($func, $params, $method = 'GET', $header = array(), $timeout = 5){	define('_SRV','http://localhost:8019/peci/rest/TServerMethods/'); //定义了一个常量,应从配置文件中读取	define('_KEY','91F11212729292F2136DADED3656B6CECECECD3145474855B6'); //应从配置文件中读取	$params["KeyNumber"] = _KEY;//增加一个Key键值和元素	$url = _SRV . $func;    // POST 提交方式的传入 $set_params 必须是字符串形式    $opts = array(        CURLOPT_TIMEOUT => $timeout,        CURLOPT_RETURNTRANSFER => 1,        CURLOPT_SSL_VERIFYPEER => false,        CURLOPT_SSL_VERIFYHOST => false,        CURLOPT_HTTPHEADER => $header    );    /* 根据请求类型设置特定参数 */    switch (strtoupper($method)) {        case 'GET':			//通常$url=http://localhost/netpay/rest/TServerMethod1/GetXQList?xq=1&room=10110105            //$opts[CURLOPT_URL] = $url . '?' . http_build_query($params);            $opts[CURLOPT_URL] = $url . '/' . http_build_query_delphi($params);			//Delphi生成的Restful服务接口函数调用时不是常见?x=值1&y=值2的方式,而是直接/值1/值2的方式,问号?也用/替代了。			//如:$url=http://localhost/netpay/rest/TServerMethod1/GetXQList/1/10110105            break;        case 'POST':            $params = http_build_query($params);            $opts[CURLOPT_URL] = $url;            $opts[CURLOPT_POST] = 1;            $opts[CURLOPT_POSTFIELDS] = $params;            break;        case 'DELETE':            $opts[CURLOPT_URL] = $url;            $opts[CURLOPT_HTTPHEADER] = array("X-HTTP-Method-Override: DELETE");            $opts[CURLOPT_CUSTOMREQUEST] = 'DELETE';            $opts[CURLOPT_POSTFIELDS] = $params;            break;        case 'PUT':            $opts[CURLOPT_URL] = $url;            $opts[CURLOPT_POST] = 0;            $opts[CURLOPT_CUSTOMREQUEST] = 'PUT';            $opts[CURLOPT_POSTFIELDS] = $params;            break;        default:            throw new Exception('不支持的请求方式!');    }      /* 初始化并执行curl请求 */    $ch = curl_init();    curl_setopt_array($ch, $opts);    $data = curl_exec($ch);    $error = curl_error($ch);	curl_close($ch);    return $data;}?>

2、测试文件:test.php

<?php require("testRestful.php") ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Stict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang = "zh-CN"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head><body><?php$func = "GetRoomInfo_ByRoom";echo "调用接口方法:" . $func . "(xiaoqu_id,room,KeyNumber),结果如下:<hr>";$params = array("xiaoqu_id" => "1", "room" => "10110105");$result = http($func,$params);if ($result === false)	echo "接口方法执行失败!";else	echo "接口方法执行成功!返回结果为:<p>" . $result;?></body></html>
执行结果为:


该接口方法其实查询出了后台数据库中的如下记录:

DEMEO文件打个包提供下载:http://download.csdn.net/download/xieyunc/9870904

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台