Module: SpreeStripe::Gateway::PaymentSetupSessions

Extended by:
ActiveSupport::Concern
Included in:
SpreeStripe::Gateway
Defined in:
app/models/spree_stripe/gateway/payment_setup_sessions.rb

Instance Method Summary collapse

Instance Method Details

#complete_payment_setup_session(setup_session:, params: {}) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'app/models/spree_stripe/gateway/payment_setup_sessions.rb', line 33

def complete_payment_setup_session(setup_session:, params: {})
  stripe_setup_intent = retrieve_setup_intent(setup_session.external_id)

  if stripe_setup_intent.status == 'succeeded'
    setup_session.process if setup_session.can_process?

    stripe_payment_method = stripe_setup_intent.payment_method

    source = SpreeStripe::CreateSource.new(
      stripe_payment_method_details: stripe_payment_method,
      stripe_payment_method_id: stripe_payment_method.id,
      stripe_billing_details: stripe_payment_method.billing_details,
      gateway: self,
      user: setup_session.customer
    ).call

    setup_session.payment_source = source
    setup_session.complete unless setup_session.completed?
  else
    setup_session.fail if setup_session.can_fail?
  end

  setup_session
end

#create_payment_setup_session(customer:, external_data: {}) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'app/models/spree_stripe/gateway/payment_setup_sessions.rb', line 14

def create_payment_setup_session(customer:, external_data: {})
  gateway_customer = fetch_or_create_customer(user: customer)

  setup_intent_response = create_setup_intent(gateway_customer.profile_id)
  ephemeral_key_response = create_ephemeral_key(gateway_customer.profile_id)

  payment_setup_session_class.create!(
    customer: customer,
    payment_method: self,
    status: 'pending',
    external_id: setup_intent_response.params['id'],
    external_client_secret: setup_intent_response.authorization,
    external_data: external_data.to_h.stringify_keys.merge(
      'customer_id' => gateway_customer.profile_id,
      'ephemeral_key_secret' => ephemeral_key_response&.params&.dig('secret')
    ).compact
  )
end

#payment_setup_session_classObject



10
11
12
# File 'app/models/spree_stripe/gateway/payment_setup_sessions.rb', line 10

def payment_setup_session_class
  Spree::PaymentSetupSessions::Stripe
end

#retrieve_setup_intent(setup_intent_id) ⇒ Object



58
59
60
# File 'app/models/spree_stripe/gateway/payment_setup_sessions.rb', line 58

def retrieve_setup_intent(setup_intent_id)
  send_request { |opts| Stripe::SetupIntent.retrieve({ id: setup_intent_id, expand: ['payment_method'] }, opts) }
end

#setup_session_supported?Boolean

Returns:

  • (Boolean)


6
7
8
# File 'app/models/spree_stripe/gateway/payment_setup_sessions.rb', line 6

def setup_session_supported?
  true
end