介绍
小编给大家分享一下PHP开发api接口怎么用,希望大家阅读完这篇文章之后都有所收获、下面让我们一起去探讨吧!
<强> PHP的api接口强>
在实际工作中,使用PHP写api接口是经常做的,PHP写好接口后,前台就可以通过链接获取接口提供的数据,而返回的数据一般分为两种情况,xml和json,在这个过程中,服务器并不知道,请求的来源是什么,有可能是别人非法调用我们的接口,获取数据,因此就要使用安全验证。
<强>验证原理强>
<强>示意图强>
<强>原理强>
从图中可以看得很清楚,前台想要调用接口,需要使用几个参数生成签名。
时间戳:当前时间
随机数:随机生成的随机数
口令:前后台开发时,一个双方都知道的标识,相当于暗号
算法规则:商定好的运算规则,上面三个参数可以利用算法规则生成一个签名。
前台生成一个签的名,当需要访问接口的时候,把时间戳,随机数,签名通过URL传递到后台。后台拿到时间戳,随机数后,通过一样的算法规则计算出签的名,然后和传递过来的签名进行对比,一样的话,返回数据。
<强>算法规则强>
在前后台交互中,算法规则是非常重要的,前后台都要通过算法规则计算出签的名,至于规则怎么制定,看你怎么高兴怎么来。
我这个算法规则是
1时间戳,随机数,口令按照首字母大小写顺序排序
2然后拼接成字符串
3进行sha1加密
4再进行MD5加密
5转换成大写。
<强>前台强>
这里我并没有实际的前台,直接使用一个PHP文件代替前台,然后通过卷曲模拟得到请求。我使用的是TP框架,URL格式是pathinfo格式。
<强>源代码强>
& lt; PHP ?/* * ,* Created by  PhpStorm。 ,*用户:管理员 ,*日期:2020/3/16 0016 *大敌;时间:15:56 ,*/namespace 客户端\控制器; use 认为\控制器; {class ClientController  extends 控制器 ,const TOKEN =, & # 39; api # 39;; ,//模拟前台请求服务器api接口 ,public function  getDataFromServer () {//时才能间戳=美元才能timeStamp 拖延时间();//才能随机数 美元才能randomStr =,美元却;能够→,createNonceStr ();//生才能成签名 美元才能signature =,美元却;能够→,算术(时间戳,randomStr美元);//url才能地址 url 美元;=,才能“http://www.apitest.com/Server/Server/respond/t/{$时间戳}/r/{$ randomStr}/s/{$签名}“;; 美元才能result =,美元却;能够→,httpGet ($ url); 转储(结果)美元才能; ,} ,//卷曲模拟得到请求。 ,private function  httpGet ($ url) { 时间=美元才能curl curl_init ();//需才能要请求的是哪个地址 curl_setopt才能($ curl CURLOPT_URL $ url);//表才能示把请求的数据已文件流的方式输出到变量中 curl_setopt才能(美元curl CURLOPT_RETURNTRANSFER 1); 时间=美元才能result curl_exec($旋度); curl_close才能($旋度); return 才能;美元的结果; ,} ,//随机生成字符串 ,private function  createNonceStr ($ length =, 8), { 时间=美元才能chars “abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; 时间=美元才能str “,“; for 才能;($小姐:=,0;,美元小姐:& lt;,长度;美元,美元我+ +),{ ,,str 美元。=,substr($字符,mt_rand (0,, strlen($字符),安康;1),,1); ,,} return 才能“z" str美元; ,}/* * *,才能@param timeStamp 美元;时间戳 *,才能@param randomStr 美元;随机字符串 *,才能@return string 返回签名 ,*/,private function 算术(时间戳,randomStr美元){ 美元才能arr[& # 39;时间戳# 39;],=,$时间戳; 美元才能arr [& # 39; randomStr& # 39;],=, randomStr美元; 美元才能arr[& # 39;标记# 39;],=,self::令牌;//按才能照首字母大小写顺序排序 这样才能(arr美元,SORT_STRING);//拼才能接成字符串 时间=美元才能str 内爆(arr);//才能进行加密 时间=美元才能signature sha1 (str); 美元才能signature =, md5(签名);//转才能换成大写 时间=美元才能signature strtoupper(签名); return 才能;美元签名; ,} }
<>强服务器端强>
接受前台数据进行验证
<强>源代码强>
& lt; php ?/* * ,* Created by  PhpStorm。 ,*用户:管理员 ,*日期:2020/3/16 0016 *大敌;时间:16:01 ,*/namespace 服务器\控制器; use 认为\控制器; {class ServerController  extends 控制器 ,const TOKEN =, & # 39; api # 39;; ,//响应前台的请求 ,public function 反应(){//才能验证身份 时间=美元才能timeStamp $ _GET [& # 39; t # 39;]; 时间=美元才能randomStr $ _GET [& # 39; " # 39;]; 时间=美元才能signature $ _GET [& # 39; & # 39;]; 美元才能str =,美元却;能够→,算术(时间戳,randomStr美元); ,,如果美元($ str !=,签名){ ,,echo “1“;; ,,退出; ,,}//模才能拟数据 美元才能arr[& # 39;名字# 39;],=,& # 39;api # 39;; 美元才能arr[& # 39;年龄# 39;],=,15; 美元才能arr[& # 39;地址# 39;],=,& # 39;zz # 39;; 美元才能arr [& # 39; ip # 39;],=,“192.168.0.1"; echo 才能json_encode (arr); ,}/* * *,才能@param timeStamp 美元;时间戳 *,才能@param randomStr 美元;随机字符串 *,才能@return string 返回签名 ,*/null null null null null null null null null null null null null null null nullPHP开发api接口怎么用