1
|
|
|
<?php |
2
|
|
|
/** |
3
|
|
|
* 类名 alipay_service |
4
|
|
|
* 功能 支付宝外部服务接口控制 |
5
|
|
|
* 版本 0.6 |
6
|
|
|
* 日期 2006-6-10 |
7
|
|
|
* 作者 http://www.buybay.org |
8
|
|
|
* 联系 Email: [email protected] Homepage:http://www.buybay.org |
9
|
|
|
* 版权 Copyright2006 Buybay NetTech |
10
|
|
|
*/ |
11
|
|
|
|
12
|
|
View Code Duplication |
class alipay_service { |
|
|
|
|
13
|
|
|
|
14
|
|
|
var $gateway = "http://www.alipay3.net/cooperate/gateway.do?"; //支付接口 |
15
|
|
|
var $parameter; //全部需要传递的参数 |
16
|
|
|
var $security_code; //安全校验码 |
17
|
|
|
var $mysign; //签名 |
18
|
|
|
|
19
|
|
|
//构造支付宝外部服务接口控制 |
20
|
|
|
function alipay_service($parameter,$security_code,$sign_type = "MD5",$transport= "https") { |
|
|
|
|
21
|
|
|
$this->parameter = $this->para_filter($parameter); |
22
|
|
|
$this->security_code = $security_code; |
23
|
|
|
$this->sign_type = $sign_type; |
|
|
|
|
24
|
|
|
$this->mysign = ''; |
25
|
|
|
$this->transport = $transport; |
|
|
|
|
26
|
|
|
if($parameter['_input_charset'] == "") |
27
|
|
|
$this->parameter['_input_charset']='utf-8'; |
28
|
|
|
if($this->transport == "https") { |
29
|
|
|
$this->gateway = "https://www.alipay.com/cooperate/gateway.do?"; |
30
|
|
|
} else $this->gateway = "httsp://www.alipay.com/cooperate/gateway.do?"; |
31
|
|
|
$sort_array = array(); |
|
|
|
|
32
|
|
|
$arg = ""; |
33
|
|
|
$sort_array = $this->arg_sort($this->parameter); |
34
|
|
|
while (list ($key, $val) = each ($sort_array)) { |
35
|
|
|
$arg.=$key."=".$this->charset_encode($val,$this->parameter['_input_charset'])."&"; |
36
|
|
|
} |
37
|
|
|
$prestr = substr($arg,0,count($arg)-2); //去掉最后一个问号 |
38
|
|
|
$this->mysign = $this->sign($prestr.$this->security_code); |
39
|
|
|
} |
40
|
|
|
|
41
|
|
|
|
42
|
|
|
function create_url() { |
|
|
|
|
43
|
|
|
$url = $this->gateway; |
44
|
|
|
$sort_array = array(); |
|
|
|
|
45
|
|
|
$arg = ""; |
46
|
|
|
$sort_array = $this->arg_sort($this->parameter); |
47
|
|
|
while (list ($key, $val) = each ($sort_array)) { |
48
|
|
|
$arg.=$key."=".urlencode($this->charset_encode($val,$this->parameter['_input_charset']))."&"; |
49
|
|
|
} |
50
|
|
|
$url.= $arg."sign=" .$this->mysign ."&sign_type=".$this->sign_type; |
51
|
|
|
|
52
|
|
|
return $url; |
53
|
|
|
|
54
|
|
|
} |
55
|
|
|
|
56
|
|
|
function signParams() { |
|
|
|
|
57
|
|
|
$url = $this->gateway; |
|
|
|
|
58
|
|
|
$sort_array = array(); |
|
|
|
|
59
|
|
|
$arg = ""; |
60
|
|
|
$sort_array = $this->arg_sort($this->parameter); |
61
|
|
|
while (list ($key, $val) = each ($sort_array)) { |
62
|
|
|
$arg.=$key."=".urlencode($this->charset_encode($val,$this->parameter['_input_charset']))."&"; |
63
|
|
|
} |
64
|
|
|
return $this->mysign; |
65
|
|
|
} |
66
|
|
|
|
67
|
|
|
function arg_sort($array) { |
|
|
|
|
68
|
|
|
ksort($array); |
69
|
|
|
reset($array); |
70
|
|
|
return $array; |
71
|
|
|
|
72
|
|
|
} |
73
|
|
|
|
74
|
|
|
function sign($prestr) { |
|
|
|
|
75
|
|
|
$mysign = ""; |
|
|
|
|
76
|
|
|
if($this->sign_type == 'MD5') { |
77
|
|
|
$mysign = md5($prestr); |
78
|
|
|
}elseif($this->sign_type =='DSA') { |
79
|
|
|
//DSA 签名方法待后续开发 |
80
|
|
|
die("DSA 签名方法待后续开发,请先使用MD5签名方式"); |
81
|
|
|
}else { |
82
|
|
|
die("支付宝暂不支持".$this->sign_type."类型的签名方式"); |
83
|
|
|
} |
84
|
|
|
return $mysign; |
85
|
|
|
|
86
|
|
|
} |
87
|
|
|
function para_filter($parameter) { //除去数组中的空值和签名模式 |
|
|
|
|
88
|
|
|
$para = array(); |
89
|
|
|
while (list ($key, $val) = each ($parameter)) { |
90
|
|
|
if($key == "sign" || $key == "sign_type" || $val == "")continue; |
91
|
|
|
else $para[$key] = $parameter[$key]; |
92
|
|
|
|
93
|
|
|
} |
94
|
|
|
return $para; |
95
|
|
|
} |
96
|
|
|
//实现多种字符编码方式 |
97
|
|
|
function charset_encode($input,$_output_charset ,$_input_charset ="utf-8" ) { |
|
|
|
|
98
|
|
|
$output = ""; |
|
|
|
|
99
|
|
|
if(!isset($_output_charset) )$_output_charset = $this->parameter['_input_charset ']; |
100
|
|
|
if($_input_charset == $_output_charset || $input ==null) { |
101
|
|
|
$output = $input; |
102
|
|
|
} elseif (function_exists("mb_convert_encoding")){ |
103
|
|
|
$output = mb_convert_encoding($input,$_output_charset,$_input_charset); |
104
|
|
|
} elseif(function_exists("iconv")) { |
105
|
|
|
$output = iconv($_input_charset,$_output_charset,$input); |
106
|
|
|
} else die("sorry, you have no libs support for charset change."); |
107
|
|
|
return $output; |
108
|
|
|
} |
109
|
|
|
|
110
|
|
|
|
111
|
|
|
} |
112
|
|
|
|
113
|
|
|
|
114
|
|
|
?> |
|
|
|
|
115
|
|
|
|
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.