solidus_six_saferpay 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/solidus_six_saferpay/saferpay_payment.js +4 -1
  3. data/app/controllers/spree/solidus_six_saferpay/checkout_controller.rb +93 -16
  4. data/app/controllers/spree/solidus_six_saferpay/transaction/checkout_controller.rb +1 -1
  5. data/app/models/spree/payment_method/saferpay_payment_method.rb +1 -1
  6. data/app/models/spree/payment_method/saferpay_payment_page.rb +2 -2
  7. data/app/models/spree/payment_method/saferpay_transaction.rb +2 -2
  8. data/app/services/spree/solidus_six_saferpay/cancel_authorized_payment.rb +33 -0
  9. data/app/services/spree/solidus_six_saferpay/initialize_payment.rb +0 -1
  10. data/app/services/spree/solidus_six_saferpay/initialize_transaction.rb +0 -1
  11. data/app/services/spree/solidus_six_saferpay/inquire_payment.rb +26 -1
  12. data/app/views/spree/checkout/payment/_saferpay_payment.html.erb +2 -2
  13. data/app/views/spree/solidus_six_saferpay/checkout/{iframe_breakout_redirect.html.erb → iframe_breakout_redirect.erb} +1 -1
  14. data/config/locales/de.yml +3 -0
  15. data/config/locales/en.yml +3 -0
  16. data/config/locales/fr.yml +3 -0
  17. data/config/routes.rb +2 -2
  18. data/lib/solidus_six_saferpay/configuration.rb +2 -0
  19. data/lib/solidus_six_saferpay/gateway.rb +6 -7
  20. data/lib/solidus_six_saferpay/version.rb +1 -1
  21. data/spec/controllers/spree/solidus_six_saferpay/payment_page/checkout_controller_spec.rb +8 -198
  22. data/spec/controllers/spree/solidus_six_saferpay/transaction/checkout_controller_spec.rb +8 -221
  23. data/spec/services/spree/solidus_six_saferpay/assert_payment_page_spec.rb +2 -128
  24. data/spec/services/spree/solidus_six_saferpay/authorize_transaction_spec.rb +3 -127
  25. data/spec/services/spree/solidus_six_saferpay/cancel_authorized_payment_spec.rb +58 -0
  26. data/spec/services/spree/solidus_six_saferpay/initialize_payment_page_spec.rb +0 -2
  27. data/spec/services/spree/solidus_six_saferpay/initialize_transaction_spec.rb +0 -1
  28. data/spec/services/spree/solidus_six_saferpay/inquire_payment_page_payment_spec.rb +2 -98
  29. data/spec/services/spree/solidus_six_saferpay/inquire_transaction_payment_spec.rb +2 -98
  30. data/spec/services/spree/solidus_six_saferpay/process_payment_page_payment_spec.rb +1 -206
  31. data/spec/services/spree/solidus_six_saferpay/process_transaction_payment_spec.rb +1 -200
  32. data/spec/support/shared_examples/authorize_payment.rb +132 -0
  33. data/spec/support/shared_examples/checkout_controller.rb +342 -0
  34. data/spec/support/shared_examples/inquire_payment.rb +118 -0
  35. data/spec/support/shared_examples/process_authorized_payment.rb +202 -0
  36. metadata +14 -6
  37. data/app/services/spree/solidus_six_saferpay/inquire_transaction.rb +0 -7
  38. data/spec/controllers/spree/solidus_six_saferpay/checkout_controller_spec.rb +0 -41
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5e228b5766fec776fecd596f1f9316553ed3bc9d48c4ada1adfebb470da63c7c
4
- data.tar.gz: 1367d382455ade917798c68ced6fd717e71dafd2caeb2cefccde0d58517903e7
3
+ metadata.gz: 6a50764caa3e856291be76ef3516ec267c44b056b8824aad3970cb7ba227454e
4
+ data.tar.gz: d0e1a19041a511d2485415d32efba781ff2558a0d75088e32f1fc20b90ece359
5
5
  SHA512:
