简单的API接口请求与返回

请求的 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;
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值