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
- #complete_payment_setup_session(setup_session:, params: {}) ⇒ Object
- #create_payment_setup_session(customer:, external_data: {}) ⇒ Object
- #payment_setup_session_class ⇒ Object
- #retrieve_setup_intent(setup_intent_id) ⇒ Object
- #setup_session_supported? ⇒ Boolean
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., 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_class ⇒ Object
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
6 7 8 |
# File 'app/models/spree_stripe/gateway/payment_setup_sessions.rb', line 6 def setup_session_supported? true end |