<?php
|
/**
|
* PhalApi_Filter_SimpleMD5 简单的MD5拦截器
|
*
|
* - 签名的方案如下:
|
*
|
* + 1、排除签名参数(默认是sign)
|
* + 2、将剩下的全部参数,按参数名字进行字典排序
|
* + 3、将排序好的参数,全部用字符串拼接起来
|
* + 4、进行md5运算
|
*
|
* 注意:无任何参数时,不作验签
|
*
|
* @package PhalApi\Filter
|
* @license http://www.phalapi.net/license GPL 协议
|
* @link http://www.phalapi.net/
|
* @author dogstar <chanzonghuang@gmail.com> 2015-10-23
|
*/
|
|
class PhalApi_Filter_SimpleMD5 implements PhalApi_Filter {
|
|
protected $signName;
|
|
public function __construct($signName = 'sign') {
|
$this->signName = $signName;
|
}
|
|
public function check() {
|
$allParams = DI()->request->getAll();
|
if (empty($allParams)) {
|
return;
|
}
|
|
$sign = isset($allParams[$this->signName]) ? $allParams[$this->signName] : '';
|
unset($allParams[$this->signName]);
|
|
$expectSign = $this->encryptAppKey($allParams);
|
|
if ($expectSign != $sign) {
|
DI()->logger->debug('Wrong Sign', array('needSign' => $expectSign));
|
throw new PhalApi_Exception_BadRequest(T('wrong sign'), 6);
|
}
|
}
|
|
protected function encryptAppKey($params) {
|
ksort($params);
|
|
$paramsStrExceptSign = '';
|
foreach ($params as $val) {
|
$paramsStrExceptSign .= $val;
|
}
|
|
return md5($paramsStrExceptSign);
|
}
|
}
|