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 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: