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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 43e586806a13c853f21f18869707f437a60d1163
4
- data.tar.gz: 39294aba6f7fa33e05ed321d00e7f574bf68c8fd
3
+ metadata.gz: 56d5e79082bc30554c5abe8b5ba4741584d6927c
4
+ data.tar.gz: 8045493307e855ccddadd7ab8210892e10be958f
5
5
  SHA512:
6
- metadata.gz: 7453658150d048516fe614e8fbb18549582b511f0ce7137bb2bce6290941e73fc3770236f350d4f04c44ad105ab48c092aacbdc3b1658bc397a20122d7b14636
7
- data.tar.gz: 70ed0871eb41979e7fab154eba46b5b796d8bac842dc2dd44148f5c5f4c0e9b8baeb99aeab3bf1dd7b56321b7157972bf5d9dde789664fd35a1b3eb3129f6666
6
+ metadata.gz: fe159452b5fc0f023574ddabf0ace47e624574b67d59e20cc493b3ad8ce05223e8147783909045864855c4fd18bdba13b647dc0e638c61bbe443fd4dd48fce84
7
+ data.tar.gz: 5a476e3cbbc4c41e432af74f16337ceebc9741f0596ace993dd2ef54ddd39bea9cafc275899fb6a14fa0481eea0cf213146454d56d47c58f5fb09ad851ee5f53
@@ -1,2 +1,5 @@
1
+ 1.1.0 Jul 6, 2016
2
+ * Code refactoring
3
+
1
4
  1.0.0 May 26th, 2016
