ApimSign.php
2.44 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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
<?php
/**
* Created by PhpStorm.
* User: ChuXiang
* Date: 2019/8/15
* Time: 14:29
*/
namespace PgServiceSdk\Kernel\Library\Apim;
class ApimSign
{
/**
* GET 请求生产签名
*
* @param string $secret
* @param string $apiKey
* @param string $nonceStr
* @param string $timeStamp
* @param array $query
*
* @return string
*/
public static function getQuerySign($secret, $apiKey, $nonceStr, $timeStamp, array $query = [])
{
return self::getSign($query, $secret, $apiKey, $nonceStr, $timeStamp);
}
/**
* 表单请求生产签名
*
* @param string $secret
* @param string $apiKey
* @param string $nonceStr
* @param string $timeStamp
* @param array $from
* @param array $query
*
* @return string
*/
public static function postFromSign($secret, $apiKey, $nonceStr, $timeStamp, array $from = [], array $query = [])
{
return self::getSign(array_merge($from, $query), $secret, $apiKey, $nonceStr, $timeStamp);
}
/**
* JSON POST 请求生产签名
*
* @param string $secret
* @param string $apiKey
* @param string $nonceStr
* @param string $timeStamp
* @param array $data
* @param array $query
*
* @return string
*/
public static function postBodySign($secret, $apiKey, $nonceStr, $timeStamp, array $data = [], array $query = [])
{
$jsonRequestData = json_encode(empty($data) ? (object)$data : $data, 320);
$query['body'] = $jsonRequestData;
return self::getSign($query, $secret, $apiKey, $nonceStr, $timeStamp);
}
/**
* 生产签名
*
* @param array $params
* @param string $secret
* @param string $apiKey
* @param string $nonceStr
* @param string $timeStamp
*
* @return string
*/
public static function getSign(array $params, $secret, $apiKey, $nonceStr, $timeStamp)
{
$defaultParams = [
'api_key' => $apiKey,
'nonce_str' => $nonceStr,
'timestamp' => $timeStamp,
];
$signParams = array_merge($params, $defaultParams);
// 按照字典排序
ksort($signParams, SORT_STRING);
// 以 & 链接并且前后拼接 secret
$tmp = $secret . urldecode(http_build_query($signParams)) . $secret;
// SHA 256 加密后,全部转大写
return strtoupper(hash('sha256', $tmp));
}
}