6
- metadata.gz: 181ec3d7959392e3b7c0a100be584091507e74cdab7fb76efe19eaa406ae36ec4bc0777b8927c54d3e41518b52808f0d26e3202a35d703aaf63eced9d3c38199
7
- data.tar.gz: 71c01086a0e866e1a0aa48e71304c057ff662cc268db3e961ef9761eb3182f7282c28ccdd2acfd1f7f827cc3939eb64d41921cfbb3f5f590066b2e572da3c5b6
6
+ metadata.gz: c5e7411ccb2307f1ddd9f0cb4b94a38e8e0ec5702a7a78387dd35593197febb77a684067e6b6e879babc34611de359ec3b38fd79ecc9ac34995ffdf7dbc14b3a
7
+ data.tar.gz: cd0b224c254e21bb70a3c17576474ab46b2e5b4f8d9ecc9e8a90c3c28e6a1866bdbe596254e6f377bd332954b5a9e9e35a02c60916dce7fc78149abcd1db86e3
@@ -18,7 +18,10 @@ let SaferpayPayment = {
18
18
  },
19
19
 
20
20
  error: function(xhr) {
21
- console.error(xhr.responseText);
21
+ // We have no other option for displaying this message, so to inform
22
+ // the user we must alert
23
+ alert(xhr.responseJSON.errors);
24
+ window.location.replace(xhr.responseJSON.redirect_url);
22
25
  return false;
23
26
  },
24
27
  })
@@ -3,9 +3,25 @@ module Spree
3
3
  class CheckoutController < StoreController
4
4
 
5
5
  def init
6
- @order = current_order
7
- redirect_to(spree.cart_path) && return unless @order
6
+ order_number = params[:order_number]
7
+ @order = Spree::Order.find_by(number: order_number)
8
8
 
9
+ # We must make sure that the order for which the user requests a
10
+ # payment is still their `current_order`.
11
+ # This can be false if the user tries to add something to the cart
12
+ # after getting to the payment checkout step, and then switches back to
13
+ # the payment step and starts the payment process by selecting a
14
+ # payment method.
15
+ # In that case, we redirect to the checkout path so the user needs to
16
+ # go through the checkout process again to ensure that the real
17
+ # `current_order` contains all necessary information.
18
+ if @order.nil? || @order != current_order
19
+ render json: {
20
+ redirect_url: spree.cart_path,
21
+ errors: t('.order_was_modified_after_confirmation')
22
+ }, status: 422
23
+ return
24
+ end
9
25
 
10
26
  payment_method = Spree::PaymentMethod.find(params[:payment_method_id])
11
27
  initialized_payment = initialize_payment(@order, payment_method)
@@ -14,7 +30,10 @@ module Spree
14
30
  redirect_url = initialized_payment.redirect_url
15
31
  render json: { redirect_url: redirect_url }
16
32
  else
17
- render json: { errors: t('.checkout_not_initialized') }, status: 422
33
+ render json: {
34
+ redirect_url: spree.cart_path,
35
+ errors: t('.checkout_not_initialized')
36
+ }, status: 422
18
37
  end
19
38
  end
20
39
 
@@ -23,6 +42,20 @@ module Spree
23
42
  @order = Spree::Order.find_by(number: order_number)
24
43
 
25
44
  if @order.nil?
45
+ handle_order_not_found(order_number)
46
+
47
+ flash[:error] = t('.error_while_processing_payment')
48
+ @redirect_path = spree.cart_path
49
+ render :iframe_breakout_redirect, layout: false
50
+ return
51
+ end
52
+
53
+ saferpay_payment = Spree::SixSaferpayPayment.where(order_id: @order.id).order(:created_at).last
54
+
55
+ if saferpay_payment.nil?
56
+ handle_payment_not_found(@order)
57
+
58
+ flash[:error] = t('.error_while_processing_payment')
26
59
  @redirect_path = spree.cart_path
27
60
  render :iframe_breakout_redirect, layout: false
28
61
  return
@@ -31,17 +64,14 @@ module Spree
31
64
  # ensure that completed orders don't try to reprocess the
32
65
  # authorization. This could happen if a user presses the back button
33
66
  # after completing an order.
67
+ # There is no error handling because it should look like you are simply
68
+ # redirected to the cart page.
34
69
  if @order.completed?
35
70
  @redirect_path = spree.cart_path
36
71
  render :iframe_breakout_redirect, layout: false
37
72
  return
38
73
  end
39
74
 
40
- saferpay_payment = Spree::SixSaferpayPayment.where(order_id: @order.id).order(:created_at).last
41
-
42
- if saferpay_payment.nil?
43
- raise Spree::Core::GatewayError, t('.saferpay_payment_not_found')
44
- end
45
75
 
46
76
  # NOTE: PaymentPage payments are authorized directly. Instead, we
47
77
  # perform an ASSERT here to gather the necessary details.
