Sha256: aab3a61ee08a15e8b184a737b6fe851a46b6c250989e712eb244970a4ae6f734

Contents?: true

Size: 1.34 KB

Versions: 1

Compression:

Stored size: 1.34 KB

Contents

module Pay
  module Paddle
    module Webhooks
      class SubscriptionPaymentSucceeded
        def call(event)
          billable = Pay.find_billable(processor: :paddle, processor_id: event["user_id"])
          return unless billable.present?
          return if billable.charges.where(processor_id: event["subscription_payment_id"]).any?

          charge = create_charge(billable, event)
          notify_user(billable, charge)
        end

        def create_charge(user, event)
          charge = user.charges.find_or_initialize_by(
            processor: :paddle,
            processor_id: event["subscription_payment_id"]
          )

          params = {
            amount: Integer(event["sale_gross"].to_f * 100),
            card_type: event["payment_method"],
            paddle_receipt_url: event["receipt_url"],
            created_at: Time.zone.parse(event["event_time"])
          }

          payment_information = user.paddle_payment_information(event["subscription_id"])

          charge.update(params.merge(payment_information))
          user.update(payment_information)

          charge
        end

        def notify_user(billable, charge)
          if Pay.send_emails && charge.respond_to?(:receipt)
            Pay::UserMailer.with(billable: billable, charge: charge).receipt.deliver_later
          end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
pay-2.5.0 lib/pay/paddle/webhooks/subscription_payment_succeeded.rb