ResponseHandler.class.php
2.77 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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
<?php
class ResponseHandler {
/** 密钥 */
var $key;
/** 应答的参数 */
var $parameters;
/** debug信息 */
var $debugInfo;
function __construct() {
$this->ResponseHandler();
}
function ResponseHandler() {
$this->key = "";
$this->parameters = array();
$this->debugInfo = "";
/* GET */
foreach($_GET as $k => $v) {
$this->setParameter($k, $v);
}
/* POST */
foreach($_POST as $k => $v) {
$this->setParameter($k, $v);
}
}
/**
*获取密钥
*/
function getKey() {
return $this->key;
}
/**
*设置密钥
*/
function setKey($key) {
$this->key = $key;
}
/**
*获取参数值
*/
function getParameter($parameter) {
return $this->parameters[$parameter];
}
/**
*设置参数值
*/
function setParameter($parameter, $parameterValue) {
$this->parameters[$parameter] = $parameterValue;
}
/**
*获取所有请求的参数
*@return array
*/
function getAllParameters() {
return $this->parameters;
}
/**
*是否财付通签名,规则是:按参数名称a-z排序,遇到空值的参数不参加签名。
*true:是
*false:否
*/
function isTenpaySign() {
$signPars = "";
ksort($this->parameters);
foreach($this->parameters as $k => $v) {
if("sign" != $k && "" != $v) {
$signPars .= $k . "=" . $v . "&";
}
}
$signPars .= "key=" . $this->getKey();
$sign = strtolower(md5($signPars));
$tenpaySign = strtolower($this->getParameter("sign"));
//debug信息
$this->_setDebugInfo($signPars . " => sign:" . $sign .
" tenpaySign:" . $this->getParameter("sign"));
return $sign == $tenpaySign;
}
/**
*获取debug信息
*/
function getDebugInfo() {
return $this->debugInfo;
}
/**
*显示处理结果。
*@param $show_url 显示处理结果的url地址,绝对url地址的形式(http://www.xxx.com/xxx.php)。
*/
function doShow($show_url) {
$strHtml = "<html><head>\r\n" .
"<meta name=\"TENCENT_ONLINE_PAYMENT\" content=\"China TENCENT\">" .
"<script language=\"javascript\">\r\n" .
"window.location.href='" . $show_url . "';\r\n" .
"</script>\r\n" .
"</head><body></body></html>";
echo $strHtml;
exit;
}
/**
* 是否财付通签名
* @param signParameterArray 签名的参数数组
* @return boolean
*/
function _isTenpaySign($signParameterArray) {
$signPars = "";
foreach($signParameterArray as $k) {
$v = $this->getParameter($k);
if("sign" != $k && "" != $v) {
$signPars .= $k . "=" . $v . "&";
}
}
$signPars .= "key=" . $this->getKey();
$sign = strtolower(md5($signPars));
$tenpaySign = strtolower($this->getParameter("sign"));
//debug信息
$this->_setDebugInfo($signPars . " => sign:" . $sign .
" tenpaySign:" . $this->getParameter("sign"));
return $sign == $tenpaySign;
}
/**
*设置debug信息
*/
function _setDebugInfo($debugInfo) {
$this->debugInfo = $debugInfo;
}
}
?>