@@ -77,6 +107,9 @@ module Spree
77
107
  @order = Spree::Order.find_by(number: order_number)
78
108
 
79
109
  if @order.nil?
110
+ handle_order_not_found(order_number)
111
+
112
+ flash[:error] = t('.error_while_processing_payment')
80
113
  @redirect_path = spree.cart_path
81
114
  render :iframe_breakout_redirect, layout: false
82
115
  return
@@ -84,15 +117,19 @@ module Spree
84
117
 
85
118
  saferpay_payment = Spree::SixSaferpayPayment.where(order_id: @order.id).order(:created_at).last
86
119
 
120
+ if saferpay_payment.nil?
121
+ handle_payment_not_found(@order)
87
122
 
88
- if saferpay_payment
89
- payment_inquiry = inquire_payment(saferpay_payment)
90
- flash[:error] = payment_inquiry.user_message
91
- else
92
- user_message = I18n.t(:general_error, scope: [:solidus_six_saferpay, :errors])
93
- flash[:error] = user_message
123
+ flash[:error] = t('.error_while_processing_payment')
124
+ @redirect_path = spree.cart_path
125
+ render :iframe_breakout_redirect, layout: false
126
+ return
94
127
  end
95
128
 
129
+
130
+ payment_inquiry = inquire_payment(saferpay_payment)
131
+ flash[:error] = payment_inquiry.user_message
132
+
96
133
  @redirect_path = order_checkout_path(:payment)
97
134
  render :iframe_breakout_redirect, layout: false
98
135
  end
@@ -115,13 +152,53 @@ module Spree
115
152
  raise NotImplementedError, "Must be implemented in PaymentPageCheckoutController or TransactionCheckoutController"
116
153
  end
117
154
 
155
+ # Allows overriding of success behaviour in host application by setting
156
+ # SolidusSixSaferpay.config.payment_processing_order_not_found_handler
157
+ #
158
+ # If not overridden, it will call the configured error handler without actually raising any errors
159
+ #
160
+ # Example
161
+ # config.payment_processing_order_not_found_handler = Proc.new do |context, order_number|
162
+ # puts "No solidus order with this number: #{order_number}!"
163
+ # end
164
+ #
165
+ def handle_order_not_found(order_number)
166
+ if order_not_found_handler = ::SolidusSixSaferpay.config.payment_processing_order_not_found_handler.presence
167
+ order_not_found_handler.call(self, order_number)
168
+ else
169
+ ::SolidusSixSaferpay::ErrorHandler.handle(
170
+ StandardError.new("No solidus order could be found for number #{order_number}"),
171
+ level: :error
172
+ )
173
+ end
174
+ end
175
+
176
+ # Allows overriding of success behaviour in host application by setting
177
+ # SolidusSixSaferpay.config.payment_processing_payment_not_found_handler
178
+ #
179
+ # If not overridden, it will call the configured error handler without actually raising any errors
180
+ #
181
+ # Example
182
+ # config.payment_processing_payment_not_found_handler = Proc.new { |context, order| puts "No saferpay payment found for #{order}!" }
183
+ #
184
+ def handle_payment_not_found(order)
185
+ if payment_not_found_handler = ::SolidusSixSaferpay.config.payment_processing_payment_not_found_handler.presence
186
+ payment_not_found_handler.call(self, order)
187
+ else
188
+ ::SolidusSixSaferpay::ErrorHandler.handle(
189
+ StandardError.new("No Saferpay Payment found for order #{order.number}"),
190
+ level: :error
191
+ )
192
+ end
193
+ end
194
+
118
195
  # Allows overriding of success behaviour in host application by setting
119
196
  # SolidusSixSaferpay.config.payment_processing_success_handler
120
197
  #
121
- # By default, it will ensure that the order state is no longer "payment"
198
+ # If not overridden, it will ensure that the order state is no longer "payment"
122
199
  #
123
200
  # Example
124
- # config.payment_processing_success_handler = Proc.new { |order| puts "Order #{order} has been successfully paid!" }
201
+ # config.payment_processing_success_handler = Proc.new { |context, order| puts "Order #{order} has been successfully paid!" }
125
202
  #
126
203
  def handle_payment_processing_success
127
204
  if success_handler = ::SolidusSixSaferpay.config.payment_processing_success_handler.presence
@@ -1,7 +1,7 @@
1
1
  module Spree
2
2
  module SolidusSixSaferpay
