当前位置:首页 > 生活百科

php项目开发案例源码(php网页设计实例代码)

栏目:生活百科日期:2025-01-21浏览:0

php的api接口

在实际工作中,使用PHP写api接口是经常做的,PHP写好接口后,前台就可以通过链接获取接口提供的数据,而返回的数据一般分为两种情况,xml和json,在这个过程中,服务器并不知道,请求的来源是什么,有可能是别人非法调用我们的接口,获取数据,因此就要使用安全验证。

验证原理

示意图

原理

从图中可以看得很清楚,前台想要调用接口,需要使用几个参数生成签名。

时间戳:当前时间

随机数:随机生成的随机数

口令:前后台开发时,一个双方都知道的标识,相当于暗号

算法规则:商定好的运算规则,上面三个参数可以利用算法规则生成一个签名。

前台生成一个签名,当需要访问接口的时候,把时间戳,随机数,签名通过URL传递到后台。后台拿到时间戳,随机数后,通过一样的算法规则计算出签名,然后和传递过来的签名进行对比,一样的话,返回数据。

算法规则

在前后台交互中,算法规则是非常重要的,前后台都要通过算法规则计算出签名,至于规则怎么制定,看你怎么高兴怎么来。

我这个算法规则是

1 时间戳,随机数,口令按照首字母大小写顺序排序

2 然后拼接成字符串

3 进行sha1加密

4 再进行MD5加密

5 转换成大写。

前台

这里我并没有实际的前台,直接使用一个PHP文件代替前台,然后通过CURL模拟GET请求。我使用的是TP框架,URL格式是pathinfo格式。

源代码

&<?php/** * Created by PhpStorm. * User: Administrator * Date: 2017/3/16 0016 * Time: 15:56 */namespace ClientController;use ThinkController;class ClientController extends Controller{ const TOKEN = 'API'; //模拟前台请求服务器api接口 public function getDataFromServer(){ //时间戳 $timeStamp = time(); //随机数 $randomStr = $this -&> createNonceStr(); //生成签名 $signature = $this -&> arithmetic($timeStamp,$randomStr); //url地址 $url = "http://www.apitest.com/Server/Server/respond/t/{$timeStamp}/r/{$randomStr}/s/{$signature}"; $result = $this -&> httpGet($url); dump($result); } //curl模拟get请求。 private function httpGet($url){ $curl = curl_init(); //需要请求的是哪个地址 curl_setopt($curl,CURLOPT_URL,$url); //表示把请求的数据已文件流的方式输出到变量中 curl_setopt($curl,CURLOPT_RETURNTRANSFER,1); $result = curl_exec($curl); curl_close($curl); return $result; } //随机生成字符串 private function createNonceStr($length = 8) { $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; $str = ""; for ($i = 0; $i &< $length; $i++) { $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1); } return "z".$str; } /** * @param $timeStamp 时间戳 * @param $randomStr 随机字符串 * @return string 返回签名 */ private function arithmetic($timeStamp,$randomStr){ $arr['timeStamp'] = $timeStamp; $arr['randomStr'] = $randomStr; $arr['token'] = self::TOKEN; //按照首字母大小写顺序排序 sort($arr,SORT_STRING); //拼接成字符串 $str = implode($arr); //进行加密 $signature = sha1($str); $signature = md5($signature); //转换成大写 $signature = strtoupper($signature); return $signature; }}

服务器端

接受前台数据进行验证

源代码

&<?php/** * Created by PhpStorm. * User: Administrator * Date: 2017/3/16 0016 * Time: 16:01 */namespace ServerController;use ThinkController;class ServerController extends Controller{ const TOKEN = 'API'; //响应前台的请求 public function respond(){ //验证身份 $timeStamp = $_GET['t']; $randomStr = $_GET['r']; $signature = $_GET['s']; $str = $this -&> arithmetic($timeStamp,$randomStr); if($str != $signature){ echo "-1"; exit; } //模拟数据 $arr['name'] = 'api'; $arr['age'] = 15; $arr['address'] = 'zz'; $arr['ip'] = "192.168.0.1"; echo json_encode($arr); } /** * @param $timeStamp 时间戳 * @param $randomStr 随机字符串 * @return string 返回签名 */ public function arithmetic($timeStamp,$randomStr){ $arr['timeStamp'] = $timeStamp; $arr['randomStr'] = $randomStr; $arr['token'] = self::TOKEN; //按照首字母大小写顺序排序 sort($arr,SORT_STRING); //拼接成字符串 $str = implode($arr); //进行加密 $signature = sha1($str); $signature = md5($signature); //转换成大写 $signature = strtoupper($signature); return $signature; }}

结果

string(57) "{"name":"api","age":15,"address":"zz","ip":"192.168.0.1"}"

“php项目开发案例源码(php网页设计实例代码)” 的相关文章

天猫精灵智能音箱使用体验(无论是外观还是功能都是杠杠

2019年4月18日,在天猫精灵春季发布会上,阿里巴巴正式发布了旗下首款带屏音箱天猫精灵CC。同年11月15日,天猫精灵系列再添新丁——天猫精灵CCH。在天猫精...

oppo录屏功能在哪里(oppo手机录屏方法)

相信不少用户在玩游戏时,都有过不少的精彩时刻,有时甚至出现了五杀、超神等罕见的画面,但因为没有及时记录下来并分享给他人,成了许多人心中的遗憾。不过,如果你手中有...

华为双屏幕怎么设置方法(值得分享的4种分屏方式)

如今的手机屏幕越做越大,分屏使用已经成为可能。华为为此也推出了分屏的功能,而且现在已经升级为“智慧多窗”功能了。使用更加便利,更加智能。使用方法如下:1、开启智...

京东赠品无货给补发吗(附赠品无货的内部操作)

一小袋巴掌大的海草,200克。原本购买龙虾的马良,拆开快递的那瞬间,觉得好气又有些好笑。他转手把这消息发到群里,群友一阵沸腾:“真是大开眼界。”这一切,源于今年...

国内哪个浏览器好用,电脑最好用浏览器排行

1.谷歌浏览器原生,应用商店均是阉割版,无法提供升级,只有去谷歌官网下载才是原生的谷歌浏览器。优点:Chromium开源内核的浏览器是市场主流,操作轻快,可扩展...

akko机械键盘怎么样(拆解评测akko机械键盘)

在世界巡回之旅的道路上,AKKO似乎并没有将全部创作天赋释放完全,最近又推出了海洋之星系列机械键盘,84键布局以及“清凉”的配色风,果断入手一把体验一番。包装部...

backgroundimage用法(网页制作教程)

更多登录512收藏分享CSS3中用background-image实现粒子动画效果原创2019-04-0312:05·web秀前言继续前几天的文章《王者荣耀匹配...

win7设置自动开机时间如何取消(取消定时关机的教程)

公司电脑加域之后响应相当的缓慢,就连开机都要等好几分钟才能使用(需要加载域设置及监管程序)。下班也是由于电脑比较陈旧每次关机都要等好几分钟,加上有时候外出总是需...

arcgis缓冲区怎么做(举例分析arcgis缓冲区知识)

1.概述缓冲区分析是指以点、线、面实体为基础,自动建立其周围一定宽度范围内的缓冲区多边形图层,然后用该图层与目标图层叠加,进行分析而得到所需结果。缓冲区分析可以...

如何做网络广告推广(见效最好的6种推广方法)

一、产品特点定位,要认真调查产品的核心竞争力,二、产品人群的定位,对客户要分类具体分析,对高中低档产品适应人群的量,三、产品市场的定位,市场份额的多少,做到实体...