Sha256: 36e69c410cdeabe2651581106f9647359cac205f7f07120187c9a98d1c860051

Contents?: true

Size: 1.97 KB

Versions: 38

Compression:

Stored size: 1.97 KB

Contents

module Pay
  module Paddle
    module Webhooks
      class SubscriptionPaymentSucceeded
        def call(event)
          pay_customer = Pay::Customer.find_by(processor: :paddle, processor_id: event.user_id)

          if pay_customer.nil?
            owner = Pay::Paddle.owner_from_passthrough(event.passthrough)
            pay_customer = owner&.set_payment_processor :paddle, processor_id: event.user_id
          end

          if pay_customer.nil?
            Rails.logger.error("[Pay] Unable to find Pay::Customer with: '#{event.passthrough}'")
            return
          end

          return if pay_customer.charges.where(processor_id: event.subscription_payment_id).any?

          pay_charge = create_charge(pay_customer, event)
          notify_user(pay_charge)
        end

        def create_charge(pay_customer, event)
          payment_method_details = Pay::Paddle::PaymentMethod.payment_method_details_for(subscription_id: event.subscription_id)

          attributes = {
            amount: (event.sale_gross.to_f * 100).to_i,
            created_at: Time.zone.parse(event.event_time),
            currency: event.currency,
            paddle_receipt_url: event.receipt_url,
            subscription: pay_customer.subscriptions.find_by(processor_id: event.subscription_id),
            metadata: Pay::Paddle.parse_passthrough(event.passthrough).except("owner_sgid")
          }.merge(payment_method_details)

          pay_charge = pay_customer.charges.find_or_initialize_by(processor_id: event.subscription_payment_id)
          pay_charge.update!(attributes)

          # Update customer's payment method
          Pay::Paddle::PaymentMethod.sync(pay_customer: pay_customer, attributes: payment_method_details)

          pay_charge
        end

        def notify_user(pay_charge)
          if Pay.send_email?(:receipt, pay_charge)
            Pay.mailer.with(pay_customer: pay_charge.customer, pay_charge: pay_charge).receipt.deliver_later
          end
        end
      end
    end
  end
end

Version data entries

38 entries across 38 versions & 1 rubygems

Version Path
pay-6.8.1 lib/pay/paddle/webhooks/subscription_payment_succeeded.rb
pay-6.8.0 lib/pay/paddle/webhooks/subscription_payment_succeeded.rb
pay-6.7.2 lib/pay/paddle/webhooks/subscription_payment_succeeded.rb
pay-6.7.1 lib/pay/paddle/webhooks/subscription_payment_succeeded.rb
pay-6.7.0 lib/pay/paddle/webhooks/subscription_payment_succeeded.rb
pay-6.6.1 lib/pay/paddle/webhooks/subscription_payment_succeeded.rb
pay-6.6.0 lib/pay/paddle/webhooks/subscription_payment_succeeded.rb
pay-6.5.0 lib/pay/paddle/webhooks/subscription_payment_succeeded.rb
pay-6.4.0 lib/pay/paddle/webhooks/subscription_payment_succeeded.rb
pay-6.3.4 lib/pay/paddle/webhooks/subscription_payment_succeeded.rb
pay-6.3.3 lib/pay/paddle/webhooks/subscription_payment_succeeded.rb
pay-6.3.2 lib/pay/paddle/webhooks/subscription_payment_succeeded.rb
pay-6.3.1 lib/pay/paddle/webhooks/subscription_payment_succeeded.rb
pay-6.3.0 lib/pay/paddle/webhooks/subscription_payment_succeeded.rb
pay-6.2.4 lib/pay/paddle/webhooks/subscription_payment_succeeded.rb
pay-6.2.3 lib/pay/paddle/webhooks/subscription_payment_succeeded.rb
pay-6.2.2 lib/pay/paddle/webhooks/subscription_payment_succeeded.rb
pay-6.2.1 lib/pay/paddle/webhooks/subscription_payment_succeeded.rb
pay-6.2.0 lib/pay/paddle/webhooks/subscription_payment_succeeded.rb
pay-6.1.2 lib/pay/paddle/webhooks/subscription_payment_succeeded.rb