Code Duplication    Length = 159-159 lines in 2 locations

pay/alipay/alipay_notify.php 1 location

@@ 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. "&notify_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. "&notify_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

pay/alipay/php-demo/alipay_notify.php 1 location

@@ 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. "&notify_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. "&notify_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