unionpay 0.0.2 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +5 -3
- data/Rakefile +9 -0
- data/lib/unionpay/conf.rb +128 -131
- data/lib/unionpay/service.rb +67 -58
- data/lib/unionpay/version.rb +1 -1
- data/lib/unionpay.rb +10 -10
- data/test/test_helper.rb +7 -0
- data/test/unionpay/service_test.rb +29 -0
- metadata +8 -4
- data/test.rb +0 -28
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2ffcf03e03f0aba5fbcf4b4dfe86a4f43f748179
|
4
|
+
data.tar.gz: 72c13fdcbd7d3c9ab1036cca39a11ae6827a42cd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cb89c4008a00a986bac420089ea180e7e004a65aff21d1dbb99f5c1c1a61540c35fe25c7616747dd08b559b0cb255f266183c786c8be58fe0c389afc59e6ea22
|
7
|
+
data.tar.gz: e94ed90bc86f968ba70660f9f5a89607ed515036fef440537ed9f54cc22fc74fd424964da43db1395bedf0665263ec0ea2de58aab1cef6c8615c8da8c0368f4b
|
data/README.md
CHANGED
@@ -21,7 +21,7 @@ UnionPay.security_key = '88888888'
|
|
21
21
|
### Generate payment form
|
22
22
|
```ruby
|
23
23
|
param = {}
|
24
|
-
param['transType'] = UnionPay::
|
24
|
+
param['transType'] = UnionPay::CONSUME #交易类型,CONSUME or PRE_AUTH
|
25
25
|
param['orderAmount'] = 11000 #交易金额
|
26
26
|
param['orderNumber'] = Time.now.strftime('%Y%m%d%H%M%S') #订单号,必须唯一
|
27
27
|
param['customerIp'] = '127.0.0.1'
|
@@ -37,7 +37,9 @@ param['backEndUrl'] = "http://www.example.com/sdk/utf8/back_notify.php" #
|
|
37
37
|
|
38
38
|
# 其余可填空的参数可以不填写
|
39
39
|
|
40
|
-
UnionPay::Service.front_pay(param)
|
40
|
+
service = UnionPay::Service.front_pay(param)
|
41
|
+
service.args ## get args
|
42
|
+
service.form(target: '_blank', id: 'form'){"<input type='submit' />"} ## get form
|
41
43
|
```
|
42
44
|
|
43
45
|
### Verify notify
|
@@ -48,7 +50,7 @@ UnionPay::Service.front_pay(param).form(target: '_blank', id: 'form'){"<input ty
|
|
48
50
|
def unionpay_notify
|
49
51
|
# except :controller_name, :action_name, :host, etc.
|
50
52
|
notify_params = params.except(*request.path_parameters.keys)
|
51
|
-
args = UnionPay::Service.responce(notify_params)
|
53
|
+
args = UnionPay::Service.responce(notify_params).args
|
52
54
|
if args['respCode'] == UnionPay::RESP_SUCCESS
|
53
55
|
# valid notify, code your business logic.
|
54
56
|
render :text => 'success'
|
data/Rakefile
ADDED
data/lib/unionpay/conf.rb
CHANGED
@@ -1,146 +1,143 @@
|
|
1
1
|
#encoding:utf-8
|
2
2
|
module UnionPay
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
3
|
+
class << self
|
4
|
+
attr_accessor :front_pay_url, :back_pay_url, :query_url
|
5
|
+
end
|
6
|
+
VERIFY_HTTPS_CERT = false
|
7
7
|
|
8
|
-
|
9
|
-
|
8
|
+
Timezone = "Asia/Shanghai" #时区
|
9
|
+
Sign_method = "md5" #摘要算法,目前仅支持md5 (2011-08-22)
|
10
10
|
|
11
|
-
|
11
|
+
# 支付请求预定义字段
|
12
|
+
Pay_params = {
|
13
|
+
'version' => '1.0.0',
|
14
|
+
'charset' => 'UTF-8', #UTF-8, GBK等
|
15
|
+
'merId' => '88888888', #商户填写
|
16
|
+
'acqCode' => '', #收单机构填写
|
17
|
+
'merCode' => '', #收单机构填写
|
18
|
+
'merAbbr' => '商户名称'
|
19
|
+
}
|
12
20
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
'merId' => '88888888', #商户填写
|
18
|
-
'acqCode' => '', #收单机构填写
|
19
|
-
'merCode' => '', #收单机构填写
|
20
|
-
'merAbbr' => '商户名称'
|
21
|
-
}
|
21
|
+
FRONT_PAY = 1
|
22
|
+
BACK_PAY = 2
|
23
|
+
RESPONSE = 3
|
24
|
+
QUERY = 4
|
22
25
|
|
26
|
+
CONSUME = "01"
|
27
|
+
CONSUME_VOID = "31"
|
28
|
+
PRE_AUTH = "02"
|
29
|
+
PRE_AUTH_VOID = "32"
|
30
|
+
PRE_AUTH_COMPLETE = "03"
|
31
|
+
PRE_AUTH_VOID_COMPLETE = "33"
|
32
|
+
REFUND = "04"
|
33
|
+
REGISTRATION = "71"
|
23
34
|
|
24
|
-
|
25
|
-
BACK_PAY = 2
|
26
|
-
RESPONSE = 3
|
27
|
-
QUERY = 4
|
35
|
+
CURRENCY_CNY = "156"
|
28
36
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
+
# 支付请求可为空字段(但必须填写)
|
38
|
+
Pay_params_empty = {
|
39
|
+
"origQid" => "",
|
40
|
+
"acqCode" => "",
|
41
|
+
"merCode" => "",
|
42
|
+
"commodityUrl" => "",
|
43
|
+
"commodityName" => "",
|
44
|
+
"commodityUnitPrice" => "",
|
45
|
+
"commodityQuantity" => "",
|
46
|
+
"commodityDiscount" => "",
|
47
|
+
"transferFee" => "",
|
48
|
+
"customerName" => "",
|
49
|
+
"defaultPayType" => "",
|
50
|
+
"defaultBankNumber" => "",
|
51
|
+
"transTimeout" => "",
|
52
|
+
"merReserved" => ""
|
53
|
+
}
|
37
54
|
|
38
|
-
|
55
|
+
# 支付请求必填字段检查
|
56
|
+
Pay_params_check = [
|
57
|
+
"version",
|
58
|
+
"charset",
|
59
|
+
"transType",
|
60
|
+
"origQid",
|
61
|
+
"merId",
|
62
|
+
"merAbbr",
|
63
|
+
"acqCode",
|
64
|
+
"merCode",
|
65
|
+
"commodityUrl",
|
66
|
+
"commodityName",
|
67
|
+
"commodityUnitPrice",
|
68
|
+
"commodityQuantity",
|
69
|
+
"commodityDiscount",
|
70
|
+
"transferFee",
|
71
|
+
"orderNumber",
|
72
|
+
"orderAmount",
|
73
|
+
"orderCurrency",
|
74
|
+
"orderTime",
|
75
|
+
"customerIp",
|
76
|
+
"customerName",
|
77
|
+
"defaultPayType",
|
78
|
+
"defaultBankNumber",
|
79
|
+
"transTimeout",
|
80
|
+
"frontEndUrl",
|
81
|
+
"backEndUrl",
|
82
|
+
"merReserved"
|
83
|
+
]
|
39
84
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
"transferFee" => "",
|
51
|
-
"customerName" => "",
|
52
|
-
"defaultPayType" => "",
|
53
|
-
"defaultBankNumber" => "",
|
54
|
-
"transTimeout" => "",
|
55
|
-
"merReserved" => ""
|
56
|
-
}
|
85
|
+
# 查询请求必填字段检查
|
86
|
+
Query_params_check = [
|
87
|
+
"version",
|
88
|
+
"charset",
|
89
|
+
"transType",
|
90
|
+
"merId",
|
91
|
+
"orderNumber",
|
92
|
+
"orderTime",
|
93
|
+
"merReserved",
|
94
|
+
]
|
57
95
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
"commodityUnitPrice",
|
71
|
-
"commodityQuantity",
|
72
|
-
"commodityDiscount",
|
73
|
-
"transferFee",
|
74
|
-
"orderNumber",
|
75
|
-
"orderAmount",
|
76
|
-
"orderCurrency",
|
77
|
-
"orderTime",
|
78
|
-
"customerIp",
|
79
|
-
"customerName",
|
80
|
-
"defaultPayType",
|
81
|
-
"defaultBankNumber",
|
82
|
-
"transTimeout",
|
83
|
-
"frontEndUrl",
|
84
|
-
"backEndUrl",
|
85
|
-
"merReserved"
|
86
|
-
]
|
96
|
+
# 商户保留域可能包含的字段
|
97
|
+
Mer_params_reserved = [
|
98
|
+
# NEW NAME OLD NAME
|
99
|
+
"cardNumber", "pan",
|
100
|
+
"cardPasswd", "password",
|
101
|
+
"credentialType", "idType",
|
102
|
+
"cardCvn2", "cvn",
|
103
|
+
"cardExpire", "expire",
|
104
|
+
"credentialNumber", "idNo",
|
105
|
+
"credentialName", "name",
|
106
|
+
"phoneNumber", "mobile",
|
107
|
+
"merAbstract",
|
87
108
|
|
88
|
-
#
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
"merId",
|
94
|
-
"orderNumber",
|
95
|
-
"orderTime",
|
96
|
-
"merReserved",
|
97
|
-
]
|
109
|
+
# tdb only
|
110
|
+
"orderTimeoutDate",
|
111
|
+
"origOrderNumber",
|
112
|
+
"origOrderTime",
|
113
|
+
]
|
98
114
|
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
115
|
+
Notify_param_check = [
|
116
|
+
"version",
|
117
|
+
"charset",
|
118
|
+
"transType",
|
119
|
+
"respCode",
|
120
|
+
"respMsg",
|
121
|
+
"respTime",
|
122
|
+
"merId",
|
123
|
+
"merAbbr",
|
124
|
+
"orderNumber",
|
125
|
+
"traceNumber",
|
126
|
+
"traceTime",
|
127
|
+
"qid",
|
128
|
+
"orderAmount",
|
129
|
+
"orderCurrency",
|
130
|
+
"settleAmount",
|
131
|
+
"settleCurrency",
|
132
|
+
"settleDate",
|
133
|
+
"exchangeRate",
|
134
|
+
"exchangeDate",
|
135
|
+
"cupReserved",
|
136
|
+
"signMethod",
|
137
|
+
"signature",
|
138
|
+
]
|
111
139
|
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
"origOrderTime",
|
116
|
-
]
|
117
|
-
|
118
|
-
Notify_param_check = [
|
119
|
-
"version",
|
120
|
-
"charset",
|
121
|
-
"transType",
|
122
|
-
"respCode",
|
123
|
-
"respMsg",
|
124
|
-
"respTime",
|
125
|
-
"merId",
|
126
|
-
"merAbbr",
|
127
|
-
"orderNumber",
|
128
|
-
"traceNumber",
|
129
|
-
"traceTime",
|
130
|
-
"qid",
|
131
|
-
"orderAmount",
|
132
|
-
"orderCurrency",
|
133
|
-
"settleAmount",
|
134
|
-
"settleCurrency",
|
135
|
-
"settleDate",
|
136
|
-
"exchangeRate",
|
137
|
-
"exchangeDate",
|
138
|
-
"cupReserved",
|
139
|
-
"signMethod",
|
140
|
-
"signature",
|
141
|
-
]
|
142
|
-
|
143
|
-
Sign_ignore_params = [
|
144
|
-
"bank",
|
145
|
-
]
|
140
|
+
Sign_ignore_params = [
|
141
|
+
"bank",
|
142
|
+
]
|
146
143
|
end
|
data/lib/unionpay/service.rb
CHANGED
@@ -1,76 +1,54 @@
|
|
1
1
|
#encoding:utf-8
|
2
2
|
require 'open-uri'
|
3
3
|
require 'digest'
|
4
|
+
require 'rack'
|
4
5
|
module UnionPay
|
5
6
|
RESP_SUCCESS = "00" #返回成功
|
6
7
|
QUERY_SUCCESS = "0" #查询成功
|
7
8
|
QUERY_FAIL = "1"
|
8
9
|
QUERY_WAIT = "2"
|
9
10
|
QUERY_INVALID = "3"
|
10
|
-
|
11
|
+
class Service
|
12
|
+
attr_accessor :args
|
11
13
|
|
12
|
-
def self.front_pay(
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
cupReserved = (args['cupReserved'] ||= '')
|
29
|
-
cupReserved = Rack::Utils.parse_nested_query cupReserved.gsub(/^{/,'').gsub(/}$/,'')
|
30
|
-
if !args['signature'] || !args['signMethod']
|
31
|
-
raise('No signature Or signMethod set in notify data!')
|
32
|
-
end
|
33
|
-
|
34
|
-
args.delete 'signMethod'
|
35
|
-
if args.delete('signature') != self.sign(args)
|
36
|
-
raise('Bad signature returned!')
|
14
|
+
def self.front_pay(param)
|
15
|
+
new.instance_eval do
|
16
|
+
param['orderTime'] ||= Time.now.strftime('%Y%m%d%H%M%S') #交易时间, YYYYmmhhddHHMMSS
|
17
|
+
param['orderCurrency'] ||= UnionPay::CURRENCY_CNY #交易币种,CURRENCY_CNY=>人民币
|
18
|
+
param['transType'] ||= UnionPay::CONSUME
|
19
|
+
trans_type = param['transType']
|
20
|
+
if [UnionPay::CONSUME, UnionPay::PRE_AUTH].include? trans_type
|
21
|
+
@api_url = UnionPay.front_pay_url
|
22
|
+
param.merge!(UnionPay::Pay_params_empty).merge!(UnionPay::Pay_params)
|
23
|
+
@param_check = UnionPay::Pay_params_check
|
24
|
+
else
|
25
|
+
# 前台交易仅支持 消费 和 预授权
|
26
|
+
raise("Bad trans_type for front_pay. Use back_pay instead")
|
27
|
+
end
|
28
|
+
service(param,UnionPay::FRONT_PAY)
|
29
|
+
self
|
37
30
|
end
|
38
|
-
args.merge! cupReserved
|
39
|
-
args.delete 'cupReserved'
|
40
|
-
args
|
41
31
|
end
|
42
32
|
|
43
|
-
def self.
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
UnionPay::Mer_params_reserved.each do |k|
|
50
|
-
if args.has_key? k
|
51
|
-
value = args.delete k
|
52
|
-
(arr_reserved ||= []) << "#{k}=#{value}"
|
53
|
-
has_reserved = true
|
33
|
+
def self.responce(param)
|
34
|
+
new.instance_eval do
|
35
|
+
cup_reserved = (param['cupReserved'] ||= '')
|
36
|
+
cup_reserved = Rack::Utils.parse_nested_query cup_reserved[1..-2]
|
37
|
+
if !param['signature'] || !param['signMethod']
|
38
|
+
raise('No signature Or signMethod set in notify data!')
|
54
39
|
end
|
55
|
-
end
|
56
|
-
|
57
|
-
if has_reserved
|
58
|
-
args['merReserved'] = arr_reserved.join('&')
|
59
|
-
else
|
60
|
-
args['merReserved'] ||= ''
|
61
|
-
end
|
62
40
|
|
63
|
-
|
64
|
-
|
41
|
+
param.delete 'signMethod'
|
42
|
+
if param.delete('signature') != Service.sign(param)
|
43
|
+
raise('Bad signature returned!')
|
44
|
+
end
|
45
|
+
param.merge! cup_reserved
|
46
|
+
param.delete 'cupReserved'
|
47
|
+
self
|
65
48
|
end
|
66
|
-
|
67
|
-
# signature
|
68
|
-
args['signature'] = self.sign(args)
|
69
|
-
args['signMethod'] = UnionPay::Sign_method
|
70
|
-
@@args = args
|
71
|
-
self
|
72
49
|
end
|
73
50
|
|
51
|
+
|
74
52
|
def self.sign(args)
|
75
53
|
sign_str = args.sort.map do |k,v|
|
76
54
|
"#{k}=#{v}&" unless UnionPay::Sign_ignore_params.include? k
|
@@ -78,12 +56,12 @@ module UnionPay
|
|
78
56
|
Digest::MD5.hexdigest(sign_str + Digest::MD5.hexdigest(UnionPay.security_key))
|
79
57
|
end
|
80
58
|
|
81
|
-
def
|
59
|
+
def form options={}
|
82
60
|
attrs = options.map{|k,v| "#{k}='#{v}'"}.join(' ')
|
83
61
|
html = [
|
84
|
-
"<form #{attrs} action='#{
|
62
|
+
"<form #{attrs} action='#{@api_url}' method='post'>"
|
85
63
|
]
|
86
|
-
|
64
|
+
args.each do |k,v|
|
87
65
|
html << "<input type='hidden' name='#{k}' value='#{v}' />"
|
88
66
|
end
|
89
67
|
if block_given?
|
@@ -92,5 +70,36 @@ module UnionPay
|
|
92
70
|
end
|
93
71
|
html.join
|
94
72
|
end
|
73
|
+
|
74
|
+
def [] key
|
75
|
+
self.args[key]
|
76
|
+
end
|
77
|
+
|
78
|
+
private
|
79
|
+
def service(param, service_type)
|
80
|
+
if param['commodityUrl']
|
81
|
+
param['commodityUrl'] = URI::encode(param['commodityUrl'])
|
82
|
+
end
|
83
|
+
|
84
|
+
arr_reserved = []
|
85
|
+
UnionPay::Mer_params_reserved.each do |k|
|
86
|
+
arr_reserved << "#{k}=#{param.delete k}" if param.has_key? k
|
87
|
+
end
|
88
|
+
|
89
|
+
if arr_reserved.any?
|
90
|
+
param['merReserved'] = arr_reserved.join('&')
|
91
|
+
else
|
92
|
+
param['merReserved'] ||= ''
|
93
|
+
end
|
94
|
+
|
95
|
+
@param_check.each do |k|
|
96
|
+
raise("KEY [#{k}] not set in params given") unless param.has_key? k
|
97
|
+
end
|
98
|
+
|
99
|
+
# signature
|
100
|
+
param['signature'] = Service.sign(param)
|
101
|
+
param['signMethod'] = UnionPay::Sign_method
|
102
|
+
self.args = param
|
103
|
+
end
|
95
104
|
end
|
96
105
|
end
|
data/lib/unionpay/version.rb
CHANGED
data/lib/unionpay.rb
CHANGED
@@ -18,21 +18,21 @@ module UnionPay
|
|
18
18
|
case e
|
19
19
|
## 测试环境
|
20
20
|
when :development
|
21
|
-
|
22
|
-
|
23
|
-
|
21
|
+
self.front_pay_url = "http://58.246.226.99/UpopWeb/api/Pay.action"
|
22
|
+
self.back_pay_url = "http://58.246.226.99/UpopWeb/api/BSPay.action"
|
23
|
+
self.query_url = "http://58.246.226.99/UpopWeb/api/Query.action"
|
24
24
|
## 预上线环境
|
25
25
|
when :pre_production
|
26
|
-
|
27
|
-
|
28
|
-
|
26
|
+
self.front_pay_url = "https://www.epay.lxdns.com/UpopWeb/api/Pay.action"
|
27
|
+
self.back_pay_url = "https://www.epay.lxdns.com/UpopWeb/api/BSPay.action"
|
28
|
+
self.query_url = "https://www.epay.lxdns.com/UpopWeb/api/Query.action"
|
29
29
|
## 线上环境
|
30
30
|
else
|
31
|
-
|
32
|
-
|
33
|
-
|
31
|
+
self.front_pay_url = "https://unionpaysecure.com/api/Pay.action"
|
32
|
+
self.back_pay_url = "https://besvr.unionpaysecure.com/api/BSPay.action"
|
33
|
+
self.query_url = "https://query.unionpaysecure.com/api/Query.action"
|
34
34
|
end
|
35
35
|
end
|
36
36
|
end
|
37
37
|
self.environment= :production
|
38
|
-
end
|
38
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class UnionPay::ServiceTest < Test::Unit::TestCase
|
4
|
+
def generate_form
|
5
|
+
param = {}
|
6
|
+
param['transType'] = UnionPay::CONSUME #交易类型,CONSUME or PRE_AUTH
|
7
|
+
param['orderAmount'] = 11000 #交易金额
|
8
|
+
param['orderNumber'] = '20131220151706'
|
9
|
+
param['customerIp'] = '127.0.0.1'
|
10
|
+
param['frontEndUrl'] = "http://www.example.com/sdk/utf8/front_notify.php" #前台回调URL
|
11
|
+
param['backEndUrl'] = "http://www.example.com/sdk/utf8/back_notify.php" #后台回调URL
|
12
|
+
param['orderTime'] = '20131220151706'
|
13
|
+
param['orderCurrency'] = UnionPay::CURRENCY_CNY #交易币种,CURRENCY_CNY=>人民币
|
14
|
+
UnionPay::Service.front_pay(param)
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_generate_form
|
18
|
+
assert_not_nil generate_form.form(target: '_blank', id: 'form'){"<input type='submit' />"}
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_generate_form_with_different_environment
|
22
|
+
UnionPay.environment = :development
|
23
|
+
dev_form = generate_form.form(target: '_blank', id: 'form'){"<input type='submit' />"}
|
24
|
+
UnionPay.environment = :production
|
25
|
+
pro_form = generate_form.form(target: '_blank', id: 'form'){"<input type='submit' />"}
|
26
|
+
assert dev_form != pro_form
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: unionpay
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-12-
|
11
|
+
date: 2013-12-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -46,11 +46,13 @@ extensions: []
|
|
46
46
|
extra_rdoc_files: []
|
47
47
|
files:
|
48
48
|
- README.md
|
49
|
+
- Rakefile
|
49
50
|
- lib/unionpay.rb
|
50
51
|
- lib/unionpay/conf.rb
|
51
52
|
- lib/unionpay/service.rb
|
52
53
|
- lib/unionpay/version.rb
|
53
|
-
- test.rb
|
54
|
+
- test/test_helper.rb
|
55
|
+
- test/unionpay/service_test.rb
|
54
56
|
- unionpay.gemspec
|
55
57
|
homepage: https://github.com/kikyous/unionpay
|
56
58
|
licenses:
|
@@ -76,4 +78,6 @@ rubygems_version: 2.0.3
|
|
76
78
|
signing_key:
|
77
79
|
specification_version: 4
|
78
80
|
summary: An unofficial unionpay gem
|
79
|
-
test_files:
|
81
|
+
test_files:
|
82
|
+
- test/test_helper.rb
|
83
|
+
- test/unionpay/service_test.rb
|
data/test.rb
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
#encoding:utf-8
|
2
|
-
require './lib/unionpay'
|
3
|
-
|
4
|
-
UnionPay.environment = :development ## 测试环境, :pre_production #预上线环境, 默认 # 线上环境
|
5
|
-
UnionPay.mer_id = '105550149170027'
|
6
|
-
UnionPay.mer_abbr = '商户名称'
|
7
|
-
UnionPay.security_key = '88888888'
|
8
|
-
|
9
|
-
param = {}
|
10
|
-
param['transType'] = UnionPay::CONSUME; #交易类型,CONSUME or PRE_AUTH
|
11
|
-
param['orderAmount'] = 11000; #交易金额
|
12
|
-
param['orderNumber'] = Time.now.strftime('%Y%m%d%H%M%S') #订单号,必须唯一
|
13
|
-
param['customerIp'] = '127.0.0.1'
|
14
|
-
param['frontEndUrl'] = "http://www.example.com/sdk/utf8/front_notify.php" #前台回调URL
|
15
|
-
param['backEndUrl'] = "http://www.example.com/sdk/utf8/back_notify.php" #后台回调URL
|
16
|
-
|
17
|
-
# 可填空字段
|
18
|
-
# param['commodityUrl'] = "http://www.example.com/product?name=商品" #商品URL
|
19
|
-
# param['commodityName'] = '商品名称' # 商品名称
|
20
|
-
# param['commodityUnitPrice'] = 11000; //商品单价
|
21
|
-
# param['commodityQuantity'] = 1; //商品数量
|
22
|
-
#
|
23
|
-
|
24
|
-
# 其余可填空的参数可以不填写
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
puts UnionPay::Service.front_pay(param).form(target: '_blank', id: 'form'){"<input type='submit' />"}
|