ThinkPHP通过cURL的调用接口数据,判断返回值

一、从接口管理员那里物理获取AppID、AppSecret(生成方式可参考 生成自己的AppID、AppSecret

 

二、ThinkPHP

cURL查询参数构造:
API采用签名方式验证,事先每个需要调用API接口的系统应申请appid和appsecret,调用接口时,请求参数:

appid(事先申请获取的appid),

random(随机数,调用时随机生成),

timestamp(时间戳,调用时生成当前时间的时间戳),

param(查询参数:province、year、major、type等),

sign(签名,算法:md5(random+timestamp+param+appsecret))
验证:根据appid,获取appsecret,再根据sign的生成规则(md5(random+timestamp+param+appsecret))生成sign,与调用提交的sign对比,一致则验证成功,否则验证失败 。

 

curl请求:

  1.             $appArr = M('Config')->field('appid,appsecret')->find();
                $appid = $appArr['appid'];
     	    $appsecret = $appArr['appsecret']; //后台可视化界面中设置输入AppID、AppSecret模块,录入进配置表后查询出
                $random = mt_rand(1,1000000);
                $timestamp = time();
                $sign = $random.$timestamp.$otherParameter.$appsecret;//签名 ($otherParameter为必要的请求参数,根据自己的需要添加)
     
                $ch = curl_init();
                $url = "http://localhost/index.php/Api?m=Inquire&a=getData&appid=".$appid."&random=".$random."&current=".$timestamp."&otherParameter=".$otherParameter."&sign=".$sign; //调用接口地址
                curl_setopt($ch, CURLOPT_URL, $url);
                
                curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
                curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
                curl_setopt($ch, CURLOPT_HEADER, FALSE);
     
                $res = curl_exec($ch);
                curl_close($ch);
     
                $res_decode = json_decode($res,true);
     
                switch ($res_decode['msg']){
                    case 0 : $error = '验证超时,请重新提交';break;
                    case 2 : $error = '暂无数据';break;
                    case 3 : $error = '验证失败,请重新提交';break;
                }
                $planList = $res_decode['info'];
                $this->assign('error',$error);
                $this->assign('total',$res_decode['total']);
                $this->assign('count',$res_decode['count']);
                $this->assign('dataList',$dataList);

     

 

接口:

public function getData()
    {
        $dao = M('Data'); //数据表
        $random =intval($_GET['random']);
        $timestamp = intval($_GET['current']);
 
        $otherParameter = dHtml(htmlCv($_GET['otherParameter']));//必要请求参数
 
        $appidGet = dHtml(htmlCv($_GET['appid']));
        $mapAppid['appid'] = $appidGet;
        $appsecretGet = M('Proof')->where($mapAppid)->getField('appsecret');//proof表:存储appid、appsecert
        $signCheck = md5($random.$timestamp.$otherParameter.$appsecretGet);
 
        $sign = md5(dHtml(htmlCv($_GET['sign'])));//获取的签名
        if ($sign === $signCheck){
            $now = time();
            if (($now - $timestamp) > 600){ //十分钟
                $data["msg"]="0"; //超时验证失败
                echo json_encode($data);
                exit;
            }else{
                $condition = array();
                $otherParameter && $condition['otherParameter'] = array('eq',$otherParameter);
                $count = $dao->where($condition)->count();
 
                $page = intval($_GET['p']);//获取前台传过来的页码
                $pageSize=30;  //设置每页显示的条数
                $start=($page-1)*30; //从第几条开始取记录
                $totalPage = ceil($count / $pageSize); //总页数
                $dataList = $dao->where($condition)->Limit($start.','.$pageSize)->select();
                if ($dataList !== null){
                    $data["msg"]="1"; //状态码
                    $data['total'] = $totalPage; //总页数
                    $data['info'] = $dataList; //数据列表
                    $data['count'] = $count; //记录数
                    echo json_encode($data);
                    exit;
                }else{
                    $data["msg"]="2"; //暂无数据
                    echo json_encode($data);
                    exit;
                }
            }
        }else{
            $data["msg"]="3"; //sign验证失败
            echo json_encode($data);
            exit;
        }
    }

原文链接:https://blog.csdn.net/m0_37935476/article/details/78999598

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值