solidus_six_saferpay 0.2.0 → 0.3.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.
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