Module: SpreeAdyen::Gateway::PaymentSessions
- Extended by:
- ActiveSupport::Concern
- Included in:
- SpreeAdyen::Gateway
- Defined in:
- app/models/spree_adyen/gateway/payment_sessions.rb
Instance Method Summary collapse
-
#complete_payment_session(payment_session:, params: {}) ⇒ Object
Completes a payment session by checking the session result with Adyen, creating the Payment record, and transitioning the session accordingly.
-
#create_payment_session(order:, amount: nil, external_data: {}) ⇒ Spree::PaymentSessions::Adyen
Creates a new Adyen payment session via the Adyen Sessions API and persists a Spree::PaymentSessions::Adyen record.
- #payment_session_class ⇒ Object
- #session_required? ⇒ Boolean
-
#update_payment_session(payment_session:, amount: nil, external_data: {}) ⇒ Object
Updates an existing payment session amount.
Instance Method Details
#complete_payment_session(payment_session:, params: {}) ⇒ Object
Completes a payment session by checking the session result with Adyen, creating the Payment record, and transitioning the session accordingly.
Does NOT complete the order — that is handled by Carts::Complete (called by the storefront or by the webhook handler).
70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'app/models/spree_adyen/gateway/payment_sessions.rb', line 70 def complete_payment_session(payment_session:, params: {}) session_result = params[:session_result] || params['session_result'] if session_result.blank? external_data = params[:external_data] || params['external_data'] || {} redirect_result = external_data[:redirect_result] || external_data['redirect_result'] raise Spree::Core::GatewayError, 'session_result or redirect_result is required' if redirect_result.blank? return complete_payment_session_from_redirect(payment_session, redirect_result) end complete_payment_session_from_result(payment_session, session_result) end |
#create_payment_session(order:, amount: nil, external_data: {}) ⇒ Spree::PaymentSessions::Adyen
Creates a new Adyen payment session via the Adyen Sessions API and persists a Spree::PaymentSessions::Adyen record.
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'app/models/spree_adyen/gateway/payment_sessions.rb', line 21 def create_payment_session(order:, amount: nil, external_data: {}) total = amount.presence || order.total_minus_store_credits channel = external_data[:channel] || external_data['channel'] || Spree::PaymentSessions::Adyen::AVAILABLE_CHANNELS[:web] return_url = external_data[:return_url] || external_data['return_url'] || default_return_url(order) response = create_adyen_session(total, order, channel, return_url) payment_session_class.create!( order: order, payment_method: self, amount: total, currency: order.currency, status: 'pending', external_id: response.params['id'], customer: order.user, expires_at: response.params['expiresAt'], external_data: { 'session_data' => response.params['sessionData'], 'channel' => channel, 'return_url' => return_url } ) end |
#payment_session_class ⇒ Object
10 11 12 |
# File 'app/models/spree_adyen/gateway/payment_sessions.rb', line 10 def payment_session_class Spree::PaymentSessions::Adyen end |
#session_required? ⇒ Boolean
6 7 8 |
# File 'app/models/spree_adyen/gateway/payment_sessions.rb', line 6 def session_required? true end |
#update_payment_session(payment_session:, amount: nil, external_data: {}) ⇒ Object
Updates an existing payment session amount.
50 51 52 53 54 55 56 57 58 59 |
# File 'app/models/spree_adyen/gateway/payment_sessions.rb', line 50 def update_payment_session(payment_session:, amount: nil, external_data: {}) attrs = {} attrs[:amount] = amount if amount.present? if external_data.present? attrs[:external_data] = (payment_session.external_data || {}).merge(external_data.stringify_keys) end payment_session.update!(attrs) if attrs.any? end |