3
- # explicit parent must be stated, otherwise Spree::CheckoutController has precendence
4
3
  module Transaction
4
+ # explicit parent must be stated, otherwise Spree::CheckoutController has precendence
5
5
  class CheckoutController < SolidusSixSaferpay::CheckoutController
6
6
 
7
7
  private
@@ -39,7 +39,7 @@ module Spree
39
39
  'saferpay_payment'
40
40
  end
41
41
 
42
- def init_path
42
+ def init_path(order)
43
43
  raise NotImplementedError, "Must be implemented in SaferpayPaymentPage or SaferpayTransaction"
44
44
  end
45
45
  end
@@ -6,8 +6,8 @@ module Spree
6
6
  ::SolidusSixSaferpay::PaymentPageGateway
7
7
  end
8
8
 
9
- def init_path
10
- url_helpers.solidus_six_saferpay_payment_page_init_path
9
+ def init_path(order)
10
+ url_helpers.solidus_six_saferpay_payment_page_init_path(order.number)
11
11
  end
12
12
  end
13
13
  end
@@ -5,8 +5,8 @@ module Spree
5
5
  ::SolidusSixSaferpay::TransactionGateway
6
6
  end
7
7
 
8
- def init_path
9
- url_helpers.solidus_six_saferpay_transaction_init_path
8
+ def init_path(order)
9
+ url_helpers.solidus_six_saferpay_transaction_init_path(order.number)
10
10
  end
11
11
  end
12
12
  end
@@ -0,0 +1,33 @@
1
+ module Spree
2
+ module SolidusSixSaferpay
3
+ class CancelAuthorizedPayment
4
+
5
+ attr_reader :saferpay_payment
6
+
7
+ def self.call(saferpay_payment)
8
+ new(saferpay_payment).call
9
+ end
10
+
11
+ def initialize(saferpay_payment)
12
+ @saferpay_payment = saferpay_payment
13
+ end
14
+
15
+ def call
16
+ if transaction_id = saferpay_payment.transaction_id
17
+ gateway.void(saferpay_payment.transaction_id)
18
+ else
19
+ ::SolidusSixSaferpay::ErrorHandler.handle(
20
+ ::SolidusSixSaferpay::InvalidSaferpayPayment.new(
21
+ details: "Can not cancel payment #{saferpay_payment.id} because it has no transaction ID.")
22
+ )
23
+ end
24
+ end
25
+
26
+ private
27
+
28
+ def gateway
29
+ ::SolidusSixSaferpay::Gateway.new
30
+ end
31
+ end
32
+ end
33
+ end
@@ -1,6 +1,5 @@
1
1
  module Spree
2
2
  module SolidusSixSaferpay
3
-
4
3
  class InitializePayment
5
4
 
6
5
  attr_reader :order, :payment_method, :redirect_url, :success
@@ -1,6 +1,5 @@
1
1
  module Spree
2
2
  module SolidusSixSaferpay
3
-
4
3
  class InitializeTransaction < InitializePayment
5
4
  include UseTransactionGateway
6
5
 
@@ -19,7 +19,7 @@ module Spree
19
19
  inquiry = gateway.inquire(saferpay_payment)
20
20
 
21
21
  if inquiry.success?
22
- saferpay_payment.update_attributes(response_hash: inquiry.api_response.to_h)
22
+ saferpay_payment.update_attributes(saferpay_payment_attributes(inquiry.api_response))
23
23
  else
24
24
  saferpay_payment.update_attributes(response_hash: saferpay_payment.response_hash.merge(error: "#{inquiry.error_name}"))
25
25
  general_error = I18n.t(:general_error, scope: [:solidus_six_saferpay, :errors])
@@ -39,6 +39,31 @@ module Spree
39
39
  def gateway
40
40
  raise NotImplementedError, "Must be implemented in AssertPaymentPage or AuthorizeTransaction with UsePaymentPageGateway or UseTransactionGateway"
41
41
  end
42
+
43
+ private
44
+
45
+ def saferpay_payment_attributes(saferpay_response)
46
+ payment_means = saferpay_response.payment_means
47
+ brand = payment_means.brand
48
+ card = payment_means.card
49
+
50
+ attributes = {
51
+ transaction_id: saferpay_response.transaction.id,
52
+ transaction_status: saferpay_response.transaction.status,
53
+ transaction_date: DateTime.parse(saferpay_response.transaction.date),
54
+ six_transaction_reference: saferpay_response.transaction.six_transaction_reference,
55
+ display_text: saferpay_response.payment_means.display_text,
56
+ response_hash: saferpay_response.to_h
57
+ }
58
+
59
+ if card
60
+ attributes[:masked_number] = card.masked_number
61
+ attributes[:expiration_year] = card.exp_year
62
+ attributes[:expiration_month] = card.exp_month
63
+ end
64
+
65
+ attributes
66
+ end
42
67
  end
