请求的 api.php页面
<?php /* +------------------------------------------------------------------------------------------- + Title : 请求方传输数据进行请求验证 + Version : V1.0.0.1 + Start - Time : 2017-08-04 21:30 + sgw + Last - Time : 2017-08-04 22:10 + sgw + Desc : 把数据通过cURL请求到接口方返回信息 +------------------------------------------------------------------------------------------- */ header("Content-type:text/html; charset=UTF-8"); /*==注意要开启 PHP扩展配置cURL ==*/ class Api { //Token private static $_TOKEN = 'hello_sgw'; private static $_url = 'http://localhost/myApi/validaApi.php';//注意这里要写你运行程序的文件路径,不能是相对路径 /** * 生成签名 - 发送验证 * 一般需要3个值去发送 token | time | sign */ public static function Sign(){ $time = date('Y-m-d H:i:s'); $token = self::$_TOKEN; # 随机数10位 $rand = rand(1000000000, 9999999999); # 进行排序(这里生成sign一种假设排序规则'A'。实际会按接口方需求编写) $tmpArr = array($time, $token, $rand); sort($tmpArr, SORT_STRING);// 单元被作为字符串来比较 # 数组转成字符串 $sign = implode($tmpArr); $sign = sha1($sign);// sha1加密 # 发送签名到checkApi.php页面验证 $url = self::$_url; # 随机文字用于验证返回验证是否成功 $msg = '随机内容,用于延签成功后返回'; # 参数数组 $data = array( 'time' => $time, 'rand' => $rand, 'sign' => $sign, 'msg' => $msg, ); # cURL方式最常用的请求接口数据,还有用http请求接口 $ch = curl_init (); curl_setopt ( $ch, CURLOPT_URL, $url); curl_setopt ( $ch, CURLOPT_POST, 1 );//post请求方式 curl_setopt ( $ch, CURLOPT_HEADER, 0 ); curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );//以文件流的形式返回,而不是直接输出 curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data );//post提交data数据 # curl_exec 请求并返回结果 $return = curl_exec ( $ch ); curl_close ( $ch ); if($return === $msg){ exit('验签成功'); } exit('验签失败!'); } } $API = new Api(); $API->Sign(); 验签的 valida.php页面 <?php /* +------------------------------------------------------------------------------------------- + Title : 接口方进行验签 + Version : V1.0.0.1 + Start - Time : 2017-08-04 22:10 + sgw + Last - Time : 2017-08-04 22:45 + sgw + Desc : 通过$TOKEN进行数据验证并返回验签结果 +------------------------------------------------------------------------------------------- */ define('TOKEN', 'hello_sgw'); # 进行验签 $valid = new ValidaApi(); if(isset($_POST['msg'])) { $valid->valida(); } class ValidaApi { /** * 验签,并返回结果 */ public function valida(){ $msg = $_POST['msg']; if($this->checkSign()){ echo $msg;exit;//返回提交过来的随机文字 } } /** * 生成签名 */ private function checkSign(){ # 接受参数 重新的变量名为了区分和api.php页面传过来的变量名 $signature = $_POST['sign']; $timestamp = $_POST['time']; $random = $_POST['rand']; # 按照生成规则'A' $token = TOKEN; $tmpArr = array($token, $timestamp, $random); sort($tmpArr, SORT_STRING); $tmpStr = implode($tmpArr); $tmpStr = sha1($tmpStr);// 进行sha1加密 # 对比两个签名是否一致 if($tmpStr == $signature){ return true; }else{ return false; } } }