@@ 12-170 (lines=159) @@ | ||
9 | * 版权 Copyright2006 Buybay NetTech |
|
10 | */ |
|
11 | ||
12 | class alipay_notify { |
|
13 | var $gateway; |
|
14 | var $security_code; //安全校验码 |
|
15 | var $partner; |
|
16 | var $sign_type; |
|
17 | var $mysign; |
|
18 | var $_input_charset ; |
|
19 | var $transport; |
|
20 | function alipay_notify($partner,$security_code,$sign_type = "MD5",$_input_charset = "utf-8",$transport= "https") { |
|
21 | $this->partner = $partner; |
|
22 | $this->security_code = $security_code; |
|
23 | $this->sign_type = $sign_type; |
|
24 | $this->mysign = ""; |
|
25 | $this->_input_charset = $_input_charset ; |
|
26 | $this->transport = $transport; |
|
27 | if($this->transport == "https") { |
|
28 | $this->gateway = "https://www.alipay.com/cooperate/gateway.do?"; |
|
29 | } else $this->gateway = "http://notify.alipay.com/trade/notify_query.do?"; |
|
30 | ||
31 | } |
|
32 | function notify_verify() { //对notify_url的认证 |
|
33 | if($this->transport == "https") { |
|
34 | $veryfy_url = $this->gateway. "service=notify_verify" ."&partner=" .$this->partner. "¬ify_id=".$_POST["notify_id"]; |
|
35 | } else { |
|
36 | $veryfy_url = $this->gateway. "notify_id=".$_POST["notify_id"]."&partner=" .$this->partner; |
|
37 | } |
|
38 | $veryfy_result = $this->get_verify($veryfy_url); |
|
39 | $post = $this->para_filter($_POST); |
|
40 | $sort_post = $this->arg_sort($post); |
|
41 | while (list ($key, $val) = each ($sort_post)) { |
|
42 | $arg.=$key."=".$val."&"; |
|
43 | } |
|
44 | $prestr = substr($arg,0,count($arg)-2); //去掉最后一个&号 |
|
45 | $this->mysign = $this->sign($prestr.$this->security_code); |
|
46 | if (eregi("true$",$veryfy_result) && $this->mysign == $_POST["sign"]) { |
|
47 | return true; |
|
48 | } else return false; |
|
49 | } |
|
50 | function return_verify() { //对return_url的认证 |
|
51 | if($this->transport == "https") { |
|
52 | $veryfy_url = $this->gateway. "service=notify_verify" ."&partner=" .$this->partner. "¬ify_id=".$_GET["notify_id"]; |
|
53 | } else { |
|
54 | $veryfy_url = $this->gateway. "notify_id=".$_GET["notify_id"]."&partner=" .$this->partner; |
|
55 | } |
|
56 | $veryfy_result = $this->get_verify($veryfy_url); |
|
57 | $GET = $this->para_filter($_GET); |
|
58 | $sort_get= $this->arg_sort($_GET); |
|
59 | while (list ($key, $val) = each ($sort_get)) { |
|
60 | if($key != "sign" && $key != "sign_type") |
|
61 | $arg.=$key."=".$val."&"; |
|
62 | } |
|
63 | $prestr = substr($arg,0,count($arg)-2); //去掉最后一个&号 |
|
64 | $this->mysign = $this->sign($prestr.$this->security_code); |
|
65 | ||
66 | log_result("return_url_log=".$_GET["sign"]."-------------------".$this->mysign."&".$this->charset_decode(implode(",",$_GET),$this->_input_charset )); |
|
67 | //**********************************上面写日志 |
|
68 | if (eregi("true$",$veryfy_result) && $this->mysign == $_GET["sign"]) { |
|
69 | return true; |
|
70 | }else return false; |
|
71 | } |
|
72 | ||
73 | function get_verify($url,$time_out = "60") { |
|
74 | $urlarr = parse_url($url); |
|
75 | $errno = ""; |
|
76 | $errstr = ""; |
|
77 | $transports = ""; |
|
78 | if($urlarr["scheme"] == "https") { |
|
79 | $transports = "ssl://"; |
|
80 | $urlarr["port"] = "443"; |
|
81 | } else { |
|
82 | $transports = "tcp://"; |
|
83 | $urlarr["port"] = "80"; |
|
84 | } |
|
85 | $fp=@fsockopen($transports . $urlarr['host'],$urlarr['port'],$errno,$errstr,$time_out); |
|
86 | if(!$fp) { |
|
87 | die("ERROR: $errno - $errstr<br />\n"); |
|
88 | } else { |
|
89 | fputs($fp, "POST ".$urlarr["path"]." HTTP/1.1\r\n"); |
|
90 | fputs($fp, "Host: ".$urlarr["host"]."\r\n"); |
|
91 | fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n"); |
|
92 | fputs($fp, "Content-length: ".strlen($urlarr["query"])."\r\n"); |
|
93 | fputs($fp, "Connection: close\r\n\r\n"); |
|
94 | fputs($fp, $urlarr["query"] . "\r\n\r\n"); |
|
95 | while(!feof($fp)) { |
|
96 | $info[]=@fgets($fp, 1024); |
|
97 | } |
|
98 | ||
99 | fclose($fp); |
|
100 | $info = implode(",",$info); |
|
101 | while (list ($key, $val) = each ($_POST)) { |
|
102 | $arg.=$key."=".$val."&"; |
|
103 | } |
|
104 | ||
105 | ||
106 | log_result("return_url_log=".$url.$this->charset_decode($info,$this->_input_charset)); |
|
107 | log_result("return_url_log=".$this->charset_decode($arg,$this->_input_charset)); |
|
108 | return $info; |
|
109 | } |
|
110 | ||
111 | } |
|
112 | ||
113 | function arg_sort($array) { |
|
114 | ksort($array); |
|
115 | reset($array); |
|
116 | return $array; |
|
117 | ||
118 | } |
|
119 | ||
120 | function sign($prestr) { |
|
121 | $sign=''; |
|
122 | if($this->sign_type == 'MD5') { |
|
123 | $sign = md5($prestr); |
|
124 | }elseif($this->sign_type =='DSA') { |
|
125 | //DSA 签名方法待后续开发 |
|
126 | die("DSA 签名方法待后续开发,请先使用MD5签名方式"); |
|
127 | }else { |
|
128 | die("支付宝暂不支持".$this->sign_type."类型的签名方式"); |
|
129 | } |
|
130 | return $sign; |
|
131 | ||
132 | } |
|
133 | function para_filter($parameter) { //除去数组中的空值和签名模式 |
|
134 | $para = array(); |
|
135 | while (list ($key, $val) = each ($parameter)) { |
|
136 | if($key == "sign" || $key == "sign_type" || $val == "")continue; |
|
137 | else $para[$key] = $parameter[$key]; |
|
138 | ||
139 | } |
|
140 | return $para; |
|
141 | } |
|
142 | ||
143 | //实现多种字符编码方式 |
|
144 | function charset_encode($input,$_output_charset ,$_input_charset ="utf-8" ) { |
|
145 | $output = ""; |
|
146 | if(!isset($_output_charset) )$_output_charset = $this->parameter['_input_charset ']; |
|
147 | if($_input_charset == $_output_charset || $input ==null ) { |
|
148 | $output = $input; |
|
149 | } elseif (function_exists("mb_convert_encoding")){ |
|
150 | $output = mb_convert_encoding($input,$_output_charset,$_input_charset); |
|
151 | } elseif(function_exists("iconv")) { |
|
152 | $output = iconv($_input_charset,$_output_charset,$input); |
|
153 | } else die("sorry, you have no libs support for charset change."); |
|
154 | return $output; |
|
155 | } |
|
156 | ||
157 | //实现多种字符解码方式 |
|
158 | function charset_decode($input,$_input_charset ,$_output_charset="utf-8" ) { |
|
159 | $output = ""; |
|
160 | if(!isset($_input_charset) )$_input_charset = $this->_input_charset ; |
|
161 | if($_input_charset == $_output_charset || $input ==null ) { |
|
162 | $output = $input; |
|
163 | } elseif (function_exists("mb_convert_encoding")){ |
|
164 | $output = mb_convert_encoding($input,$_output_charset,$_input_charset); |
|
165 | } elseif(function_exists("iconv")) { |
|
166 | $output = iconv($_input_charset,$_output_charset,$input); |
|
167 | } else die("sorry, you have no libs support for charset changes."); |
|
168 | return $output; |
|
169 | } |
|
170 | } |
|
171 | ||
172 | ?> |
|
173 |
@@ 12-170 (lines=159) @@ | ||
9 | ��* ��Ȩ Copyright2006 Buybay NetTech |
|
10 | ��*/ |
|
11 | ||
12 | class alipay_notify { |
|
13 | var $gateway; |
|
14 | var $security_code; //��ȫУ���� |
|
15 | var $partner; |
|
16 | var $sign_type; |
|
17 | var $mysign; |
|
18 | var $_input_charset ; |
|
19 | var $transport; |
|
20 | function alipay_notify($partner,$security_code,$sign_type = "MD5",$_input_charset = "GBK",$transport= "https") { |
|
21 | $this->partner = $partner; |
|
22 | $this->security_code = $security_code; |
|
23 | $this->sign_type = $sign_type; |
|
24 | $this->mysign = ""; |
|
25 | $this->_input_charset = $_input_charset ; |
|
26 | $this->transport = $transport; |
|
27 | if($this->transport == "https") { |
|
28 | $this->gateway = "https://www.alipay.com/cooperate/gateway.do?"; |
|
29 | } else $this->gateway = "http://notify.alipay.com/trade/notify_query.do?"; |
|
30 | ||
31 | } |
|
32 | function notify_verify() { //��notify_url����֤ |
|
33 | if($this->transport == "https") { |
|
34 | $veryfy_url = $this->gateway. "service=notify_verify" ."&partner=" .$this->partner. "¬ify_id=".$_POST["notify_id"]; |
|
35 | } else { |
|
36 | $veryfy_url = $this->gateway. "notify_id=".$_POST["notify_id"]."&partner=" .$this->partner; |
|
37 | } |
|
38 | $veryfy_result = $this->get_verify($veryfy_url); |
|
39 | $post = $this->para_filter($_POST); |
|
40 | $sort_post = $this->arg_sort($post); |
|
41 | while (list ($key, $val) = each ($sort_post)) { |
|
42 | $arg.=$key."=".$val."&"; |
|
43 | } |
|
44 | $prestr = substr($arg,0,count($arg)-2); //ȥ�����һ��&�� |
|
45 | $this->mysign = $this->sign($prestr.$this->security_code); |
|
46 | if (eregi("true$",$veryfy_result) && $this->mysign == $_POST["sign"]) { |
|
47 | return true; |
|
48 | } else return false; |
|
49 | } |
|
50 | function return_verify() { //��return_url����֤ |
|
51 | if($this->transport == "https") { |
|
52 | $veryfy_url = $this->gateway. "service=notify_verify" ."&partner=" .$this->partner. "¬ify_id=".$_GET["notify_id"]; |
|
53 | } else { |
|
54 | $veryfy_url = $this->gateway. "notify_id=".$_GET["notify_id"]."&partner=" .$this->partner; |
|
55 | } |
|
56 | $veryfy_result = $this->get_verify($veryfy_url); |
|
57 | $GET = $this->para_filter($_GET); |
|
58 | $sort_get= $this->arg_sort($_GET); |
|
59 | while (list ($key, $val) = each ($sort_get)) { |
|
60 | if($key != "sign" && $key != "sign_type") |
|
61 | $arg.=$key."=".$val."&"; |
|
62 | } |
|
63 | $prestr = substr($arg,0,count($arg)-2); //ȥ�����һ��&�� |
|
64 | $this->mysign = $this->sign($prestr.$this->security_code); |
|
65 | ||
66 | log_result("return_url_log=".$_GET["sign"]."-------------------".$this->mysign."&".$this->charset_decode(implode(",",$_GET),$this->_input_charset )); |
|
67 | //**********************************����д��־ |
|
68 | if (eregi("true$",$veryfy_result) && $this->mysign == $_GET["sign"]) { |
|
69 | return true; |
|
70 | }else return false; |
|
71 | } |
|
72 | ||
73 | function get_verify($url,$time_out = "60") { |
|
74 | $urlarr = parse_url($url); |
|
75 | $errno = ""; |
|
76 | $errstr = ""; |
|
77 | $transports = ""; |
|
78 | if($urlarr["scheme"] == "https") { |
|
79 | $transports = "ssl://"; |
|
80 | $urlarr["port"] = "443"; |
|
81 | } else { |
|
82 | $transports = "tcp://"; |
|
83 | $urlarr["port"] = "80"; |
|
84 | } |
|
85 | $fp=@fsockopen($transports . $urlarr['host'],$urlarr['port'],$errno,$errstr,$time_out); |
|
86 | if(!$fp) { |
|
87 | die("ERROR: $errno - $errstr<br />\n"); |
|
88 | } else { |
|
89 | fputs($fp, "POST ".$urlarr["path"]." HTTP/1.1\r\n"); |
|
90 | fputs($fp, "Host: ".$urlarr["host"]."\r\n"); |
|
91 | fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n"); |
|
92 | fputs($fp, "Content-length: ".strlen($urlarr["query"])."\r\n"); |
|
93 | fputs($fp, "Connection: close\r\n\r\n"); |
|
94 | fputs($fp, $urlarr["query"] . "\r\n\r\n"); |
|
95 | while(!feof($fp)) { |
|
96 | $info[]=@fgets($fp, 1024); |
|
97 | } |
|
98 | ||
99 | fclose($fp); |
|
100 | $info = implode(",",$info); |
|
101 | while (list ($key, $val) = each ($_POST)) { |
|
102 | $arg.=$key."=".$val."&"; |
|
103 | } |
|
104 | ||
105 | ||
106 | log_result("return_url_log=".$url.$this->charset_decode($info,$this->_input_charset)); |
|
107 | log_result("return_url_log=".$this->charset_decode($arg,$this->_input_charset)); |
|
108 | return $info; |
|
109 | } |
|
110 | ||
111 | } |
|
112 | ||
113 | function arg_sort($array) { |
|
114 | ksort($array); |
|
115 | reset($array); |
|
116 | return $array; |
|
117 | ||
118 | } |
|
119 | ||
120 | function sign($prestr) { |
|
121 | $sign=''; |
|
122 | if($this->sign_type == 'MD5') { |
|
123 | $sign = md5($prestr); |
|
124 | }elseif($this->sign_type =='DSA') { |
|
125 | //DSA ǩ�������������� |
|
126 | die("DSA ǩ��������������������ʹ��MD5ǩ���ʽ"); |
|
127 | }else { |
|
128 | die("֧�����ݲ�֧��".$this->sign_type."���͵�ǩ���ʽ"); |
|
129 | } |
|
130 | return $sign; |
|
131 | ||
132 | } |
|
133 | function para_filter($parameter) { //��ȥ����еĿ�ֵ��ǩ�ģʽ |
|
134 | $para = array(); |
|
135 | while (list ($key, $val) = each ($parameter)) { |
|
136 | if($key == "sign" || $key == "sign_type" || $val == "")continue; |
|
137 | else $para[$key] = $parameter[$key]; |
|
138 | ||
139 | } |
|
140 | return $para; |
|
141 | } |
|
142 | ||
143 | //ʵ�ֶ����ַ����뷽ʽ |
|
144 | function charset_encode($input,$_output_charset ,$_input_charset ="GBK" ) { |
|
145 | $output = ""; |
|
146 | if(!isset($_output_charset) )$_output_charset = $this->parameter['_input_charset ']; |
|
147 | if($_input_charset == $_output_charset || $input ==null ) { |
|
148 | $output = $input; |
|
149 | } elseif (function_exists("mb_convert_encoding")){ |
|
150 | $output = mb_convert_encoding($input,$_output_charset,$_input_charset); |
|
151 | } elseif(function_exists("iconv")) { |
|
152 | $output = iconv($_input_charset,$_output_charset,$input); |
|
153 | } else die("sorry, you have no libs support for charset change."); |
|
154 | return $output; |
|
155 | } |
|
156 | ||
157 | //ʵ�ֶ����ַ����뷽ʽ |
|
158 | function charset_decode($input,$_input_charset ,$_output_charset="GBK" ) { |
|
159 | $output = ""; |
|
160 | if(!isset($_input_charset) )$_input_charset = $this->_input_charset ; |
|
161 | if($_input_charset == $_output_charset || $input ==null ) { |
|
162 | $output = $input; |
|
163 | } elseif (function_exists("mb_convert_encoding")){ |
|
164 | $output = mb_convert_encoding($input,$_output_charset,$_input_charset); |
|
165 | } elseif(function_exists("iconv")) { |
|
166 | $output = iconv($_input_charset,$_output_charset,$input); |
|
167 | } else die("sorry, you have no libs support for charset changes."); |
|
168 | return $output; |
|
169 | } |
|
170 | } |
|
171 | ||
172 | ?> |
|
173 |