PHP如何调用Delphi开发的DataSnap/Restful接口服务  
官方Delphi 学习QQ群: 682628230(三千人)
频道

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


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($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 

    curl_setopt($ch, CURLOPT_USERPWD, 'username:password');

 

    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>

执行结果为:

20170614234352345.png

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

20170614234456149.png

————————————————

版权声明:本文为CSDN博主「小宇飞刀」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/xieyunc/article/details/73261607



推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.035104990005493 seconds