buckaruby 1.7.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +2 -54
- data/README.md +54 -18
- data/lib/buckaruby/action.rb +4 -4
- data/lib/buckaruby/amount.rb +25 -0
- data/lib/buckaruby/configuration.rb +35 -40
- data/lib/buckaruby/currency.rb +3 -3
- data/lib/buckaruby/exception.rb +9 -8
- data/lib/buckaruby/gateway.rb +64 -72
- data/lib/buckaruby/operation.rb +5 -5
- data/lib/buckaruby/payment_method.rb +20 -12
- data/lib/buckaruby/request.rb +62 -68
- data/lib/buckaruby/response.rb +69 -67
- data/lib/buckaruby/signature.rb +26 -7
- data/lib/buckaruby/transaction_type.rb +24 -21
- data/lib/buckaruby/version.rb +1 -1
- data/lib/buckaruby.rb +1 -2
- metadata +16 -97
- data/.github/workflows/test.yml +0 -23
- data/.gitignore +0 -19
- data/.rubocop.yml +0 -107
- data/Gemfile +0 -12
- data/Gemfile.lock +0 -71
- data/Rakefile +0 -10
- data/buckaruby.gemspec +0 -28
- data/lib/buckaruby/iban.rb +0 -29
- data/lib/buckaruby/ideal.rb +0 -21
- data/spec/buckaruby/configuration_spec.rb +0 -113
- data/spec/buckaruby/field_mapper_spec.rb +0 -69
- data/spec/buckaruby/gateway_spec.rb +0 -803
- data/spec/buckaruby/iban_spec.rb +0 -75
- data/spec/buckaruby/signature_spec.rb +0 -89
- data/spec/buckaruby/support/case_insensitive_hash_spec.rb +0 -74
- data/spec/fixtures/responses/callback_invalid_signature.txt +0 -1
- data/spec/fixtures/responses/callback_payment_amex.txt +0 -1
- data/spec/fixtures/responses/callback_payment_cancelled.txt +0 -1
- data/spec/fixtures/responses/callback_payment_empty_transaction_type.txt +0 -1
- data/spec/fixtures/responses/callback_payment_failed.txt +0 -1
- data/spec/fixtures/responses/callback_payment_giropay.txt +0 -1
- data/spec/fixtures/responses/callback_payment_pending.txt +0 -1
- data/spec/fixtures/responses/callback_payment_rejected.txt +0 -1
- data/spec/fixtures/responses/callback_payment_sepa.txt +0 -1
- data/spec/fixtures/responses/callback_payment_sofort.txt +0 -1
- data/spec/fixtures/responses/callback_payment_success.txt +0 -1
- data/spec/fixtures/responses/callback_payment_visa.txt +0 -1
- data/spec/fixtures/responses/callback_recurrent_sepa.txt +0 -1
- data/spec/fixtures/responses/callback_recurrent_visa.txt +0 -1
- data/spec/fixtures/responses/callback_refund_amex.txt +0 -1
- data/spec/fixtures/responses/callback_refund_ideal.txt +0 -1
- data/spec/fixtures/responses/callback_refund_paypal.txt +0 -1
- data/spec/fixtures/responses/callback_reversal_paypal.txt +0 -1
- data/spec/fixtures/responses/callback_reversal_sepa.txt +0 -1
- data/spec/fixtures/responses/callback_valid_signature.txt +0 -1
- data/spec/fixtures/responses/cancel_success.txt +0 -1
- data/spec/fixtures/responses/recurrent_transaction_success.txt +0 -1
- data/spec/fixtures/responses/refund_info_error.txt +0 -1
- data/spec/fixtures/responses/refund_info_success.txt +0 -1
- data/spec/fixtures/responses/refund_transaction_success.txt +0 -1
- data/spec/fixtures/responses/setup_transaction_success.txt +0 -1
- data/spec/fixtures/responses/specify_transaction_success.txt +0 -1
- data/spec/fixtures/responses/status_cancellable.txt +0 -1
- data/spec/fixtures/responses/status_noncancellable.txt +0 -1
- data/spec/fixtures/responses/status_success.txt +0 -1
- data/spec/spec_helper.rb +0 -16
data/lib/buckaruby/gateway.rb
CHANGED
@@ -1,29 +1,21 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require '
|
3
|
+
require 'forwardable'
|
4
4
|
|
5
5
|
module Buckaruby
|
6
6
|
# Implementation of the BPE 3.0 NVP Gateway.
|
7
7
|
class Gateway
|
8
|
-
|
9
|
-
# Buckaroo mode can be set as class setting
|
10
|
-
attr_accessor :mode
|
11
|
-
end
|
8
|
+
extend Forwardable
|
12
9
|
|
13
|
-
|
10
|
+
def_delegators :config, :logger
|
14
11
|
|
15
12
|
def initialize(options = {})
|
16
|
-
@
|
17
|
-
@logger = config.logger
|
13
|
+
@options = options
|
18
14
|
end
|
19
15
|
|
20
16
|
# Returns the payment methods enabled by Buckaroo and supported by this library.
|
21
17
|
def payment_methods
|
22
|
-
valid_payment_methods = [
|
23
|
-
PaymentMethod::IDEAL, PaymentMethod::IDEAL_PROCESSING, PaymentMethod::VISA, PaymentMethod::MASTER_CARD,
|
24
|
-
PaymentMethod::MAESTRO, PaymentMethod::AMERICAN_EXPRESS, PaymentMethod::SEPA_DIRECT_DEBIT,
|
25
|
-
PaymentMethod::PAYPAL, PaymentMethod::BANCONTACT_MISTER_CASH, PaymentMethod::SOFORT
|
26
|
-
]
|
18
|
+
valid_payment_methods = PaymentMethod.all - [PaymentMethod::TRANSFER]
|
27
19
|
|
28
20
|
response = execute_request(:specify_transaction)
|
29
21
|
services = response.services.map { |service| service[:name] }
|
@@ -34,26 +26,33 @@ module Buckaruby
|
|
34
26
|
# Get a list with payment issuers (currently only iDEAL).
|
35
27
|
def issuers(payment_method)
|
36
28
|
if payment_method != PaymentMethod::IDEAL && payment_method != PaymentMethod::IDEAL_PROCESSING
|
37
|
-
raise ArgumentError,
|
29
|
+
raise ArgumentError, 'Invalid payment method, only iDEAL is supported.'
|
38
30
|
end
|
39
31
|
|
40
|
-
|
32
|
+
response = execute_request(:specify_transaction, payment_method: payment_method)
|
33
|
+
|
34
|
+
service = response.services.first
|
35
|
+
description = service[:actiondescription].find { |action| action[:description].casecmp(Action::PAY).zero? } if service
|
36
|
+
params = description[:requestparameters].find { |param| param[:name].casecmp('issuer').zero? } if description
|
37
|
+
items = params[:listitemdescription] if params
|
38
|
+
|
39
|
+
items&.map { |item| [item[:value], item[:description]] }.to_h
|
41
40
|
end
|
42
41
|
|
43
42
|
# Setup a new transaction.
|
44
43
|
def setup_transaction(options = {})
|
45
|
-
|
44
|
+
logger.debug("[setup_transaction] options=#{options.inspect}")
|
46
45
|
|
47
46
|
validate_setup_transaction_params!(options)
|
48
47
|
|
49
|
-
|
48
|
+
normalize_consumer_iban!(options) if options[:payment_method] == PaymentMethod::SEPA_DIRECT_DEBIT
|
50
49
|
|
51
50
|
execute_request(:setup_transaction, options)
|
52
51
|
end
|
53
52
|
|
54
53
|
# Setup a recurrent transaction.
|
55
54
|
def recurrent_transaction(options = {})
|
56
|
-
|
55
|
+
logger.debug("[recurrent_transaction] options=#{options.inspect}")
|
57
56
|
|
58
57
|
validate_recurrent_transaction_params!(options)
|
59
58
|
|
@@ -62,14 +61,14 @@ module Buckaruby
|
|
62
61
|
|
63
62
|
# Retrieve the specification for setting up a transaction.
|
64
63
|
def specify_transaction(options = {})
|
65
|
-
|
64
|
+
logger.debug("[specify_transaction] options=#{options.inspect}")
|
66
65
|
|
67
66
|
execute_request(:specify_transaction, options)
|
68
67
|
end
|
69
68
|
|
70
69
|
# Checks if a transaction is refundable.
|
71
|
-
def
|
72
|
-
|
70
|
+
def refundable_transaction?(options = {})
|
71
|
+
logger.debug("[refundable_transaction?] options=#{options.inspect}")
|
73
72
|
|
74
73
|
validate_required_params!(options, :transaction_id)
|
75
74
|
|
@@ -79,7 +78,7 @@ module Buckaruby
|
|
79
78
|
|
80
79
|
# Refund a transaction.
|
81
80
|
def refund_transaction(options = {})
|
82
|
-
|
81
|
+
logger.debug("[refund_transaction] options=#{options.inspect}")
|
83
82
|
|
84
83
|
validate_refund_transaction_params!(options)
|
85
84
|
|
@@ -103,7 +102,7 @@ module Buckaruby
|
|
103
102
|
|
104
103
|
# Get transaction status.
|
105
104
|
def status(options = {})
|
106
|
-
|
105
|
+
logger.debug("[status] options=#{options.inspect}")
|
107
106
|
|
108
107
|
validate_status_params!(options)
|
109
108
|
|
@@ -111,8 +110,8 @@ module Buckaruby
|
|
111
110
|
end
|
112
111
|
|
113
112
|
# Checks if a transaction is cancellable.
|
114
|
-
def
|
115
|
-
|
113
|
+
def cancellable_transaction?(options = {})
|
114
|
+
logger.debug("[cancellable_transaction?] options=#{options.inspect}")
|
116
115
|
|
117
116
|
validate_required_params!(options, :transaction_id)
|
118
117
|
|
@@ -122,7 +121,7 @@ module Buckaruby
|
|
122
121
|
|
123
122
|
# Cancel a transaction.
|
124
123
|
def cancel_transaction(options = {})
|
125
|
-
|
124
|
+
logger.debug("[cancel_transaction] options=#{options.inspect}")
|
126
125
|
|
127
126
|
validate_required_params!(options, :transaction_id)
|
128
127
|
|
@@ -134,13 +133,13 @@ module Buckaruby
|
|
134
133
|
execute_request(:cancel, options)
|
135
134
|
end
|
136
135
|
|
137
|
-
#
|
138
|
-
def
|
139
|
-
if response.empty?
|
140
|
-
raise ArgumentError,
|
136
|
+
# Parse and verify the push response.
|
137
|
+
def parse_push(response)
|
138
|
+
if response.nil? || response.empty?
|
139
|
+
raise ArgumentError, 'No push parameters found'
|
141
140
|
end
|
142
141
|
|
143
|
-
|
142
|
+
PushResponse.new(response, config)
|
144
143
|
end
|
145
144
|
|
146
145
|
private
|
@@ -161,29 +160,23 @@ module Buckaruby
|
|
161
160
|
|
162
161
|
case options[:payment_method]
|
163
162
|
when PaymentMethod::IDEAL, PaymentMethod::IDEAL_PROCESSING
|
164
|
-
required_params << :
|
163
|
+
required_params << :issuer
|
165
164
|
when PaymentMethod::SEPA_DIRECT_DEBIT
|
166
|
-
required_params << [:
|
165
|
+
required_params << [:consumer_iban, :consumer_name]
|
167
166
|
end
|
168
167
|
|
169
168
|
validate_required_params!(options, required_params)
|
170
169
|
|
171
170
|
validate_amount!(options)
|
172
171
|
|
173
|
-
valid_payment_methods = [
|
174
|
-
PaymentMethod::IDEAL, PaymentMethod::IDEAL_PROCESSING, PaymentMethod::VISA, PaymentMethod::MASTER_CARD,
|
175
|
-
PaymentMethod::MAESTRO, PaymentMethod::AMERICAN_EXPRESS, PaymentMethod::SEPA_DIRECT_DEBIT,
|
176
|
-
PaymentMethod::PAYPAL, PaymentMethod::BANCONTACT_MISTER_CASH, PaymentMethod::SOFORT, PaymentMethod::GIROPAY
|
177
|
-
]
|
172
|
+
valid_payment_methods = PaymentMethod.all - [PaymentMethod::TRANSFER]
|
178
173
|
validate_payment_method!(options, valid_payment_methods)
|
179
|
-
|
180
|
-
validate_payment_issuer!(options)
|
181
174
|
end
|
182
175
|
|
183
176
|
# Validate amount of money, must be greater than 0.
|
184
177
|
def validate_amount!(options)
|
185
|
-
|
186
|
-
|
178
|
+
amount = Amount.new(options[:amount])
|
179
|
+
unless amount.positive?
|
187
180
|
raise ArgumentError, "Invalid amount: #{options[:amount]} (must be greater than 0)"
|
188
181
|
end
|
189
182
|
end
|
@@ -195,15 +188,6 @@ module Buckaruby
|
|
195
188
|
end
|
196
189
|
end
|
197
190
|
|
198
|
-
# Validate the payment issuer when iDEAL is selected as payment method.
|
199
|
-
def validate_payment_issuer!(options)
|
200
|
-
if options[:payment_method] == PaymentMethod::IDEAL || options[:payment_method] == PaymentMethod::IDEAL_PROCESSING
|
201
|
-
unless Ideal::ISSUERS.include?(options[:payment_issuer])
|
202
|
-
raise ArgumentError, "Invalid payment issuer: #{options[:payment_issuer]}"
|
203
|
-
end
|
204
|
-
end
|
205
|
-
end
|
206
|
-
|
207
191
|
# Validate params for recurrent transaction.
|
208
192
|
def validate_recurrent_transaction_params!(options)
|
209
193
|
required_params = [:amount, :payment_method, :invoicenumber, :transaction_id]
|
@@ -222,7 +206,7 @@ module Buckaruby
|
|
222
206
|
# Validate params for refund transaction.
|
223
207
|
def validate_refund_transaction_params!(options)
|
224
208
|
unless options[:transaction_id]
|
225
|
-
raise ArgumentError,
|
209
|
+
raise ArgumentError, 'Missing required parameter: transaction_id'
|
226
210
|
end
|
227
211
|
|
228
212
|
if options[:amount]
|
@@ -233,58 +217,66 @@ module Buckaruby
|
|
233
217
|
# Validate params for transaction status.
|
234
218
|
def validate_status_params!(options)
|
235
219
|
if !options[:transaction_id] && !options[:payment_id]
|
236
|
-
raise ArgumentError,
|
220
|
+
raise ArgumentError, 'Missing parameters: transaction_id or payment_id should be present'
|
237
221
|
end
|
238
222
|
end
|
239
223
|
|
240
224
|
# Strip spaces from the IBAN.
|
241
|
-
def
|
242
|
-
iban = options[:
|
225
|
+
def normalize_consumer_iban!(options)
|
226
|
+
iban = options[:consumer_iban].to_s.gsub(/\s/, '')
|
243
227
|
|
244
|
-
options[:
|
228
|
+
options[:consumer_iban] = iban
|
245
229
|
end
|
246
230
|
|
247
231
|
# Build and execute a request.
|
248
232
|
def execute_request(request_type, options = {})
|
249
233
|
request = build_request(request_type)
|
250
234
|
response = request.execute(options)
|
235
|
+
build_response(request_type, response)
|
236
|
+
end
|
251
237
|
|
238
|
+
# Factory method for constructing the request.
|
239
|
+
def build_request(request_type)
|
252
240
|
case request_type
|
253
241
|
when :setup_transaction
|
254
|
-
|
242
|
+
SetupTransactionRequest.new(config)
|
255
243
|
when :recurrent_transaction
|
256
|
-
|
244
|
+
RecurrentTransactionRequest.new(config)
|
257
245
|
when :specify_transaction
|
258
|
-
|
246
|
+
TransactionSpecificationRequest.new(config)
|
259
247
|
when :refund_transaction
|
260
|
-
|
248
|
+
RefundTransactionRequest.new(config)
|
261
249
|
when :refund_info
|
262
|
-
|
250
|
+
RefundInfoRequest.new(config)
|
263
251
|
when :status
|
264
|
-
|
252
|
+
StatusRequest.new(config)
|
265
253
|
when :cancel
|
266
|
-
|
254
|
+
CancelRequest.new(config)
|
267
255
|
end
|
268
256
|
end
|
269
257
|
|
270
|
-
# Factory method for constructing
|
271
|
-
def
|
258
|
+
# Factory method for constructing the response.
|
259
|
+
def build_response(request_type, response)
|
272
260
|
case request_type
|
273
261
|
when :setup_transaction
|
274
|
-
|
262
|
+
SetupTransactionResponse.new(response, config)
|
275
263
|
when :recurrent_transaction
|
276
|
-
|
264
|
+
RecurrentTransactionResponse.new(response, config)
|
277
265
|
when :specify_transaction
|
278
|
-
|
266
|
+
TransactionSpecificationResponse.new(response, config)
|
279
267
|
when :refund_transaction
|
280
|
-
|
268
|
+
RefundTransactionResponse.new(response, config)
|
281
269
|
when :refund_info
|
282
|
-
|
270
|
+
RefundInfoResponse.new(response, config)
|
283
271
|
when :status
|
284
|
-
|
272
|
+
StatusResponse.new(response, config)
|
285
273
|
when :cancel
|
286
|
-
|
274
|
+
CancelResponse.new(response, config)
|
287
275
|
end
|
288
276
|
end
|
277
|
+
|
278
|
+
def config
|
279
|
+
@config ||= Configuration.new(@options)
|
280
|
+
end
|
289
281
|
end
|
290
282
|
end
|
data/lib/buckaruby/operation.rb
CHANGED
@@ -2,10 +2,10 @@
|
|
2
2
|
|
3
3
|
module Buckaruby
|
4
4
|
module Operation
|
5
|
-
TRANSACTION_REQUEST =
|
6
|
-
TRANSACTION_STATUS =
|
7
|
-
TRANSACTION_REQUEST_SPECIFICATION =
|
8
|
-
REFUND_INFO =
|
9
|
-
CANCEL_TRANSACTION =
|
5
|
+
TRANSACTION_REQUEST = 'TransactionRequest'
|
6
|
+
TRANSACTION_STATUS = 'TransactionStatus'
|
7
|
+
TRANSACTION_REQUEST_SPECIFICATION = 'TransactionRequestSpecification'
|
8
|
+
REFUND_INFO = 'RefundInfo'
|
9
|
+
CANCEL_TRANSACTION = 'CancelTransaction'
|
10
10
|
end
|
11
11
|
end
|
@@ -1,21 +1,29 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Buckaruby
|
4
|
+
# Supported payment methods.
|
4
5
|
module PaymentMethod
|
5
|
-
IDEAL =
|
6
|
-
IDEAL_PROCESSING =
|
6
|
+
IDEAL = 'ideal' # iDEAL collecting
|
7
|
+
IDEAL_PROCESSING = 'idealprocessing' # iDEAL processing
|
7
8
|
|
8
|
-
SEPA_DIRECT_DEBIT =
|
9
|
-
PAYPAL =
|
10
|
-
|
11
|
-
SOFORT =
|
12
|
-
GIROPAY =
|
13
|
-
TRANSFER =
|
9
|
+
SEPA_DIRECT_DEBIT = 'sepadirectdebit'
|
10
|
+
PAYPAL = 'paypal'
|
11
|
+
BANCONTACT = 'bancontactmrcash'
|
12
|
+
SOFORT = 'sofortueberweisung'
|
13
|
+
GIROPAY = 'giropay'
|
14
|
+
TRANSFER = 'transfer'
|
14
15
|
|
15
16
|
# Credit cards
|
16
|
-
VISA =
|
17
|
-
MASTER_CARD =
|
18
|
-
MAESTRO =
|
19
|
-
AMERICAN_EXPRESS =
|
17
|
+
VISA = 'visa'
|
18
|
+
MASTER_CARD = 'mastercard'
|
19
|
+
MAESTRO = 'maestro'
|
20
|
+
AMERICAN_EXPRESS = 'amex'
|
21
|
+
|
22
|
+
# Returns an array of all payment method values.
|
23
|
+
def all
|
24
|
+
constants.map { |c| const_get(c) }
|
25
|
+
end
|
26
|
+
|
27
|
+
module_function :all
|
20
28
|
end
|
21
29
|
end
|
data/lib/buckaruby/request.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'bigdecimal'
|
4
|
-
require 'cgi'
|
5
3
|
require 'date'
|
6
4
|
require 'net/http'
|
7
5
|
require 'openssl'
|
@@ -12,20 +10,21 @@ module Buckaruby
|
|
12
10
|
class Request
|
13
11
|
def initialize(config)
|
14
12
|
@config = config
|
15
|
-
@logger = config.logger
|
16
13
|
end
|
17
14
|
|
18
15
|
def execute(options)
|
19
16
|
uri = URI.parse(@config.api_url)
|
20
|
-
uri.query =
|
17
|
+
uri.query = URI.encode_www_form(op: operation) if operation
|
21
18
|
|
22
|
-
|
23
|
-
|
24
|
-
# @logger.debug("[execute] response: #{response.inspect}")
|
19
|
+
post_buckaroo(uri, build_request_data(options))
|
20
|
+
end
|
25
21
|
|
26
|
-
|
22
|
+
# Returns the service operation for this request.
|
23
|
+
def operation
|
24
|
+
nil
|
27
25
|
end
|
28
26
|
|
27
|
+
# Returns the request parameters (to be implemented by subclasses).
|
29
28
|
def build_request_params(_options)
|
30
29
|
raise NotImplementedError
|
31
30
|
end
|
@@ -34,12 +33,12 @@ module Buckaruby
|
|
34
33
|
|
35
34
|
def post_buckaroo(uri, params)
|
36
35
|
http = Net::HTTP.new(uri.host, uri.port)
|
37
|
-
if uri.scheme ==
|
36
|
+
if uri.scheme == 'https'
|
38
37
|
http.use_ssl = true
|
39
38
|
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
40
39
|
end
|
41
40
|
|
42
|
-
raw_response = http.post(uri.request_uri,
|
41
|
+
raw_response = http.post(uri.request_uri, URI.encode_www_form(params))
|
43
42
|
|
44
43
|
unless raw_response.is_a?(Net::HTTPSuccess)
|
45
44
|
raise InvalidResponseException, raw_response
|
@@ -64,28 +63,24 @@ module Buckaruby
|
|
64
63
|
params[:add_buckaruby] = "Buckaruby #{Buckaruby::VERSION}"
|
65
64
|
|
66
65
|
# Sign the data with our secret key.
|
67
|
-
params[:brq_signature] = Signature.
|
66
|
+
params[:brq_signature] = Signature.generate(@config, params)
|
68
67
|
|
69
68
|
params
|
70
69
|
end
|
71
70
|
|
72
71
|
def build_custom_params(options)
|
73
|
-
options.
|
72
|
+
options.transform_keys { |key| :"cust_#{key}" }
|
74
73
|
end
|
75
74
|
|
76
75
|
def build_additional_params(options)
|
77
|
-
options.
|
78
|
-
end
|
79
|
-
|
80
|
-
def post_data(params)
|
81
|
-
params.map { |key, value| "#{key}=#{CGI.escape(value.to_s)}" }.join("&")
|
76
|
+
options.transform_keys { |key| :"add_#{key}" }
|
82
77
|
end
|
83
78
|
end
|
84
79
|
|
85
80
|
# Base class for a transaction request.
|
86
81
|
class TransactionRequest < Request
|
87
|
-
def
|
88
|
-
|
82
|
+
def operation
|
83
|
+
Operation::TRANSACTION_REQUEST
|
89
84
|
end
|
90
85
|
|
91
86
|
def build_request_params(options)
|
@@ -93,7 +88,7 @@ module Buckaruby
|
|
93
88
|
brq_payment_method: options[:payment_method],
|
94
89
|
brq_culture: options[:culture] || Language::DUTCH,
|
95
90
|
brq_currency: options[:currency] || Currency::EURO,
|
96
|
-
brq_amount:
|
91
|
+
brq_amount: Amount.new(options[:amount]).to_s,
|
97
92
|
brq_invoicenumber: options[:invoicenumber]
|
98
93
|
}
|
99
94
|
|
@@ -120,35 +115,35 @@ module Buckaruby
|
|
120
115
|
when PaymentMethod::IDEAL
|
121
116
|
params.merge!(
|
122
117
|
brq_service_ideal_action: Action::PAY,
|
123
|
-
brq_service_ideal_issuer: options[:
|
124
|
-
brq_service_ideal_version:
|
118
|
+
brq_service_ideal_issuer: options[:issuer],
|
119
|
+
brq_service_ideal_version: '2'
|
125
120
|
)
|
126
121
|
when PaymentMethod::IDEAL_PROCESSING
|
127
122
|
params.merge!(
|
128
123
|
brq_service_idealprocessing_action: Action::PAY,
|
129
|
-
brq_service_idealprocessing_issuer: options[:
|
130
|
-
brq_service_idealprocessing_version:
|
124
|
+
brq_service_idealprocessing_issuer: options[:issuer],
|
125
|
+
brq_service_idealprocessing_version: '2'
|
131
126
|
)
|
132
127
|
when PaymentMethod::SEPA_DIRECT_DEBIT
|
133
128
|
params.merge!(
|
134
129
|
brq_service_sepadirectdebit_action: Action::PAY,
|
135
|
-
brq_service_sepadirectdebit_customeriban: options[:
|
136
|
-
brq_service_sepadirectdebit_customeraccountname: options[:
|
130
|
+
brq_service_sepadirectdebit_customeriban: options[:consumer_iban],
|
131
|
+
brq_service_sepadirectdebit_customeraccountname: options[:consumer_name]
|
137
132
|
)
|
138
133
|
|
139
|
-
if options[:
|
140
|
-
params[:brq_service_sepadirectdebit_customerbic] = options[:
|
134
|
+
if options[:consumer_bic]
|
135
|
+
params[:brq_service_sepadirectdebit_customerbic] = options[:consumer_bic]
|
141
136
|
end
|
142
137
|
|
143
138
|
if options[:collect_date]
|
144
|
-
params[:brq_service_sepadirectdebit_collectdate] = options[:collect_date].strftime(
|
139
|
+
params[:brq_service_sepadirectdebit_collectdate] = options[:collect_date].strftime('%Y-%m-%d')
|
145
140
|
end
|
146
141
|
|
147
142
|
if options[:mandate_reference]
|
148
143
|
params.merge!(
|
149
|
-
brq_service_sepadirectdebit_action: [Action::PAY, Action::EXTRA_INFO].join(
|
144
|
+
brq_service_sepadirectdebit_action: [Action::PAY, Action::EXTRA_INFO].join(','),
|
150
145
|
brq_service_sepadirectdebit_mandatereference: options[:mandate_reference],
|
151
|
-
brq_service_sepadirectdebit_mandatedate: Date.today.strftime(
|
146
|
+
brq_service_sepadirectdebit_mandatedate: Date.today.strftime('%Y-%m-%d')
|
152
147
|
)
|
153
148
|
end
|
154
149
|
end
|
@@ -159,30 +154,6 @@ module Buckaruby
|
|
159
154
|
end
|
160
155
|
end
|
161
156
|
|
162
|
-
# Request for a creating a transaction specification.
|
163
|
-
class TransactionSpecificationRequest < Request
|
164
|
-
def execute(options)
|
165
|
-
super(options.merge(operation: Operation::TRANSACTION_REQUEST_SPECIFICATION))
|
166
|
-
end
|
167
|
-
|
168
|
-
def build_request_params(options)
|
169
|
-
params = {}
|
170
|
-
|
171
|
-
if options[:payment_method]
|
172
|
-
if options[:payment_method].respond_to?(:join)
|
173
|
-
params[:brq_services] = options[:payment_method].join(",")
|
174
|
-
else
|
175
|
-
params[:brq_services] = options[:payment_method]
|
176
|
-
end
|
177
|
-
end
|
178
|
-
|
179
|
-
params[:brq_latestversiononly] = "true"
|
180
|
-
params[:brq_culture] = options[:culture] || Language::DUTCH
|
181
|
-
|
182
|
-
params
|
183
|
-
end
|
184
|
-
end
|
185
|
-
|
186
157
|
# Request for a creating a recurrent transaction.
|
187
158
|
class RecurrentTransactionRequest < TransactionRequest
|
188
159
|
def build_transaction_request_params(options)
|
@@ -193,7 +164,7 @@ module Buckaruby
|
|
193
164
|
|
194
165
|
# Indicate that this is a request without user redirection to a webpage.
|
195
166
|
# This is needed to make recurrent payments working.
|
196
|
-
params[:brq_channel] =
|
167
|
+
params[:brq_channel] = 'backoffice'
|
197
168
|
|
198
169
|
params[:brq_originaltransaction] = options[:transaction_id]
|
199
170
|
|
@@ -201,16 +172,41 @@ module Buckaruby
|
|
201
172
|
end
|
202
173
|
end
|
203
174
|
|
175
|
+
# Request for a creating a transaction specification.
|
176
|
+
class TransactionSpecificationRequest < Request
|
177
|
+
def operation
|
178
|
+
Operation::TRANSACTION_REQUEST_SPECIFICATION
|
179
|
+
end
|
180
|
+
|
181
|
+
def build_request_params(options)
|
182
|
+
params = {}
|
183
|
+
|
184
|
+
if options[:payment_method]
|
185
|
+
params[:brq_services] =
|
186
|
+
if options[:payment_method].respond_to?(:join)
|
187
|
+
options[:payment_method].join(',')
|
188
|
+
else
|
189
|
+
options[:payment_method]
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
params[:brq_latestversiononly] = 'true'
|
194
|
+
params[:brq_culture] = options[:culture] || Language::DUTCH
|
195
|
+
|
196
|
+
params
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
204
200
|
# Request for a creating a refund.
|
205
201
|
class RefundTransactionRequest < Request
|
206
|
-
def
|
207
|
-
|
202
|
+
def operation
|
203
|
+
Operation::TRANSACTION_REQUEST
|
208
204
|
end
|
209
205
|
|
210
206
|
def build_request_params(options)
|
211
207
|
params = {
|
212
208
|
brq_payment_method: options[:payment_method],
|
213
|
-
brq_amount_credit:
|
209
|
+
brq_amount_credit: Amount.new(options[:amount]).to_s,
|
214
210
|
brq_currency: options[:currency] || Currency::EURO,
|
215
211
|
brq_invoicenumber: options[:invoicenumber]
|
216
212
|
}
|
@@ -226,8 +222,8 @@ module Buckaruby
|
|
226
222
|
|
227
223
|
# Request for retrieving refund information.
|
228
224
|
class RefundInfoRequest < Request
|
229
|
-
def
|
230
|
-
|
225
|
+
def operation
|
226
|
+
Operation::REFUND_INFO
|
231
227
|
end
|
232
228
|
|
233
229
|
def build_request_params(options)
|
@@ -241,8 +237,8 @@ module Buckaruby
|
|
241
237
|
|
242
238
|
# Request for getting the status of a transaction.
|
243
239
|
class StatusRequest < Request
|
244
|
-
def
|
245
|
-
|
240
|
+
def operation
|
241
|
+
Operation::TRANSACTION_STATUS
|
246
242
|
end
|
247
243
|
|
248
244
|
def build_request_params(options)
|
@@ -257,14 +253,12 @@ module Buckaruby
|
|
257
253
|
|
258
254
|
# Request for cancelling a transaction.
|
259
255
|
class CancelRequest < Request
|
260
|
-
def
|
261
|
-
|
256
|
+
def operation
|
257
|
+
Operation::CANCEL_TRANSACTION
|
262
258
|
end
|
263
259
|
|
264
260
|
def build_request_params(options)
|
265
|
-
|
266
|
-
|
267
|
-
params
|
261
|
+
{ brq_transaction: options[:transaction_id] }
|
268
262
|
end
|
269
263
|
end
|
270
264
|
end
|