2
5
  * Created initial version
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- [![Gem Version](https://badge.fury.io/rb/simple-allpay.svg)](http://badge.fury.io/rb/allpay-web-service)
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
@@ -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.1"
26
- spec.add_development_dependency "rspec", "~> 3.4"
27
- spec.add_development_dependency "nokogiri", "~> 1.6.7.2"
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
@@ -1,5 +1,6 @@
1
1
  require "allpay/version"
2
2
  require "allpay/client"
3
+ require "allpay/const"
3
4
 
4
5
  module AllpayWebService
5
6
  end
@@ -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 params
14
- case params[:msg]
11
+ def self.generate args
12
+ case args[:msg]
15
13
  when :missing_parameter
16
- "Missing required parameter: #{params[:field]}"
17
- when :wrong_parameter_type
18
- "Parameter should be #{params[:type]}"
19
- when :wrong_data
20
- "#{params[:field]} should be #{params[:data]}"
21
- when :wrong_length
22
- "The maximum length for #{params[:field]} is #{params[:length]}"
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
- "#{params[:field]} cannot be empty"
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: :wrong_data, field: :merchant_id, data: "String") unless merchant_id.is_a? String
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: :wrong_length, field: :merchant_id, length: 10) if merchant_id.size > 10
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: :wrong_data, field: :hash_key, data: "String") unless hash_key.is_a? String
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: :wrong_data, field: :hash_iv, data: "String") unless hash_iv.is_a? String
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
- # @param params [Hash] The params to create trade.
56
- # @return [Response] response data
57
- def create_trade params = {}
58
- raise_argument_error(msg: :wrong_parameter_type, type: "Hash") unless params.is_a? Hash
59
-
60
- raise_argument_error(msg: :missing_parameter, field: :ServiceURL) if params[:ServiceURL].nil?
61
- raise_argument_error(msg: :wrong_data, field: :ServiceURL, data: "String") unless params[:ServiceURL].is_a? String
62
-
63
- raise_argument_error(msg: :missing_parameter, field: :MerchantTradeNo) if params[:MerchantTradeNo].nil?
64
- raise_argument_error(msg: :wrong_data, field: :MerchantTradeNo, data: "String") unless params[:MerchantTradeNo].is_a? String
65
- raise_argument_error(msg: :wrong_length, field: :MerchantTradeNo, length: 20) if params[:MerchantTradeNo].size > 20
66
-
67
- raise_argument_error(msg: :missing_parameter, field: :MerchantTradeDate) if params[:MerchantTradeDate].nil?
68
- raise_argument_error(msg: :wrong_data, field: :MerchantTradeDate, data: "String") unless params[:MerchantTradeDate].is_a? String
69
- raise_argument_error(msg: :wrong_length, field: :MerchantTradeDate, length: 20) if params[:MerchantTradeDate].size > 20
70
- raise_argument_error(msg: :wrong_format, field: :MerchantTradeDate) unless /\d{4}\/\d{2}\/\d{2} \d{2}:\d{2}:\d{2}/.match(params[:MerchantTradeDate])
71
-
72
- raise_argument_error(msg: :missing_parameter, field: :TotalAmount) if params[:TotalAmount].nil?
73
- raise_argument_error(msg: :wrong_data, field: :TotalAmount, data: "Integer") unless params[:TotalAmount].is_a? Fixnum
74
-
75
- raise_argument_error(msg: :missing_parameter, field: :TradeDesc) if params[:TradeDesc].nil?
76
- raise_argument_error(msg: :wrong_data, field: :TradeDesc, data: "String") unless params[:TradeDesc].is_a? String
77
- raise_argument_error(msg: :wrong_length, field: :TradeDesc, length: 200) if params[:TradeDesc].size > 200
78
-
79
- raise_argument_error(msg: :missing_parameter, field: :CardNo) if params[:CardNo].nil?
80
- raise_argument_error(msg: :wrong_data, field: :CardNo, data: "Integer") unless params[:CardNo].is_a? Fixnum
81
-
82
- raise_argument_error(msg: :missing_parameter, field: :CardValidMM) if params[:CardValidMM].nil?
83
- raise_argument_error(msg: :wrong_data, field: :CardValidMM, data: "String") unless params[:CardValidMM].is_a? String
84
- raise_argument_error(msg: :wrong_length, field: :CardValidMM, length: 2) if params[:CardValidMM].size > 2
85
-
86
- raise_argument_error(msg: :missing_parameter, field: :CardValidYY) if params[:CardValidYY].nil?
87
- raise_argument_error(msg: :wrong_data, field: :CardValidYY, data: "String") unless params[:CardValidYY].is_a? String
88
- raise_argument_error(msg: :wrong_length, field: :CardValidYY, length: 2) if params[:CardValidYY].size > 2
89
-
90
- if params.has_key? :CardCVV2
91
- raise_argument_error(msg: :wrong_data, field: :CardCVV2, data: "Integer") unless params[:CardCVV2].is_a? Fixnum
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
- if params.has_key? :UnionPay
95
- raise_argument_error(msg: :wrong_data, field: :UnionPay, data: "Integer") unless params[:UnionPay].is_a? Fixnum
96
- end
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 params.has_key? :Installment
99
- raise_argument_error(msg: :wrong_data, field: :Installment, data: "Integer") unless params[:Installment].is_a? Fixnum
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 params.has_key? :ThreeD
103
- raise_argument_error(msg: :wrong_data, field: :ThreeD, data: "Integer") unless params[:ThreeD].is_a? Fixnum
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 params.has_key? :CharSet
107
- raise_argument_error(msg: :wrong_data, field: :CharSet, data: "String") unless params[:CharSet].is_a? String
108
- raise_argument_error(msg: :wrong_length, field: :CharSet, length: 10) if params[:CharSet].size > 10
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 params.has_key? :Enn
112
- raise_argument_error(msg: :wrong_data, field: :Enn, data: "String") unless params[:Enn].is_a? String
113
- raise_argument_error(msg: :wrong_length, field: :Enn, length: 1) if params[:Enn].size > 1
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 params.has_key? :BankOnly
117
- raise_argument_error(msg: :wrong_data, field: :BankOnly, data: "String") unless params[:BankOnly].is_a? String
118
- raise_argument_error(msg: :wrong_length, field: :BankOnly, length: 120) if params[:BankOnly].size > 120
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
- if params.has_key? :Redeem
122
- raise_argument_error(msg: :wrong_data, field: :Redeem, data: "String") unless params[:Redeem].is_a? String
123
- raise_argument_error(msg: :wrong_length, field: :Redeem, length: 1) if params[:Redeem].size > 1
124
- end
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 params.has_key? :PhoneNumber
127
- raise_argument_error(msg: :wrong_data, field: :PhoneNumber, data: "String") unless params[:PhoneNumber].is_a? String
128
- raise_argument_error(msg: :wrong_length, field: :PhoneNumber, length: 10) if params[:PhoneNumber].size > 10
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 params.has_key? :AddMember
132
- raise_argument_error(msg: :wrong_data, field: :AddMember, data: "String") unless params[:AddMember].is_a? String
133
- raise_argument_error(msg: :wrong_length, field: :AddMember, length: 1) if params[:AddMember].size > 1
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 params[:AddMember] == 1
137
- raise_argument_error(msg: :missing_parameter, field: :CName) if params[:CName].nil?
138
- raise_argument_error(msg: :wrong_data, field: :CName, data: "String") unless params[:CName].is_a? String
139
- raise_argument_error(msg: :cannot_be_empty, field: :CName) if params[:CName].empty?
140
- raise_argument_error(msg: :wrong_length, field: :CName, length: 60) if params[:CName].size > 60
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 params.has_key? :Email
144
- raise_argument_error(msg: :wrong_data, field: :Email, data: "String") unless params[:Email].is_a? String
145
- raise_argument_error(msg: :wrong_length, field: :Email, length: 100) if params[:Email].size > 100
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 params.has_key? :Remark
149
- raise_argument_error(msg: :wrong_data, field: :Remark, data: "String") unless params[:Remark].is_a? String
150
- raise_argument_error(msg: :wrong_length, field: :Remark, length: 200) if params[:Remark].size > 200
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 params.has_key? :PlatformID
154
- raise_argument_error(msg: :wrong_data, field: :PlatformID, data: "String") unless params[:PlatformID].is_a? String
155
- raise_argument_error(msg: :wrong_length, field: :PlatformID, length: 9) if params[:PlatformID].size > 9
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(params)
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, params: data
194
+ post_data = build_post_data trade_type: :create_trade, args: data
181
195
 
182
- response = request(service_url: params[:ServiceURL], data: post_data, is_soap_request: true)
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
- # @param params [Hash] The params to verify order by otp code.
190
- # @return [Response] response data
191
- def verify_order_by_otp params = {}
192
- raise_argument_error(msg: :wrong_parameter_type, type: "Hash") unless params.is_a? Hash
193
-
194
- raise_argument_error(msg: :missing_parameter, field: :ServiceURL) if params[:ServiceURL].nil?
195
- raise_argument_error(msg: :wrong_data, field: :ServiceURL, data: "String") unless params[:ServiceURL].is_a? String
196
-
197
- raise_argument_error(msg: :missing_parameter, field: :MerchantTradeNo) if params[:MerchantTradeNo].nil?
198
- raise_argument_error(msg: :wrong_data, field: :MerchantTradeNo, data: "String") unless params[:MerchantTradeNo].is_a? String
199
- raise_argument_error(msg: :wrong_length, field: :MerchantTradeNo, length: 20) if params[:MerchantTradeNo].size > 20
200
-
201
- raise_argument_error(msg: :missing_parameter, field: :TradeNo) if params[:TradeNo].nil?
202
- raise_argument_error(msg: :wrong_data, field: :TradeNo, data: "String") unless params[:TradeNo].is_a? String
203
- raise_argument_error(msg: :wrong_length, field: :TradeNo, length: 20) if params[:TradeNo].size > 20
204
-
205
- raise_argument_error(msg: :missing_parameter, field: :OtpCode) if params[:OtpCode].nil?
206
- raise_argument_error(msg: :wrong_data, field: :OtpCode, data: "String") unless params[:OtpCode].is_a? String
207
- raise_argument_error(msg: :wrong_length, field: :OtpCode, length: 10) if params[:OtpCode].size > 10
208
-
209
- if params.has_key? :PlatformID
210
- raise_argument_error(msg: :wrong_data, field: :PlatformID, data: "String") unless params[:PlatformID].is_a? String
211
- raise_argument_error(msg: :wrong_length, field: :PlatformID, length: 9) if params[:PlatformID].size > 9
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(params)
241
+ }.merge(args)
218
242
 
219
- post_data = build_post_data trade_type: :verify_order_by_otp, params: data
243
+ post_data = build_post_data trade_type: :verify_order_by_otp, args: data
220
244
 