43
68
  end
44
69
  end
@@ -3,10 +3,10 @@
3
3
  <iframe class="saferpay-iframe" width='100%' height='550px' id="<%= payment_container_id %>" src="" frameborder="0">
4
4
  </iframe>
5
5
  <script charset="utf-8">
6
- SaferpayPayment.registerIframePaymentMethod({id: "<%= payment_method.id %>", initUrl: "<%= payment_method.init_path %>", containerId: "#<%= payment_container_id %>"})
6
+ SaferpayPayment.registerIframePaymentMethod({id: "<%= payment_method.id %>", initUrl: "<%= payment_method.init_path(@order) %>", containerId: "#<%= payment_container_id %>"})
7
7
  </script>
8
8
  <% else %>
9
9
  <script charset="utf-8">
10
- SaferpayPayment.registerExternalRedirectPaymentMethod({id: "<%= payment_method.id %>", initUrl: "<%= payment_method.init_path %>"})
10
+ SaferpayPayment.registerExternalRedirectPaymentMethod({id: "<%= payment_method.id %>", initUrl: "<%= payment_method.init_path(@order) %>"})
11
11
  </script>
12
12
  <% end %>
@@ -1,7 +1,7 @@
1
1
  <html>
2
2
  <body>
3
3
  <script type='text/javascript' charset='utf-8'>
4
- window.parent.document.location.href = "<%= @redirect_path %>"
4
+ window.parent.document.location.replace("<%= @redirect_path %>");
5
5
  </script>
6
6
  </body>
7
7
  </html>
@@ -5,7 +5,9 @@ de:
5
5
  checkout: &checkout
6
6
  init:
7
7
  checkout_not_initialized: Zahlung konnte nicht gestartet werden.
8
+ order_was_modified_after_confirmation: Bestellung wurde nach der Bestätigung verändert. Bitte starten Sie den Zahlungsvorgang erneut.
8
9
  success:
10
+ error_while_processing_payment: Beim Verarbeiten der Bezahlung ist ein Fehler aufgetreten. Bitte starten Sie den Zahlungsvorgang erneut.
9
11
  saferpay_payment_not_found: Six Saferpay Zahlung kann nicht gefunden werden.
10
12
  fail:
11
13
  payment_failed: Die Zahlung konnte nicht abgeschlossen werden.
@@ -19,6 +21,7 @@ de:
19
21
  errors:
20
22
  general_error: Bezahlungsfehler
21
23
  liability_shift_not_granted: Haftungsumkehr wurde abgelehnt
24
+ saferpay_payment_not_found: Saferpay Payment konnte nicht gefunden werden
22
25
  six_saferpay:
23
26
  error_names:
24
27
  ACTION_NOT_SUPPORTED: Die angeforderte Aktion wird im Kontext der Aktion nicht unterstützt un kann mit den Anforderungsdaten nicht ausgeführt werden.
@@ -5,7 +5,9 @@ en:
5
5
  checkout: &checkout
6
6
  init:
7
7
  checkout_not_initialized: Payment could not be initialized.
8
+ order_was_modified_after_confirmation: Order was modified after confirmation. Please restart the checkout process.
8
9
  success:
10
+ error_while_processing_payment: An error occurred while processing the payment. Please restart the checkout process.
9
11
  saferpay_payment_not_found: Six Saferpay payment can not be found.
10
12
  fail:
11
13
  payment_failed: The payment could not be completed.
@@ -19,6 +21,7 @@ en:
19
21
  errors:
20
22
  general_error: Payment Error
21
23
  liability_shift_not_granted: Liability Shift was rejected
24
+ saferpay_payment_not_found: Saferpay Payment could not be found
22
25
  six_saferpay:
23
26
  error_names:
24
27
  ACTION_NOT_SUPPORTED: The requested action is not supported in the given context or the action can't be executed with the request data.
@@ -5,7 +5,9 @@ fr:
5
5
  checkout: &checkout
6
6
  init:
7
7
  checkout_not_initialized: Le paiement n'a pas pu être initialisé.
