一、函数代码
/**
* 校验
* @data (请求的数组)
* @salt (加密盐)
* */
private function verify(array $data, $salt){
$sign = $data['sign'] ?? null;
if(!$sign) return false;
unset($data['sign']);
return $sign === hash('sha256', $this->serial($data) . $salt);
}
/**
* 生成签名
* @data (请求的数组)
* @salt (加密盐)
* */
private function sign(array $data, $salt){
return hash('sha256', $this->serial($data) . $salt);
}
/**
*生成一个经过 URL-encode 的请求字符串
* @data (请求的数组)
* */
private function serial(array $data){
ksort($data);//按照键名对数组排序
return http_build_query($data);
}
二、校验方式
$jsonData = file_get_contents("php://input");
$postData = json_decode($jsonData,true);
if(!$this->verify($postData["data"],$salt)){
trace("签名错误了!!!!!!!!!!!!!","ERROR");
return false;
}
三、加密方式
$retData = ['openlink' => "","timestamp" =>time()];
$retData["sign"] = $this->sign($retData,$salt);
$this->success('返回成功', $retData);