221
- response = request(service_url: params[:ServiceURL], data: post_data, is_soap_request: true)
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
- # @param params [Hash] The params to resend otp code.
229
- # @return [Response] response data
230
- def resend_otp params = {}
231
- raise_argument_error(msg: :wrong_parameter_type, type: "Hash") unless params.is_a? Hash
232
-
233
- raise_argument_error(msg: :missing_parameter, field: :ServiceURL) if params[:ServiceURL].nil?
234
- raise_argument_error(msg: :wrong_data, field: :ServiceURL, data: "String") unless params[:ServiceURL].is_a? String
235
-
236
- raise_argument_error(msg: :missing_parameter, field: :MerchantTradeNo) if params[:MerchantTradeNo].nil?
237
- raise_argument_error(msg: :wrong_data, field: :MerchantTradeNo, data: "String") unless params[:MerchantTradeNo].is_a? String
238
- raise_argument_error(msg: :wrong_length, field: :MerchantTradeNo, length: 20) if params[:MerchantTradeNo].size > 20
239
-
240
- raise_argument_error(msg: :missing_parameter, field: :TradeNo) if params[:TradeNo].nil?
241
- raise_argument_error(msg: :wrong_data, field: :TradeNo, data: "String") unless params[:TradeNo].is_a? String
242
- raise_argument_error(msg: :wrong_length, field: :TradeNo, length: 20) if params[:TradeNo].size > 20
243
-
244
- if params.has_key? :PlatformID
245
- raise_argument_error(msg: :wrong_data, field: :PlatformID, data: "String") unless params[:PlatformID].is_a? String
246
- raise_argument_error(msg: :wrong_length, field: :PlatformID, length: 9) if params[:PlatformID].size > 9
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(params)
285
+ }.merge(args)
253
286
 
254
- post_data = build_post_data trade_type: :resend_otp, params: data
287
+ post_data = build_post_data trade_type: :resend_otp, args: data
255
288
 
256
- response = request(service_url: params[:ServiceURL], data: post_data, is_soap_request: true)
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
- # @param params [Hash] The params to query trade information.
264
- # @return [Response] response data
265
- def query_trade params = {}
266
- raise_argument_error(msg: :wrong_parameter_type, type: "Hash") unless params.is_a? Hash
267
-
268
- raise_argument_error(msg: :missing_parameter, field: :ServiceURL) if params[:ServiceURL].nil?
269
- raise_argument_error(msg: :wrong_data, field: :ServiceURL, data: "String") unless params[:ServiceURL].is_a? String
270
-
271
- raise_argument_error(msg: :missing_parameter, field: :MerchantTradeNo) if params[:MerchantTradeNo].nil?
272
- raise_argument_error(msg: :wrong_data, field: :MerchantTradeNo, data: "String") unless params[:MerchantTradeNo].is_a? String
273
- raise_argument_error(msg: :wrong_length, field: :MerchantTradeNo, length: 20) if params[:MerchantTradeNo].size > 20
274
-
275
- if params.has_key? :PlatformID
276
- raise_argument_error(msg: :wrong_data, field: :PlatformID, data: "String") unless params[:PlatformID].is_a? String
277
- raise_argument_error(msg: :cannot_be_empty, field: :PlatformID) if params[:PlatformID].nil? or params[:PlatformID].empty?
278
- raise_argument_error(msg: :wrong_length, field: :PlatformID, length: 9) if params[:PlatformID].size > 9
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 = params[:PlatformID].nil? ? :query_trade : :platform_query_trade
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(params)
326
+ }.merge(args)
286
327
 
287
- post_data = build_post_data trade_type: trade_type, params: data
328
+ post_data = build_post_data trade_type: trade_type, args: data
288
329
 
289
- response = request(service_url: params[:ServiceURL], data: post_data, is_soap_request: true)
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
- # @param params [Hash] The params to execute action for trade. See the official manual for more information.
297
- # @return [Response] response data
298
- def do_action params = {}
299
- raise_argument_error(msg: :wrong_parameter_type, type: "Hash") unless params.is_a? Hash
300
-
301
- raise_argument_error(msg: :missing_parameter, field: :ServiceURL) if params[:ServiceURL].nil?
302
- raise_argument_error(msg: :wrong_data, field: :ServiceURL, data: "String") unless params[:ServiceURL].is_a? String
303
-
304
- raise_argument_error(msg: :missing_parameter, field: :MerchantTradeNo) if params[:MerchantTradeNo].nil?
305
- raise_argument_error(msg: :wrong_data, field: :MerchantTradeNo, data: "String") unless params[:MerchantTradeNo].is_a? String
306
- raise_argument_error(msg: :wrong_length, field: :MerchantTradeNo, length: 20) if params[:MerchantTradeNo].size > 20
307
-
308
- raise_argument_error(msg: :missing_parameter, field: :TradeNo) if params[:TradeNo].nil?
309
- raise_argument_error(msg: :wrong_data, field: :TradeNo, data: "String") unless params[:TradeNo].is_a? String
310
- raise_argument_error(msg: :wrong_length, field: :TradeNo, length: 20) if params[:TradeNo].size > 20
311
-
312
- raise_argument_error(msg: :missing_parameter, field: :Action) if params[:Action].nil?
313
- raise_argument_error(msg: :wrong_data, field: :Action, data: "String") unless params[:Action].is_a? String
314
- raise_argument_error(msg: :wrong_length, field: :Action, length: 1) if params[:Action].size > 1
315
-
316
- raise_argument_error(msg: :missing_parameter, field: :TotalAmount) if params[:TotalAmount].nil?
317
- raise_argument_error(msg: :wrong_data, field: :TotalAmount, data: "Integer") unless params[:TotalAmount].is_a? Fixnum
318
-
319
- if params.has_key? :PlatformID
320
- raise_argument_error(msg: :wrong_data, field: :PlatformID, data: "String") unless params[:PlatformID].is_a? String
321
- raise_argument_error(msg: :wrong_length, field: :PlatformID, length: 9) if params[:PlatformID].size > 9
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
- data = {}.merge(params)
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, params: data
377
+ post_data = build_post_data trade_type: :do_action, args: data
327
378
 
