Module: Pay::Stripe
- Extended by:
- Env
- Defined in:
- lib/pay/stripe.rb,
lib/pay/stripe/error.rb,
lib/pay/stripe/charge.rb,
lib/pay/stripe/billable.rb,
lib/pay/stripe/merchant.rb,
lib/pay/stripe/subscription.rb,
lib/pay/stripe/payment_method.rb,
lib/pay/stripe/webhooks/payment_failed.rb,
lib/pay/stripe/webhooks/account_updated.rb,
lib/pay/stripe/webhooks/charge_refunded.rb,
lib/pay/stripe/webhooks/charge_succeeded.rb,
lib/pay/stripe/webhooks/customer_deleted.rb,
lib/pay/stripe/webhooks/customer_updated.rb,
lib/pay/stripe/webhooks/subscription_created.rb,
lib/pay/stripe/webhooks/subscription_deleted.rb,
lib/pay/stripe/webhooks/subscription_updated.rb,
lib/pay/stripe/webhooks/subscription_renewing.rb,
lib/pay/stripe/webhooks/payment_method_updated.rb,
lib/pay/stripe/webhooks/payment_action_required.rb,
lib/pay/stripe/webhooks/payment_method_attached.rb,
lib/pay/stripe/webhooks/payment_method_detached.rb,
lib/pay/stripe/webhooks/payment_intent_succeeded.rb,
lib/pay/stripe/webhooks/checkout_session_completed.rb,
lib/pay/stripe/webhooks/subscription_trial_will_end.rb,
lib/pay/stripe/webhooks/checkout_session_async_payment_succeeded.rb
Defined Under Namespace
Modules: Webhooks Classes: Billable, Charge, Error, Merchant, PaymentMethod, Subscription
Constant Summary collapse
- REQUIRED_VERSION =
"~> 9"
Class Method Summary collapse
- .configure_webhooks ⇒ Object
- .enabled? ⇒ Boolean
- .find_by_client_reference_id(client_reference_id) ⇒ Object
- .private_key ⇒ Object
- .public_key ⇒ Object
- .setup ⇒ Object
- .signing_secret ⇒ Object
- .to_client_reference_id(record) ⇒ Object
Class Method Details
.configure_webhooks ⇒ Object
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 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 118 119 120 121 122 |
# File 'lib/pay/stripe.rb', line 70 def self.configure_webhooks Pay::Webhooks.configure do |events| # Listen to the charge event to make sure we get non-subscription # purchases as well. Invoice is only for subscriptions and manual creation # so it does not include individual charges. events.subscribe "stripe.charge.succeeded", Pay::Stripe::Webhooks::ChargeSucceeded.new events.subscribe "stripe.charge.refunded", Pay::Stripe::Webhooks::ChargeRefunded.new events.subscribe "stripe.payment_intent.succeeded", Pay::Stripe::Webhooks::PaymentIntentSucceeded.new # Warn user of upcoming charges for their subscription. This is handy for # notifying annual users their subscription will renew shortly. # This probably should be ignored for monthly subscriptions. events.subscribe "stripe.invoice.upcoming", Pay::Stripe::Webhooks::SubscriptionRenewing.new # Payment action is required to process an invoice events.subscribe "stripe.invoice.payment_action_required", Pay::Stripe::Webhooks::PaymentActionRequired.new # If an invoice payment fails, we want to notify the user via email to update their payment details events.subscribe "stripe.invoice.payment_failed", Pay::Stripe::Webhooks::PaymentFailed.new # If a subscription is manually created on Stripe, we want to sync events.subscribe "stripe.customer.subscription.created", Pay::Stripe::Webhooks::SubscriptionCreated.new # If the plan, quantity, or trial ending date is updated on Stripe, we want to sync events.subscribe "stripe.customer.subscription.updated", Pay::Stripe::Webhooks::SubscriptionUpdated.new # When a customers subscription is canceled, we want to update our records events.subscribe "stripe.customer.subscription.deleted", Pay::Stripe::Webhooks::SubscriptionDeleted.new # When a customers subscription trial period is 3 days from ending or ended immediately this event is fired events.subscribe "stripe.customer.subscription.trial_will_end", Pay::Stripe::Webhooks::SubscriptionTrialWillEnd.new # Monitor changes for customer's default card changing and invoice credit updates events.subscribe "stripe.customer.updated", Pay::Stripe::Webhooks::CustomerUpdated.new # If a customer was deleted in Stripe, their subscriptions should be cancelled events.subscribe "stripe.customer.deleted", Pay::Stripe::Webhooks::CustomerDeleted.new # If a customer's payment source was deleted in Stripe, we should update as well events.subscribe "stripe.payment_method.attached", Pay::Stripe::Webhooks::PaymentMethodAttached.new events.subscribe "stripe.payment_method.updated", Pay::Stripe::Webhooks::PaymentMethodUpdated.new events.subscribe "stripe.payment_method.card_automatically_updated", Pay::Stripe::Webhooks::PaymentMethodUpdated.new events.subscribe "stripe.payment_method.detached", Pay::Stripe::Webhooks::PaymentMethodDetached.new # If an account is updated in stripe, we should update it as well events.subscribe "stripe.account.updated", Pay::Stripe::Webhooks::AccountUpdated.new # Handle subscriptions in Stripe Checkout Sessions events.subscribe "stripe.checkout.session.completed", Pay::Stripe::Webhooks::CheckoutSessionCompleted.new events.subscribe "stripe.checkout.session.async_payment_succeeded", Pay::Stripe::Webhooks::CheckoutSessionAsyncPaymentSucceeded.new end end |
.enabled? ⇒ Boolean
39 40 41 42 43 |
# File 'lib/pay/stripe.rb', line 39 def self.enabled? return false unless Pay.enabled_processors.include?(:stripe) && defined?(::Stripe) Pay::Engine.version_matches?(required: REQUIRED_VERSION, current: ::Stripe::VERSION) || (raise "[Pay] stripe gem must be version #{REQUIRED_VERSION}") end |
.find_by_client_reference_id(client_reference_id) ⇒ Object
129 130 131 132 133 134 135 136 137 138 139 140 141 |
# File 'lib/pay/stripe.rb', line 129 def self.find_by_client_reference_id(client_reference_id) # If there is a client reference ID, make sure we have a Pay::Customer record # client_reference_id should be in the format of "User/1" model_name, id = client_reference_id.split("/", 2) # Only allow model names that use Pay return unless model_names.include?(model_name) model_name.constantize.find(id) rescue ActiveRecord::RecordNotFound Rails.logger.error "[Pay] Unable to locate record with: #{client_reference_id}" nil end |
.private_key ⇒ Object
62 63 64 |
# File 'lib/pay/stripe.rb', line 62 def self.private_key find_value_by_name(:stripe, :private_key) end |
.public_key ⇒ Object
58 59 60 |
# File 'lib/pay/stripe.rb', line 58 def self.public_key find_value_by_name(:stripe, :public_key) end |
.setup ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/pay/stripe.rb', line 45 def self.setup ::Stripe.api_key = private_key ::Stripe.api_version ||= "2023-08-16" # Used by Stripe to identify Pay for support ::Stripe.set_app_info("PayRails", partner_id: "pp_partner_IqhY0UExnJYLxg", version: Pay::VERSION, url: "https://github.com/pay-rails/pay") # Automatically retry requests that fail # This automatically includes idempotency keys in the request to guarantee that retires are safe # https://github.com/stripe/stripe-ruby#configuring-automatic-retries ::Stripe.max_network_retries = 2 end |
.signing_secret ⇒ Object
66 67 68 |
# File 'lib/pay/stripe.rb', line 66 def self.signing_secret find_value_by_name(:stripe, :signing_secret) end |
.to_client_reference_id(record) ⇒ Object
124 125 126 127 |
# File 'lib/pay/stripe.rb', line 124 def self.to_client_reference_id(record) raise ArgumentError, "#{record.class.name} does not include Pay. Allowed models: #{model_names.to_a.join(", ")}" unless model_names.include?(record.class.name) [record.class.name, record.id].join("/") end |