Module: Spree::Payment::Processing Private
- Included in:
- Spree::Payment
- Defined in:
- app/models/spree/payment/processing.rb
This module is part of a private API. You should avoid using this module if possible, as it may be removed or be changed in the future.
Instance Method Summary collapse
- #authorize! ⇒ Object private
- #cancel! ⇒ Object private
-
#capture!(amount = nil) ⇒ Object
private
Takes the amount in cents to capture.
- #gateway_options ⇒ Object private
-
#process! ⇒ Object
private
“process!” means: - Do nothing when: - There is no payment method - The payment method does not require a source - The payment is in the “processing” state - ‘auto_capture?’ is false and the payment is already authorized.
-
#purchase! ⇒ Object
private
Captures the entire amount of a payment.
- #void_transaction! ⇒ Object private
Instance Method Details
#authorize! ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
35 36 37 |
# File 'app/models/spree/payment/processing.rb', line 35 def handle_payment_preconditions { } end |
#cancel! ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
81 82 83 84 |
# File 'app/models/spree/payment/processing.rb', line 81 def cancel! response = payment_method.cancel(response_code) handle_void_response(response) end |
#capture!(amount = nil) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Takes the amount in cents to capture. Can be used to capture partial amounts of a payment, and will create a new pending payment record for the remaining amount to capture later.
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'app/models/spree/payment/processing.rb', line 47 def capture!(amount = nil) return true if completed? amount ||= money.money.cents started_processing! protect_from_connection_error do # Standard ActiveMerchant capture usage response = payment_method.capture( amount, response_code, ) money = ::Money.new(amount, currency) capture_events.create!(amount: money.to_d) update_attributes!(amount: captured_amount) handle_response(response, :complete, :failure) end end |
#gateway_options ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'app/models/spree/payment/processing.rb', line 86 def order.reload = { email: order.email, customer: order.email, customer_id: order.user_id, ip: order.last_ip_address, # Need to pass in a unique identifier here to make some # payment gateways happy. # # For more information, please see Spree::Payment#set_unique_identifier order_id: gateway_order_id, # The originator is passed to options used by the payment method. # One example of a place that it is used is in: # app/models/spree/payment_method/store_credit.rb originator: self } [:shipping] = order.ship_total * 100 [:tax] = order.additional_tax_total * 100 [:subtotal] = order.item_total * 100 [:discount] = order.promo_total * 100 [:currency] = currency bill_address = source.try(:address) bill_address ||= order.bill_address [:billing_address] = bill_address.try!(:active_merchant_hash) [:shipping_address] = order.ship_address.try!(:active_merchant_hash) end |
#process! ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
“process!” means:
- Do nothing when:
- There is no payment method
- The payment method does not require a source
- The payment is in the "processing" state
- 'auto_capture?' is false and the payment is already .
- Raise an exception when:
- The source is missing or invalid
- The payment is in a state that cannot transition to 'processing'
(failed/void/invalid states). Note: 'completed' can transition to
'processing' and thus calling #process! on a completed Payment
will attempt to re-/re-purchase the payment.
- Otherwise:
- If 'auto_capture?' is true:
- Call #purchase on the payment gateway. (i.e. authorize+capture)
even if the payment is already completed.
- Else:
- Call #authorize on the payment gateway even if the payment is
already completed.
23 24 25 26 27 28 29 30 31 32 33 |
# File 'app/models/spree/payment/processing.rb', line 23 def process! return if payment_method.nil? if payment_method.auto_capture? purchase! elsif pending? # do nothing. already authorized. else end end |
#purchase! ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Captures the entire amount of a payment.
40 41 42 |
# File 'app/models/spree/payment/processing.rb', line 40 def purchase! handle_payment_preconditions { process_purchase } end |
#void_transaction! ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'app/models/spree/payment/processing.rb', line 65 def void_transaction! return true if void? protect_from_connection_error do if payment_method.payment_profiles_supported? # Gateways supporting payment profiles will need access to credit card object because this stores the payment profile information # so supply the authorization itself as well as the credit card, rather than just the authorization code response = payment_method.void(response_code, source, ) else # Standard ActiveMerchant void usage response = payment_method.void(response_code, ) end handle_void_response(response) end end |