8
+ order_was_modified_after_confirmation: La commande a été modifiée après confirmation. Veuillez redémarrer le processus de paiement.
8
9
  success:
10
+ error_while_processing_payment: Une erreur s'est produite lors du traitement du paiement. Veuillez redémarrer le processus de paiement.
9
11
  saferpay_payment_not_found: Paiement Six Saferpay est introuvable.
10
12
  fail:
11
13
  payment_failed: Le paiement n'a pas pu être complété.
@@ -18,6 +20,7 @@ fr:
18
20
  solidus_six_saferpay:
19
21
  errors:
20
22
  liability_shift_not_granted: Le transfert de responsabilité a été rejeté
23
+ saferpay_payment_not_found: Saferpay Payment est introuvable
21
24
  six_saferpay:
22
25
  error_names:
23
26
  ACTION_NOT_SUPPORTED: l'action demandé n'es pas prise en charge dans le contexte de l'action et ne peut pas être exécutée avec les données de la demande.
@@ -3,13 +3,13 @@
3
3
  Spree::Core::Engine.routes.draw do
4
4
  namespace :solidus_six_saferpay do
5
5
  namespace :payment_page do
6
- get :init, controller: :checkout, defaults: { format: :json }
6
+ get 'init/:order_number', to: 'checkout#init', as: :init, defaults: { format: :json }
7
7
  get 'success/:order_number', to: 'checkout#success', as: :success
8
8
  get 'fail/:order_number', to: 'checkout#fail', as: :fail
9
9
  end
10
10
 
11
11
  namespace :transaction do
12
- get :init, controller: :checkout, defaults: { format: :json }
12
+ get 'init/:order_number', to: 'checkout#init', as: :init, defaults: { format: :json }
13
13
  get 'success/:order_number', to: 'checkout#success', as: :success
14
14
  get 'fail/:order_number', to: 'checkout#fail', as: :fail
15
15
  end
@@ -3,6 +3,8 @@ module SolidusSixSaferpay
3
3
  include ActiveSupport::Configurable
4
4
 
5
5
 
6
+ config_accessor(:payment_processing_order_not_found_handler)
7
+ config_accessor(:payment_processing_payment_not_found_handler)
6
8
  config_accessor(:payment_processing_success_handler)
7
9
  config_accessor(:error_handlers) { [] }
8
10
  end
@@ -40,7 +40,7 @@ module SolidusSixSaferpay
40
40
  capture(amount, saferpay_payment.transaction_id, options)
41
41
  end
42
42
 
43
- def capture(amount, transaction_id, options={})
43
+ def capture(_amount, transaction_id, options={})
44
44
  transaction_reference = SixSaferpay::TransactionReference.new(transaction_id: transaction_id)
45
45
  payment_capture = SixSaferpay::SixTransaction::Capture.new(transaction_reference: transaction_reference)
46
46
 
@@ -79,15 +79,14 @@ module SolidusSixSaferpay
79
79
  end
80
80
 
81
81
  # aliased to #refund for compatibility with solidus internals
82
- def credit(amount, transaction_id, options = {})
83
- refund(amount, transaction_id, options)
82
+ def credit(amount_cents, transaction_id, options = {})
83
+ refund(amount_cents, transaction_id, options)
84
84
  end
85
85
 
86
- def refund(amount, transaction_id, options = {})
86
+ def refund(amount_cents, transaction_id, options = {})
87
87
  payment = Spree::Payment.find_by!(response_code: transaction_id)
88
- refund_amount = Spree::Money.new(amount, currency: payment.currency)
89
88
 
90
- saferpay_amount = SixSaferpay::Amount.new(value: refund_amount.cents, currency_code: payment.currency)
89
+ saferpay_amount = SixSaferpay::Amount.new(value: amount_cents, currency_code: payment.currency)
91
90
  saferpay_refund = SixSaferpay::Refund.new(amount: saferpay_amount, order_id: payment.order.number)
92
91
  capture_reference = SixSaferpay::CaptureReference.new(capture_id: payment.transaction_id)
93
92
 
@@ -96,7 +95,7 @@ module SolidusSixSaferpay
96
95
  if refund_response = SixSaferpay::Client.post(payment_refund)
97
96
 
98
97
  # actually capture the refund
99
- capture(amount, refund_response.transaction.id, options)
98
+ capture(amount_cents, refund_response.transaction.id, options)
100
99
  end
101
100
 
102
101
  rescue SixSaferpay::Error => e