allpay-web-service 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +3 -0
- data/README.md +1 -1
- data/allpay-web-service.gemspec +3 -3
- data/lib/allpay-web-service.rb +1 -0
- data/lib/allpay/client.rb +263 -212
- data/lib/allpay/const.rb +66 -0
- data/lib/allpay/core_ext/hash.rb +12 -0
- data/lib/allpay/version.rb +1 -1
- metadata +10 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 56d5e79082bc30554c5abe8b5ba4741584d6927c
|
4
|
+
data.tar.gz: 8045493307e855ccddadd7ab8210892e10be958f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fe159452b5fc0f023574ddabf0ace47e624574b67d59e20cc493b3ad8ce05223e8147783909045864855c4fd18bdba13b647dc0e638c61bbe443fd4dd48fce84
|
7
|
+
data.tar.gz: 5a476e3cbbc4c41e432af74f16337ceebc9741f0596ace993dd2ef54ddd39bea9cafc275899fb6a14fa0481eea0cf213146454d56d47c58f5fb09ad851ee5f53
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
[](http://badge.fury.io/rb/allpay-web-service)
|
2
2
|

|
3
3
|
|
4
4
|
# Allpay Web Service
|
data/allpay-web-service.gemspec
CHANGED
@@ -22,9 +22,9 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.add_dependency "nori", "~> 2.6"
|
23
23
|
|
24
24
|
spec.add_development_dependency "bundler", "~> 1.12"
|
25
|
-
spec.add_development_dependency "rake", "~> 11.
|
26
|
-
spec.add_development_dependency "rspec", "~> 3.
|
27
|
-
spec.add_development_dependency "nokogiri", "~> 1.6.
|
25
|
+
spec.add_development_dependency "rake", "~> 11.2"
|
26
|
+
spec.add_development_dependency "rspec", "~> 3.5"
|
27
|
+
spec.add_development_dependency "nokogiri", "~> 1.6.8"
|
28
28
|
|
29
29
|
spec.required_ruby_version = ">= 2.1.5"
|
30
30
|
end
|
data/lib/allpay-web-service.rb
CHANGED
data/lib/allpay/client.rb
CHANGED
@@ -3,27 +3,23 @@ require "uri"
|
|
3
3
|
require "net/http"
|
4
4
|
require "net/https"
|
5
5
|
require "nori"
|
6
|
+
require "cgi"
|
7
|
+
require "allpay/core_ext/hash"
|
6
8
|
|
7
9
|
module AllpayWebService
|
8
|
-
class Response
|
9
|
-
attr_accessor :hash, :xml, :errors
|
10
|
-
end
|
11
|
-
|
12
10
|
class ErrorMessage
|
13
|
-
def self.generate
|
14
|
-
case
|
11
|
+
def self.generate args
|
12
|
+
case args[:msg]
|
15
13
|
when :missing_parameter
|
16
|
-
"Missing required parameter: #{
|
17
|
-
when :
|
18
|
-
"
|
19
|
-
when :
|
20
|
-
"#{
|
21
|
-
when :
|
22
|
-
"The
|
23
|
-
when :wrong_format
|
24
|
-
"The format for #{params[:field]} is wrong"
|
14
|
+
"Missing required parameter: #{args[:field]}"
|
15
|
+
when :parameter_should_be
|
16
|
+
"#{args[:field]} should be #{args[:data]}"
|
17
|
+
when :reach_max_length
|
18
|
+
"The maximum length for #{args[:field]} is #{args[:length]}"
|
19
|
+
when :wrong_data_format
|
20
|
+
"The format for #{args[:field]} is wrong"
|
25
21
|
when :cannot_be_empty
|
26
|
-
"#{
|
22
|
+
"#{args[:field]} cannot be empty"
|
27
23
|
end
|
28
24
|
end
|
29
25
|
end
|
@@ -33,16 +29,16 @@ module AllpayWebService
|
|
33
29
|
|
34
30
|
def initialize merchant_id:, hash_key:, hash_iv:
|
35
31
|
raise_argument_error(msg: :missing_parameter, field: :merchant_id) if merchant_id.nil?
|
36
|
-
raise_argument_error(msg: :
|
32
|
+
raise_argument_error(msg: :parameter_should_be, field: :merchant_id, data: "String") unless merchant_id.is_a? String
|
37
33
|
raise_argument_error(msg: :cannot_be_empty, field: :merchant_id) if merchant_id.empty?
|
38
|
-
raise_argument_error(msg: :
|
34
|
+
raise_argument_error(msg: :reach_max_length, field: :merchant_id, length: 10) if merchant_id.size > 10
|
39
35
|
|
40
36
|
raise_argument_error(msg: :missing_parameter, field: :hash_key) if hash_key.nil?
|
41
|
-
raise_argument_error(msg: :
|
37
|
+
raise_argument_error(msg: :parameter_should_be, field: :hash_key, data: "String") unless hash_key.is_a? String
|
42
38
|
raise_argument_error(msg: :cannot_be_empty, field: :hash_key) if hash_key.empty?
|
43
39
|
|
44
40
|
raise_argument_error(msg: :missing_parameter, field: :hash_iv) if hash_iv.nil?
|
45
|
-
raise_argument_error(msg: :
|
41
|
+
raise_argument_error(msg: :parameter_should_be, field: :hash_iv, data: "String") unless hash_iv.is_a? String
|
46
42
|
raise_argument_error(msg: :cannot_be_empty, field: :hash_iv) if hash_iv.empty?
|
47
43
|
|
48
44
|
@merchant_id = merchant_id
|
@@ -51,110 +47,128 @@ module AllpayWebService
|
|
51
47
|
end
|
52
48
|
|
53
49
|
# Create trade
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
raise_argument_error(msg: :
|
66
|
-
|
67
|
-
raise_argument_error(msg: :
|
68
|
-
|
69
|
-
raise_argument_error(msg: :
|
70
|
-
raise_argument_error(msg: :
|
71
|
-
|
72
|
-
raise_argument_error(msg: :
|
73
|
-
|
74
|
-
|
75
|
-
raise_argument_error(msg: :
|
76
|
-
raise_argument_error(msg: :
|
77
|
-
|
78
|
-
|
79
|
-
raise_argument_error(msg: :
|
80
|
-
raise_argument_error(msg: :
|
81
|
-
|
82
|
-
raise_argument_error(msg: :missing_parameter, field: :
|
83
|
-
raise_argument_error(msg: :
|
84
|
-
raise_argument_error(msg: :
|
85
|
-
|
86
|
-
|
87
|
-
raise_argument_error(msg: :
|
88
|
-
raise_argument_error(msg: :
|
89
|
-
|
90
|
-
if
|
91
|
-
|
50
|
+
def create_trade args = {}
|
51
|
+
raise_argument_error(msg: :parameter_should_be, field: "Parameter", data: "Hash") unless args.is_a? Hash
|
52
|
+
|
53
|
+
# filter arguments by accept keys
|
54
|
+
accept_keys = [
|
55
|
+
:ServiceURL, :MerchantTradeNo, :MerchantTradeDate, :TotalAmount, :TradeDesc, :CardNo,
|
56
|
+
:CardValidMM, :CardValidYY, :CardCVV2, :UnionPay, :Installment, :ThreeD, :CharSet,
|
57
|
+
:Enn, :BankOnly, :Redeem, :PhoneNumber, :AddMember, :CName, :Email, :Remark, :PlatformID
|
58
|
+
]
|
59
|
+
args = args.filter(accept_keys)
|
60
|
+
|
61
|
+
raise_argument_error(msg: :missing_parameter, field: :ServiceURL) if args[:ServiceURL].nil?
|
62
|
+
raise_argument_error(msg: :parameter_should_be, field: :ServiceURL, data: "String") unless args[:ServiceURL].is_a? String
|
63
|
+
raise_argument_error(msg: :cannot_be_empty, field: :ServiceURL) if args[:ServiceURL].empty?
|
64
|
+
|
65
|
+
raise_argument_error(msg: :missing_parameter, field: :MerchantTradeNo) if args[:MerchantTradeNo].nil?
|
66
|
+
raise_argument_error(msg: :parameter_should_be, field: :MerchantTradeNo, data: "String") unless args[:MerchantTradeNo].is_a? String
|
67
|
+
raise_argument_error(msg: :cannot_be_empty, field: :MerchantTradeNo) if args[:MerchantTradeNo].empty?
|
68
|
+
raise_argument_error(msg: :reach_max_length, field: :MerchantTradeNo, length: 20) if args[:MerchantTradeNo].size > 20
|
69
|
+
|
70
|
+
raise_argument_error(msg: :missing_parameter, field: :MerchantTradeDate) if args[:MerchantTradeDate].nil?
|
71
|
+
raise_argument_error(msg: :parameter_should_be, field: :MerchantTradeDate, data: "String") unless args[:MerchantTradeDate].is_a? String
|
72
|
+
raise_argument_error(msg: :wrong_data_format, field: :MerchantTradeDate) unless /\A\d{4}\/\d{2}\/\d{2} \d{2}:\d{2}:\d{2}\z/.match(args[:MerchantTradeDate])
|
73
|
+
|
74
|
+
raise_argument_error(msg: :missing_parameter, field: :TotalAmount) if args[:TotalAmount].nil?
|
75
|
+
raise_argument_error(msg: :parameter_should_be, field: :TotalAmount, data: "Integer") unless args[:TotalAmount].is_a? Integer
|
76
|
+
raise_argument_error(msg: :parameter_should_be, field: :TotalAmount, data: "greater than 0") if args[:TotalAmount] <= 0
|
77
|
+
|
78
|
+
raise_argument_error(msg: :missing_parameter, field: :TradeDesc) if args[:TradeDesc].nil?
|
79
|
+
raise_argument_error(msg: :parameter_should_be, field: :TradeDesc, data: "String") unless args[:TradeDesc].is_a? String
|
80
|
+
raise_argument_error(msg: :cannot_be_empty, field: :TradeDesc) if args[:TradeDesc].empty?
|
81
|
+
raise_argument_error(msg: :reach_max_length, field: :TradeDesc, length: 200) if args[:TradeDesc].size > 200
|
82
|
+
|
83
|
+
raise_argument_error(msg: :missing_parameter, field: :CardNo) if args[:CardNo].nil?
|
84
|
+
raise_argument_error(msg: :parameter_should_be, field: :CardNo, data: "Integer") unless args[:CardNo].is_a? Integer
|
85
|
+
|
86
|
+
raise_argument_error(msg: :missing_parameter, field: :CardValidMM) if args[:CardValidMM].nil?
|
87
|
+
raise_argument_error(msg: :parameter_should_be, field: :CardValidMM, data: "String") unless args[:CardValidMM].is_a? String
|
88
|
+
raise_argument_error(msg: :cannot_be_empty, field: :CardValidMM) if args[:CardValidMM].empty?
|
89
|
+
raise_argument_error(msg: :reach_max_length, field: :CardValidMM, length: 2) if args[:CardValidMM].size > 2
|
90
|
+
|
91
|
+
raise_argument_error(msg: :missing_parameter, field: :CardValidYY) if args[:CardValidYY].nil?
|
92
|
+
raise_argument_error(msg: :parameter_should_be, field: :CardValidYY, data: "String") unless args[:CardValidYY].is_a? String
|
93
|
+
raise_argument_error(msg: :cannot_be_empty, field: :CardValidYY) if args[:CardValidYY].empty?
|
94
|
+
raise_argument_error(msg: :reach_max_length, field: :CardValidYY, length: 2) if args[:CardValidYY].size > 2
|
95
|
+
|
96
|
+
if args.has_key? :CardCVV2
|
97
|
+
raise_argument_error(msg: :parameter_should_be, field: :CardCVV2, data: "Integer") unless args[:CardCVV2].is_a? Integer
|
92
98
|
end
|
93
99
|
|
94
|
-
|
95
|
-
|
96
|
-
|
100
|
+
# NOTE: Web Service 版本都帶 0。
|
101
|
+
args.delete :UnionPay if args.has_key? :UnionPay
|
102
|
+
# if args.has_key? :UnionPay
|
103
|
+
# raise_argument_error(msg: :parameter_should_be, field: :UnionPay, data: "Integer") unless args[:UnionPay].is_a? Integer
|
104
|
+
# end
|
97
105
|
|
98
|
-
if
|
99
|
-
raise_argument_error(msg: :
|
106
|
+
if args.has_key? :Installment
|
107
|
+
raise_argument_error(msg: :parameter_should_be, field: :Installment, data: "Integer") unless args[:Installment].is_a? Integer
|
100
108
|
end
|
101
109
|
|
102
|
-
if
|
103
|
-
raise_argument_error(msg: :
|
110
|
+
if args.has_key? :ThreeD
|
111
|
+
raise_argument_error(msg: :parameter_should_be, field: :ThreeD, data: "Integer") unless args[:ThreeD].is_a? Integer
|
112
|
+
raise_argument_error(msg: :parameter_should_be, field: :ThreeD, data: ThreeD.readable_keys) unless ThreeD.values.include? args[:ThreeD]
|
104
113
|
end
|
105
114
|
|
106
|
-
if
|
107
|
-
raise_argument_error(msg: :
|
108
|
-
raise_argument_error(msg: :
|
115
|
+
if args.has_key? :CharSet
|
116
|
+
raise_argument_error(msg: :parameter_should_be, field: :CharSet, data: "String") unless args[:CharSet].is_a? String
|
117
|
+
raise_argument_error(msg: :parameter_should_be, field: :CharSet, data: CharSet.readable_keys) unless CharSet.values.include? args[:CharSet]
|
109
118
|
end
|
110
119
|
|
111
|
-
if
|
112
|
-
raise_argument_error(msg: :
|
113
|
-
raise_argument_error(msg: :
|
120
|
+
if args.has_key? :Enn
|
121
|
+
raise_argument_error(msg: :parameter_should_be, field: :Enn, data: "String") unless args[:Enn].is_a? String
|
122
|
+
raise_argument_error(msg: :parameter_should_be, field: :Enn, data: English.readable_keys) unless English.values.include? args[:Enn]
|
114
123
|
end
|
115
124
|
|
116
|
-
if
|
117
|
-
raise_argument_error(msg: :
|
118
|
-
raise_argument_error(msg: :
|
125
|
+
if args.has_key? :BankOnly
|
126
|
+
raise_argument_error(msg: :parameter_should_be, field: :BankOnly, data: "String") unless args[:BankOnly].is_a? String
|
127
|
+
raise_argument_error(msg: :reach_max_length, field: :BankOnly, length: 120) if args[:BankOnly].size > 120
|
119
128
|
end
|
120
129
|
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
130
|
+
# NOTE: 目前 Web Service 是背景處理授權,尚未開放紅利折抵。
|
131
|
+
args.delete :Redeem if args.has_key? :Redeem
|
132
|
+
# if args.has_key? :Redeem
|
133
|
+
# raise_argument_error(msg: :parameter_should_be, field: :Redeem, data: "String") unless args[:Redeem].is_a? String
|
134
|
+
# raise_argument_error(msg: :reach_max_length, field: :Redeem, length: 1) if args[:Redeem].size > 1
|
135
|
+
# end
|
125
136
|
|
126
|
-
if
|
127
|
-
raise_argument_error(msg: :
|
128
|
-
raise_argument_error(msg: :
|
137
|
+
if args.has_key? :PhoneNumber
|
138
|
+
raise_argument_error(msg: :parameter_should_be, field: :PhoneNumber, data: "String") unless args[:PhoneNumber].is_a? String
|
139
|
+
raise_argument_error(msg: :reach_max_length, field: :PhoneNumber, length: 10) if args[:PhoneNumber].size > 10
|
129
140
|
end
|
130
141
|
|
131
|
-
if
|
132
|
-
raise_argument_error(msg: :
|
133
|
-
raise_argument_error(msg: :
|
142
|
+
if args.has_key? :AddMember
|
143
|
+
raise_argument_error(msg: :parameter_should_be, field: :AddMember, data: "String") unless args[:AddMember].is_a? String
|
144
|
+
raise_argument_error(msg: :parameter_should_be, field: :AddMember, data: AddMember.readable_keys) unless AddMember.values.include? args[:AddMember]
|
134
145
|
end
|
135
146
|
|
136
|
-
if
|
137
|
-
raise_argument_error(msg: :missing_parameter, field: :CName) if
|
138
|
-
raise_argument_error(msg: :
|
139
|
-
raise_argument_error(msg: :cannot_be_empty, field: :CName) if
|
140
|
-
raise_argument_error(msg: :
|
147
|
+
if args[:AddMember] == AddMember::YES
|
148
|
+
raise_argument_error(msg: :missing_parameter, field: :CName) if args[:CName].nil?
|
149
|
+
raise_argument_error(msg: :parameter_should_be, field: :CName, data: "String") unless args[:CName].is_a? String
|
150
|
+
raise_argument_error(msg: :cannot_be_empty, field: :CName) if args[:CName].empty?
|
151
|
+
raise_argument_error(msg: :reach_max_length, field: :CName, length: 60) if args[:CName].size > 60
|
141
152
|
end
|
142
153
|
|
143
|
-
if
|
144
|
-
raise_argument_error(msg: :
|
145
|
-
raise_argument_error(msg: :
|
154
|
+
if args.has_key? :Email
|
155
|
+
raise_argument_error(msg: :parameter_should_be, field: :Email, data: "String") unless args[:Email].is_a? String
|
156
|
+
raise_argument_error(msg: :reach_max_length, field: :Email, length: 100) if args[:Email].size > 100
|
146
157
|
end
|
147
158
|
|
148
|
-
if
|
149
|
-
raise_argument_error(msg: :
|
150
|
-
raise_argument_error(msg: :
|
159
|
+
if args.has_key? :Remark
|
160
|
+
raise_argument_error(msg: :parameter_should_be, field: :Remark, data: "String") unless args[:Remark].is_a? String
|
161
|
+
raise_argument_error(msg: :reach_max_length, field: :Remark, length: 200) if args[:Remark].size > 200
|
151
162
|
end
|
152
163
|
|
153
|
-
if
|
154
|
-
raise_argument_error(msg: :
|
155
|
-
raise_argument_error(msg: :
|
164
|
+
if args.has_key? :PlatformID
|
165
|
+
raise_argument_error(msg: :parameter_should_be, field: :PlatformID, data: "String") unless args[:PlatformID].is_a? String
|
166
|
+
raise_argument_error(msg: :reach_max_length, field: :PlatformID, length: 9) if args[:PlatformID].size > 9
|
156
167
|
end
|
157
168
|
|
169
|
+
service_url = args[:ServiceURL]
|
170
|
+
args.delete :ServiceURL
|
171
|
+
|
158
172
|
data = {
|
159
173
|
MerchantID: @merchant_id,
|
160
174
|
TradeDesc: "",
|
@@ -172,168 +186,205 @@ module AllpayWebService
|
|
172
186
|
Email: "",
|
173
187
|
Remark: "",
|
174
188
|
PlatformID: ""
|
175
|
-
}.merge(
|
189
|
+
}.merge(args)
|
176
190
|
data[:TradeDesc] = CGI.escape(data[:TradeDesc])[0...200]
|
177
191
|
data[:CardValidMM] = data[:CardValidMM].to_s.rjust(2, "0")
|
178
192
|
data[:Remark] = CGI.escape(data[:Remark])[0...200]
|
179
193
|
|
180
|
-
post_data = build_post_data trade_type: :create_trade,
|
194
|
+
post_data = build_post_data trade_type: :create_trade, args: data
|
181
195
|
|
182
|
-
response = request(service_url:
|
196
|
+
response = request(service_url: service_url, data: post_data, is_soap_request: true)
|
183
197
|
|
184
198
|
parse trade_type: :create_trade, response: response
|
185
199
|
end
|
186
200
|
|
187
201
|
# Verify order by otp code
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
raise_argument_error(msg: :missing_parameter, field: :
|
198
|
-
raise_argument_error(msg: :
|
199
|
-
raise_argument_error(msg: :
|
200
|
-
|
201
|
-
raise_argument_error(msg: :missing_parameter, field: :
|
202
|
-
raise_argument_error(msg: :
|
203
|
-
raise_argument_error(msg: :
|
204
|
-
|
205
|
-
|
206
|
-
raise_argument_error(msg: :
|
207
|
-
raise_argument_error(msg: :
|
208
|
-
|
209
|
-
if
|
210
|
-
|
211
|
-
|
202
|
+
def verify_order_by_otp args = {}
|
203
|
+
raise_argument_error(msg: :parameter_should_be, field: "Parameter", data: "Hash") unless args.is_a? Hash
|
204
|
+
|
205
|
+
# filter argumentss by accept keys
|
206
|
+
accept_keys = [
|
207
|
+
:ServiceURL, :MerchantTradeNo, :TradeNo, :OtpCode, :PlatformID
|
208
|
+
]
|
209
|
+
args = args.filter(accept_keys)
|
210
|
+
|
211
|
+
raise_argument_error(msg: :missing_parameter, field: :ServiceURL) if args[:ServiceURL].nil?
|
212
|
+
raise_argument_error(msg: :parameter_should_be, field: :ServiceURL, data: "String") unless args[:ServiceURL].is_a? String
|
213
|
+
raise_argument_error(msg: :cannot_be_empty, field: :ServiceURL) if args[:ServiceURL].empty?
|
214
|
+
|
215
|
+
raise_argument_error(msg: :missing_parameter, field: :MerchantTradeNo) if args[:MerchantTradeNo].nil?
|
216
|
+
raise_argument_error(msg: :parameter_should_be, field: :MerchantTradeNo, data: "String") unless args[:MerchantTradeNo].is_a? String
|
217
|
+
raise_argument_error(msg: :cannot_be_empty, field: :MerchantTradeNo) if args[:MerchantTradeNo].empty?
|
218
|
+
raise_argument_error(msg: :reach_max_length, field: :MerchantTradeNo, length: 20) if args[:MerchantTradeNo].size > 20
|
219
|
+
|
220
|
+
raise_argument_error(msg: :missing_parameter, field: :TradeNo) if args[:TradeNo].nil?
|
221
|
+
raise_argument_error(msg: :parameter_should_be, field: :TradeNo, data: "String") unless args[:TradeNo].is_a? String
|
222
|
+
raise_argument_error(msg: :cannot_be_empty, field: :TradeNo) if args[:TradeNo].empty?
|
223
|
+
raise_argument_error(msg: :reach_max_length, field: :TradeNo, length: 20) if args[:TradeNo].size > 20
|
224
|
+
|
225
|
+
raise_argument_error(msg: :missing_parameter, field: :OtpCode) if args[:OtpCode].nil?
|
226
|
+
raise_argument_error(msg: :parameter_should_be, field: :OtpCode, data: "String") unless args[:OtpCode].is_a? String
|
227
|
+
raise_argument_error(msg: :cannot_be_empty, field: :OtpCode) if args[:OtpCode].empty?
|
228
|
+
raise_argument_error(msg: :reach_max_length, field: :OtpCode, length: 10) if args[:OtpCode].size > 10
|
229
|
+
|
230
|
+
if args.has_key? :PlatformID
|
231
|
+
raise_argument_error(msg: :parameter_should_be, field: :PlatformID, data: "String") unless args[:PlatformID].is_a? String
|
232
|
+
raise_argument_error(msg: :reach_max_length, field: :PlatformID, length: 9) if args[:PlatformID].size > 9
|
212
233
|
end
|
213
234
|
|
235
|
+
service_url = args[:ServiceURL]
|
236
|
+
args.delete :ServiceURL
|
237
|
+
|
214
238
|
data = {
|
215
239
|
MerchantID: @merchant_id,
|
216
240
|
PlatformID: ""
|
217
|
-
}.merge(
|
241
|
+
}.merge(args)
|
218
242
|
|
219
|
-
post_data = build_post_data trade_type: :verify_order_by_otp,
|
243
|
+
post_data = build_post_data trade_type: :verify_order_by_otp, args: data
|
220
244
|
|
221
|
-
response = request(service_url:
|
245
|
+
response = request(service_url: service_url, data: post_data, is_soap_request: true)
|
222
246
|
|
223
247
|
parse trade_type: :verify_order_by_otp, response: response
|
224
248
|
end
|
225
249
|
|
226
250
|
# Resend otp code
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
raise_argument_error(msg: :missing_parameter, field: :
|
237
|
-
raise_argument_error(msg: :
|
238
|
-
raise_argument_error(msg: :
|
239
|
-
|
240
|
-
raise_argument_error(msg: :missing_parameter, field: :
|
241
|
-
raise_argument_error(msg: :
|
242
|
-
raise_argument_error(msg: :
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
251
|
+
def resend_otp args = {}
|
252
|
+
raise_argument_error(msg: :parameter_should_be, field: "Parameter", data: "Hash") unless args.is_a? Hash
|
253
|
+
|
254
|
+
# filter arguments by accept keys
|
255
|
+
accept_keys = [
|
256
|
+
:ServiceURL, :MerchantTradeNo, :TradeNo, :PlatformID
|
257
|
+
]
|
258
|
+
args = args.filter(accept_keys)
|
259
|
+
|
260
|
+
raise_argument_error(msg: :missing_parameter, field: :ServiceURL) if args[:ServiceURL].nil?
|
261
|
+
raise_argument_error(msg: :parameter_should_be, field: :ServiceURL, data: "String") unless args[:ServiceURL].is_a? String
|
262
|
+
raise_argument_error(msg: :cannot_be_empty, field: :ServiceURL) if args[:ServiceURL].empty?
|
263
|
+
|
264
|
+
raise_argument_error(msg: :missing_parameter, field: :MerchantTradeNo) if args[:MerchantTradeNo].nil?
|
265
|
+
raise_argument_error(msg: :parameter_should_be, field: :MerchantTradeNo, data: "String") unless args[:MerchantTradeNo].is_a? String
|
266
|
+
raise_argument_error(msg: :cannot_be_empty, field: :MerchantTradeNo) if args[:MerchantTradeNo].empty?
|
267
|
+
raise_argument_error(msg: :reach_max_length, field: :MerchantTradeNo, length: 20) if args[:MerchantTradeNo].size > 20
|
268
|
+
|
269
|
+
raise_argument_error(msg: :missing_parameter, field: :TradeNo) if args[:TradeNo].nil?
|
270
|
+
raise_argument_error(msg: :parameter_should_be, field: :TradeNo, data: "String") unless args[:TradeNo].is_a? String
|
271
|
+
raise_argument_error(msg: :cannot_be_empty, field: :TradeNo) if args[:TradeNo].empty?
|
272
|
+
raise_argument_error(msg: :reach_max_length, field: :TradeNo, length: 20) if args[:TradeNo].size > 20
|
273
|
+
|
274
|
+
if args.has_key? :PlatformID
|
275
|
+
raise_argument_error(msg: :parameter_should_be, field: :PlatformID, data: "String") unless args[:PlatformID].is_a? String
|
276
|
+
raise_argument_error(msg: :reach_max_length, field: :PlatformID, length: 9) if args[:PlatformID].size > 9
|
247
277
|
end
|
248
278
|
|
279
|
+
service_url = args[:ServiceURL]
|
280
|
+
args.delete :ServiceURL
|
281
|
+
|
249
282
|
data = {
|
250
283
|
MerchantID: @merchant_id,
|
251
284
|
PlatformID: ""
|
252
|
-
}.merge(
|
285
|
+
}.merge(args)
|
253
286
|
|
254
|
-
post_data = build_post_data trade_type: :resend_otp,
|
287
|
+
post_data = build_post_data trade_type: :resend_otp, args: data
|
255
288
|
|
256
|
-
response = request(service_url:
|
289
|
+
response = request(service_url: service_url, data: post_data, is_soap_request: true)
|
257
290
|
|
258
291
|
parse trade_type: :resend_otp, response: response
|
259
292
|
end
|
260
293
|
|
261
294
|
# Query trade information
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
raise_argument_error(msg: :missing_parameter, field: :
|
272
|
-
raise_argument_error(msg: :
|
273
|
-
raise_argument_error(msg: :
|
274
|
-
|
275
|
-
if
|
276
|
-
|
277
|
-
|
278
|
-
|
295
|
+
def query_trade args = {}
|
296
|
+
raise_argument_error(msg: :parameter_should_be, field: "Parameter", data: "Hash") unless args.is_a? Hash
|
297
|
+
|
298
|
+
# filter arguments by accept keys
|
299
|
+
accept_keys = [
|
300
|
+
:ServiceURL, :MerchantTradeNo, :PlatformID
|
301
|
+
]
|
302
|
+
args = args.filter(accept_keys)
|
303
|
+
|
304
|
+
raise_argument_error(msg: :missing_parameter, field: :ServiceURL) if args[:ServiceURL].nil?
|
305
|
+
raise_argument_error(msg: :parameter_should_be, field: :ServiceURL, data: "String") unless args[:ServiceURL].is_a? String
|
306
|
+
raise_argument_error(msg: :cannot_be_empty, field: :ServiceURL) if args[:ServiceURL].empty?
|
307
|
+
|
308
|
+
raise_argument_error(msg: :missing_parameter, field: :MerchantTradeNo) if args[:MerchantTradeNo].nil?
|
309
|
+
raise_argument_error(msg: :parameter_should_be, field: :MerchantTradeNo, data: "String") unless args[:MerchantTradeNo].is_a? String
|
310
|
+
raise_argument_error(msg: :cannot_be_empty, field: :MerchantTradeNo) if args[:MerchantTradeNo].empty?
|
311
|
+
raise_argument_error(msg: :reach_max_length, field: :MerchantTradeNo, length: 20) if args[:MerchantTradeNo].size > 20
|
312
|
+
|
313
|
+
if args.has_key? :PlatformID
|
314
|
+
raise_argument_error(msg: :parameter_should_be, field: :PlatformID, data: "String") unless args[:PlatformID].is_a? String
|
315
|
+
raise_argument_error(msg: :cannot_be_empty, field: :PlatformID) if args[:PlatformID].nil? or args[:PlatformID].empty?
|
316
|
+
raise_argument_error(msg: :reach_max_length, field: :PlatformID, length: 9) if args[:PlatformID].size > 9
|
279
317
|
end
|
280
318
|
|
281
|
-
trade_type =
|
319
|
+
trade_type = args[:PlatformID].nil? ? :query_trade : :platform_query_trade
|
320
|
+
|
321
|
+
service_url = args[:ServiceURL]
|
322
|
+
args.delete :ServiceURL
|
282
323
|
|
283
324
|
data = {
|
284
325
|
PlatformID: ""
|
285
|
-
}.merge(
|
326
|
+
}.merge(args)
|
286
327
|
|
287
|
-
post_data = build_post_data trade_type: trade_type,
|
328
|
+
post_data = build_post_data trade_type: trade_type, args: data
|
288
329
|
|
289
|
-
response = request(service_url:
|
330
|
+
response = request(service_url: service_url, data: post_data, is_soap_request: true)
|
290
331
|
|
291
332
|
parse trade_type: :query_trade, response: response
|
292
333
|
end
|
293
334
|
|
294
335
|
# Execute action for trade
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
raise_argument_error(msg: :missing_parameter, field: :
|
305
|
-
raise_argument_error(msg: :
|
306
|
-
raise_argument_error(msg: :
|
307
|
-
|
308
|
-
raise_argument_error(msg: :missing_parameter, field: :
|
309
|
-
raise_argument_error(msg: :
|
310
|
-
raise_argument_error(msg: :
|
311
|
-
|
312
|
-
|
313
|
-
raise_argument_error(msg: :
|
314
|
-
raise_argument_error(msg: :
|
315
|
-
|
316
|
-
raise_argument_error(msg: :
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
336
|
+
def do_action args = {}
|
337
|
+
raise_argument_error(msg: :parameter_should_be, field: "Parameter", data: "Hash") unless args.is_a? Hash
|
338
|
+
|
339
|
+
# filter arguments by accept keys
|
340
|
+
accept_keys = [
|
341
|
+
:ServiceURL, :MerchantTradeNo, :TradeNo, :Action, :TotalAmount, :PlatformID
|
342
|
+
]
|
343
|
+
args = args.filter(accept_keys)
|
344
|
+
|
345
|
+
raise_argument_error(msg: :missing_parameter, field: :ServiceURL) if args[:ServiceURL].nil?
|
346
|
+
raise_argument_error(msg: :parameter_should_be, field: :ServiceURL, data: "String") unless args[:ServiceURL].is_a? String
|
347
|
+
raise_argument_error(msg: :cannot_be_empty, field: :ServiceURL) if args[:ServiceURL].empty?
|
348
|
+
|
349
|
+
raise_argument_error(msg: :missing_parameter, field: :MerchantTradeNo) if args[:MerchantTradeNo].nil?
|
350
|
+
raise_argument_error(msg: :parameter_should_be, field: :MerchantTradeNo, data: "String") unless args[:MerchantTradeNo].is_a? String
|
351
|
+
raise_argument_error(msg: :cannot_be_empty, field: :MerchantTradeNo) if args[:MerchantTradeNo].empty?
|
352
|
+
raise_argument_error(msg: :reach_max_length, field: :MerchantTradeNo, length: 20) if args[:MerchantTradeNo].size > 20
|
353
|
+
|
354
|
+
raise_argument_error(msg: :missing_parameter, field: :TradeNo) if args[:TradeNo].nil?
|
355
|
+
raise_argument_error(msg: :parameter_should_be, field: :TradeNo, data: "String") unless args[:TradeNo].is_a? String
|
356
|
+
raise_argument_error(msg: :cannot_be_empty, field: :TradeNo) if args[:TradeNo].empty?
|
357
|
+
raise_argument_error(msg: :reach_max_length, field: :TradeNo, length: 20) if args[:TradeNo].size > 20
|
358
|
+
|
359
|
+
raise_argument_error(msg: :missing_parameter, field: :Action) if args[:Action].nil?
|
360
|
+
raise_argument_error(msg: :parameter_should_be, field: :Action, data: "String") unless args[:Action].is_a? String
|
361
|
+
raise_argument_error(msg: :parameter_should_be, field: :Action, data: ActionType.readable_keys) unless ActionType.values.include? args[:Action]
|
362
|
+
|
363
|
+
raise_argument_error(msg: :missing_parameter, field: :TotalAmount) if args[:TotalAmount].nil?
|
364
|
+
raise_argument_error(msg: :parameter_should_be, field: :TotalAmount, data: "Integer") unless args[:TotalAmount].is_a? Integer
|
365
|
+
raise_argument_error(msg: :parameter_should_be, field: :TotalAmount, data: "greater than 0") if args[:TotalAmount] <= 0
|
366
|
+
|
367
|
+
if args.has_key? :PlatformID
|
368
|
+
raise_argument_error(msg: :parameter_should_be, field: :PlatformID, data: "String") unless args[:PlatformID].is_a? String
|
369
|
+
raise_argument_error(msg: :reach_max_length, field: :PlatformID, length: 9) if args[:PlatformID].size > 9
|
322
370
|
end
|
323
371
|
|
324
|
-
|
372
|
+
service_url = args[:ServiceURL]
|
373
|
+
args.delete :ServiceURL
|
374
|
+
|
375
|
+
data = {}.merge(args)
|
325
376
|
|
326
|
-
post_data = build_post_data trade_type: :do_action,
|
377
|
+
post_data = build_post_data trade_type: :do_action, args: data
|
327
378
|
|
328
|
-
response = request service_url:
|
379
|
+
response = request service_url: service_url, data: post_data, platform_id: args[:PlatformID]
|
329
380
|
|
330
381
|
parse trade_type: :do_action, response: response
|
331
382
|
end
|
332
383
|
|
333
384
|
private
|
334
385
|
|
335
|
-
def raise_argument_error
|
336
|
-
raise ArgumentError, ErrorMessage.generate(
|
386
|
+
def raise_argument_error args
|
387
|
+
raise ArgumentError, ErrorMessage.generate(args)
|
337
388
|
end
|
338
389
|
|
339
390
|
# Encode(by base64) and encrypt(by AES-128-CBC) data
|
@@ -358,29 +409,29 @@ module AllpayWebService
|
|
358
409
|
CGI.unescape plain_data
|
359
410
|
end
|
360
411
|
|
361
|
-
def build_post_data trade_type:,
|
412
|
+
def build_post_data trade_type:, args:
|
362
413
|
case trade_type
|
363
414
|
when :create_trade
|
364
|
-
xml_data= "<?xml version=\"1.0\" encoding=\"utf-8\" ?><Root><Data><MerchantID>#{@merchant_id}</MerchantID><MerchantTradeNo>#{
|
415
|
+
xml_data= "<?xml version=\"1.0\" encoding=\"utf-8\" ?><Root><Data><MerchantID>#{@merchant_id}</MerchantID><MerchantTradeNo>#{args[:MerchantTradeNo]}</MerchantTradeNo><MerchantTradeDate>#{args[:MerchantTradeDate]}</MerchantTradeDate><TotalAmount>#{args[:TotalAmount]}</TotalAmount><TradeDesc>#{args[:TradeDesc]}</TradeDesc><CardNo>#{args[:CardNo]}</CardNo><CardValidMM>#{args[:CardValidMM]}</CardValidMM><CardValidYY>#{args[:CardValidYY]}</CardValidYY><CardCVV2>#{args[:CardCVV2]}</CardCVV2><UnionPay>#{args[:UnionPay]}</UnionPay><Installment>#{args[:Installment]}</Installment><ThreeD>#{args[:ThreeD]}</ThreeD><CharSet>#{args[:CharSet]}</CharSet><Enn>#{args[:Enn]}</Enn><BankOnly>#{args[:BankOnly]}</BankOnly><Redeem>#{args[:Redeem]}</Redeem><PhoneNumber>#{args[:PhoneNumber]}</PhoneNumber><AddMember>#{args[:AddMember]}</AddMember><CName>#{args[:CName]}</CName><Email>#{args[:Email]}</Email><Remark>#{args[:Remark]}</Remark><PlatformID>#{args[:PlatformID]}</PlatformID></Data></Root>"
|
365
416
|
encrypted_data = encrypt(xml_data)
|
366
417
|
"<?xml version=\"1.0\" encoding=\"utf-8\"?><soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\"><soap12:Body><CreateTrade xmlns=\"http://PaymentCenter.AllPay.com.tw/\"><merchantID>#{@merchant_id}</merchantID><xmlData>#{encrypted_data}</xmlData></CreateTrade></soap12:Body></soap12:Envelope>"
|
367
418
|
when :verify_order_by_otp
|
368
|
-
xml_data = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><Root><Data><MerchantID>#{
|
419
|
+
xml_data = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><Root><Data><MerchantID>#{args[:MerchantID]}</MerchantID><MerchantTradeNo>#{args[:MerchantTradeNo]}</MerchantTradeNo><TradeNo>#{args[:TradeNo]}</TradeNo><OtpCode>#{args[:OtpCode]}</OtpCode><PlatformID>#{args[:PlatformID]}</PlatformID></Data></Root>"
|
369
420
|
encrypted_data = encrypt(xml_data)
|
370
421
|
"<?xml version=\"1.0\" encoding=\"utf-8\"?><soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\"><soap12:Body><VerifyOrderByOtp xmlns=\"http://PaymentCenter.AllPay.com.tw/\"><merchantID>#{@merchant_id}</merchantID><xmlData>#{encrypted_data}</xmlData></VerifyOrderByOtp></soap12:Body></soap12:Envelope>"
|
371
422
|
when :resend_otp
|
372
|
-
xml_data = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><Root><Data><MerchantID>#{
|
423
|
+
xml_data = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><Root><Data><MerchantID>#{args[:MerchantID]}</MerchantID><MerchantTradeNo>#{args[:MerchantTradeNo]}</MerchantTradeNo><TradeNo>#{args[:TradeNo]}</TradeNo><PlatformID></PlatformID></Data></Root>"
|
373
424
|
encrypted_data = encrypt(xml_data)
|
374
425
|
"<?xml version=\"1.0\" encoding=\"utf-8\"?><soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\"><soap12:Body><ResendOtp xmlns=\"http://PaymentCenter.AllPay.com.tw/\"><merchantID>#{@merchant_id}</merchantID><xmlData>#{encrypted_data}</xmlData></ResendOtp></soap12:Body></soap12:Envelope>"
|
375
426
|
when :query_trade
|
376
|
-
merchant_trade_no = encrypt(
|
427
|
+
merchant_trade_no = encrypt(args[:MerchantTradeNo])
|
377
428
|
"<?xml version=\"1.0\" encoding=\"utf-8\"?><soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\"><soap12:Body><QueryTrade xmlns=\"http://PaymentCenter.AllPay.com.tw/\"><merchantID>#{@merchant_id}</merchantID><merchantTradeNo>#{merchant_trade_no}</merchantTradeNo></QueryTrade></soap12:Body></soap12:Envelope>"
|
378
429
|
when :platform_query_trade
|
379
|
-
merchant_trade_no = encrypt(
|
380
|
-
platform_id = encrypt(
|
430
|
+
merchant_trade_no = encrypt(args[:MerchantTradeNo])
|
431
|
+
platform_id = encrypt(args[:PlatformID])
|
381
432
|
"<?xml version=\"1.0\" encoding=\"utf-8\"?><soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\"><soap12:Body><PlatformQueryTrade xmlns=\"http://PaymentCenter.AllPay.com.tw/\"><merchantID>#{@merchant_id}</merchantID><merchantTradeNo>#{merchant_trade_no}</merchantTradeNo><PlatformID>#{platform_id}</PlatformID></PlatformQueryTrade></soap12:Body></soap12:Envelope>"
|
382
433
|
when :do_action
|
383
|
-
encrypt("<?xml version=\"1.0\" encoding=\"utf-8\" ?><Root><Data><MerchantID>#{@merchant_id}</MerchantID><MerchantTradeNo>#{
|
434
|
+
encrypt("<?xml version=\"1.0\" encoding=\"utf-8\" ?><Root><Data><MerchantID>#{@merchant_id}</MerchantID><MerchantTradeNo>#{args[:MerchantTradeNo]}</MerchantTradeNo><TradeNo>#{args[:TradeNo]}</TradeNo><Action>#{args[:Action]}</Action><TotalAmount>#{args[:TotalAmount]}</TotalAmount></Data></Root>")
|
384
435
|
end
|
385
436
|
end
|
386
437
|
|
data/lib/allpay/const.rb
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
module AllpayWebService
|
2
|
+
class Base
|
3
|
+
def self.readable_keys
|
4
|
+
result = self.constants.map { |constant| "#{self.name}::#{constant}" }.join(", ")
|
5
|
+
position = result.rindex(", ")
|
6
|
+
result[position..position+1] = " or "
|
7
|
+
result
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.values
|
11
|
+
self.constants.map { |constant| self.const_get(constant) }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
# 3D 驗證
|
16
|
+
class ThreeD < Base
|
17
|
+
# 使用 3D 驗證
|
18
|
+
YES = 1
|
19
|
+
# 不使用 3D 驗證
|
20
|
+
NO = 0
|
21
|
+
end
|
22
|
+
|
23
|
+
# 中文編碼格式
|
24
|
+
class CharSet < Base
|
25
|
+
# UTF-8 編碼
|
26
|
+
UTF8 = "utf-8"
|
27
|
+
# BIG5 編碼
|
28
|
+
BIG5 = "big5"
|
29
|
+
end
|
30
|
+
|
31
|
+
# 英文交易
|
32
|
+
class English < Base
|
33
|
+
# 使用英文交易
|
34
|
+
YES = "e"
|
35
|
+
# 不使用英文交易
|
36
|
+
NO = ""
|
37
|
+
end
|
38
|
+
|
39
|
+
# 紅利折抵
|
40
|
+
class UseRedeem < Base
|
41
|
+
# 使用紅利折抵
|
42
|
+
YES = "Y"
|
43
|
+
# 不使用紅利折抵
|
44
|
+
NO = ""
|
45
|
+
end
|
46
|
+
|
47
|
+
# 加入會員
|
48
|
+
class AddMember < Base
|
49
|
+
# 同意加入
|
50
|
+
YES = "1"
|
51
|
+
# 不同意加入
|
52
|
+
NO = "0"
|
53
|
+
end
|
54
|
+
|
55
|
+
# 信用卡訂單處理動作資訊
|
56
|
+
class ActionType < Base
|
57
|
+
# 關帳
|
58
|
+
C = "C"
|
59
|
+
# 退刷
|
60
|
+
R = "R"
|
61
|
+
# 取消
|
62
|
+
E = "E"
|
63
|
+
# 放棄
|
64
|
+
N = "N"
|
65
|
+
end
|
66
|
+
end
|
data/lib/allpay/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: allpay-web-service
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Calvert
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-07-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nori
|
@@ -44,42 +44,42 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '11.
|
47
|
+
version: '11.2'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '11.
|
54
|
+
version: '11.2'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '3.
|
61
|
+
version: '3.5'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '3.
|
68
|
+
version: '3.5'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: nokogiri
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 1.6.
|
75
|
+
version: 1.6.8
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 1.6.
|
82
|
+
version: 1.6.8
|
83
83
|
description: ''
|
84
84
|
email:
|
85
85
|
- ''
|
@@ -100,6 +100,8 @@ files:
|
|
100
100
|
- bin/setup
|
101
101
|
- lib/allpay-web-service.rb
|
102
102
|
- lib/allpay/client.rb
|
103
|
+
- lib/allpay/const.rb
|
104
|
+
- lib/allpay/core_ext/hash.rb
|
103
105
|
- lib/allpay/version.rb
|
104
106
|
homepage: https://github.com/CalvertYang/allpay-web-service
|
105
107
|
licenses:
|