在“api接口签名加密请求,从springmvc4项目搭建开始”篇文章,讲述了使用java springmvc搭建api接口请求例子。为了方便php能调用,接着写了php的demo例子。
回顾上回
api接口设计方式和思路
1、公开性
接口是公网可访问的,不希望被随便请求,需要token签名认证才能调用,接口提供方提供接口密钥。
2、安全性
模拟支付宝接口签名方式签名,请求参数按照key=value&key=value方式拼接的未签名原始字符串(含时间戳),再对原始字符串进行签名(加密钥)。如:md5(id=1×tamp=1514020967 + 密钥)
3、模式性
请求
请求参数 + 时间戳 + 签名(请求参数+时间戳+密钥)
接收
md5(接收参数(去除签名) + 密钥) == 接收参数(签名)
后再比较 接收参数(时间戳) 跟 当前系统时间戳 的时效性
签名请求函数/** 密钥 */
define("KEY","weizhixi");
/** 模拟post */
function curl_post($url, $params){
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_HTTPHEADER, ['Content-Type:application/x-www-form-urlencoded; charset=utf-8']);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($curl, CURLOPT_POSTFIELDS, $params);
curl_setopt($curl, C