allpay-web-service 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
-
[![Gem Version](https://badge.fury.io/rb/
|
1
|
+
[![Gem Version](https://badge.fury.io/rb/allpay-web-service.svg)](http://badge.fury.io/rb/allpay-web-service)
|
2
2
|
![Analytics](https://ga-beacon.appspot.com/UA-44933497-3/CalvertYang/allpay-web-service?pixel)
|
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:
|