Module: Pay::LemonSqueezy
- Extended by:
- Env
- Defined in:
- lib/pay/lemon_squeezy.rb
Defined Under Namespace
Modules: Webhooks
Constant Summary collapse
- REQUIRED_VERSION =
"~> 1"
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
65 66 67 68 69 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 |
# File 'lib/pay/lemon_squeezy.rb', line 65 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
35 36 37 38 39 |
# File 'lib/pay/lemon_squeezy.rb', line 35 def self.enabled? return false unless Pay.enabled_processors.include?(:lemonsqueezy) && defined?(::Lemonzsqueezy) Pay::Engine.version_matches?(required: REQUIRED_VERSION, current: ::Lemonsqueezy::VERSION) || (raise "[Pay] lemonsqueezy gem must be version #{REQUIRED_VERSION}") end |
.find_by_client_reference_id(client_reference_id) ⇒ Object
124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/pay/lemon_squeezy.rb', line 124 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
57 58 59 |
# File 'lib/pay/lemon_squeezy.rb', line 57 def self.private_key find_value_by_name(:stripe, :private_key) end |
.public_key ⇒ Object
53 54 55 |
# File 'lib/pay/lemon_squeezy.rb', line 53 def self.public_key find_value_by_name(:stripe, :public_key) end |
.setup ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/pay/lemon_squeezy.rb', line 41 def self.setup ::Stripe.api_key = private_key # 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
61 62 63 |
# File 'lib/pay/lemon_squeezy.rb', line 61 def self.signing_secret find_value_by_name(:stripe, :signing_secret) end |
.to_client_reference_id(record) ⇒ Object
119 120 121 122 |
# File 'lib/pay/lemon_squeezy.rb', line 119 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 |