328
- response = request service_url: params[:ServiceURL], data: post_data, platform_id: params[:PlatformID]
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 params
336
- raise ArgumentError, ErrorMessage.generate(params)
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:, params:
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>#{params[:MerchantTradeNo]}</MerchantTradeNo><MerchantTradeDate>#{params[:MerchantTradeDate]}</MerchantTradeDate><TotalAmount>#{params[:TotalAmount]}</TotalAmount><TradeDesc>#{params[:TradeDesc]}</TradeDesc><CardNo>#{params[:CardNo]}</CardNo><CardValidMM>#{params[:CardValidMM]}</CardValidMM><CardValidYY>#{params[:CardValidYY]}</CardValidYY><CardCVV2>#{params[:CardCVV2]}</CardCVV2><UnionPay>#{params[:UnionPay]}</UnionPay><Installment>#{params[:Installment]}</Installment><ThreeD>#{params[:ThreeD]}</ThreeD><CharSet>#{params[:CharSet]}</CharSet><Enn>#{params[:Enn]}</Enn><BankOnly>#{params[:BankOnly]}</BankOnly><Redeem>#{params[:Redeem]}</Redeem><PhoneNumber>#{params[:PhoneNumber]}</PhoneNumber><AddMember>#{params[:AddMember]}</AddMember><CName>#{params[:CName]}</CName><Email>#{params[:Email]}</Email><Remark>#{params[:Remark]}</Remark><PlatformID>#{params[:PlatformID]}</PlatformID></Data></Root>"
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>#{params[:MerchantID]}</MerchantID><MerchantTradeNo>#{params[:MerchantTradeNo]}</MerchantTradeNo><TradeNo>#{params[:TradeNo]}</TradeNo><OtpCode>#{params[:OtpCode]}</OtpCode><PlatformID>#{params[:PlatformID]}</PlatformID></Data></Root>"
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>#{params[:MerchantID]}</MerchantID><MerchantTradeNo>#{params[:MerchantTradeNo]}</MerchantTradeNo><TradeNo>#{params[:TradeNo]}</TradeNo><PlatformID></PlatformID></Data></Root>"
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(params[:MerchantTradeNo])
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(params[:MerchantTradeNo])
380
- platform_id = encrypt(params[:PlatformID])
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>#{params[:MerchantTradeNo]}</MerchantTradeNo><TradeNo>#{params[:TradeNo]}</TradeNo><Action>#{params[:Action]}</Action><TotalAmount>#{params[:TotalAmount]}</TotalAmount></Data></Root>")
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
 
@@ -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
@@ -0,0 +1,12 @@
1
+ class Hash
2
+ def filter args
3
+ return nil if args.empty?
4
+
5
+ if args.size == 1
6
+ args[0] = args[0].to_s if args[0].is_a? Symbol
7
+ self.select { |key| key.to_s.match(args.first) }
8
+ else
9
+ self.select { |key| args.include?(key) }
10
+ end
11
+ end
12
+ end
@@ -1,3 +1,3 @@
1
1
  module AllpayWebService
2
- VERSION = "1.0.0"
2
+ VERSION = "1.1.0"
3
3
  end
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.0.0
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-05-26 00:00:00.000000000 Z
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.1'
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.1'
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.4'
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.4'
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.7.2
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.7.2
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: