OpenSignature.class.php
1.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<?php
/**
* OpenSignature.class.php
* 参数 sha1 + 票据签名相关操作
* @author Deepseath
* @version $Id$
*/
namespace Com;
/**
* 对参数进行 sha1 + 票据签名类
* 主要用于对外开放接口相关的签名操作,也可用于同算法的签名生成(比如:Jssdk)
* @author Deepseath
*/
class OpenSignature
{
/**
* 生成参数 ticket 的 sha1 签名
* 与 jssdk 的算法一致
* @param array $params 传入的参数 key-value 数组
* @param string $ticket 通讯票据
* @return string
*/
public static function paramsTicketSignature(array $params, $ticket)
{
// 剔除签名参数
unset($params['signature']);
// 当前请求者的通讯票据
$params['ticket'] = $ticket;
// 字典排序
ksort($params);
// 参数数组
$arr = [];
foreach ($params as $_key => $_value) {
$arr[] = rstrtolower($_key) . '=' . $_value;
}
$string = implode('&', $arr);
return sha1($string);
}
/**
* 根据请求者标识符获取开放接口相关配置
* @param string $requester 请求者标识符
* @return false | array
*/
public static function getOpenConfig($requester)
{
// 接口配置文件
$configFile = THINK_PATH . 'Conf/open.php';
// 判断对外接口配置文件是否存在
if (!is_file($configFile)) {
return false;
}
// 载入对外接口配置信息
$openConfigs = include ($configFile);
if (!is_array($openConfigs)) {
return false;
}
// 验证请求者标识符是否存在
if (!is_scalar($requester) || !isset($openConfigs[$requester])) {
return false;
}
// 设置当前请求者的配置信息
return $openConfigs[$requester];
}
}