Как настроить стандартные веб-зачеты Stripe Invoice с Payola Gem?

Я использую две разные модели пользователей с разными наборами подписок для обеих. Проблема заключается в том, что Payola не обязательно предоставляет четкую документацию о том, какой подход вы должны использовать при создании счетов, при успешном списании, при невыплате ответов или даже при подходе к невыполненному платежу. Как я могу просто настроить поведение по умолчанию для случаев Payola Stripe Webhook?

payola.rb

Payola.configure do |config|
  # Example subscription:
  # 
  # config.subscribe 'payola.package.sale.finished' do |sale|
  #   EmailSender.send_an_email(sale.email)
  # end
  # 
  # In addition to any event that Stripe sends, you can subscribe
  # to the following special payola events:
  #
  #  - payola.<sellable class>.sale.finished
  #  - payola.<sellable class>.sale.refunded
  #  - payola.<sellable class>.sale.failed
  #
  # These events consume a Payola::Sale, not a Stripe::Event
  #
  # Example charge verifier:
  #
  # config.charge_verifier = lambda do |sale|
  #   raise "Nope!" if sale.email.includes?('yahoo.com')
  # end

  # Keep this subscription unless you want to disable refund handling

  config.secret_key = ENV["STRIPE_SECRET_KEY_TEST"]
  config.publishable_key = ENV["STRIPE_PUBLISHABLE_KEY_TEST"]

  config.send_email_for :user_receipt, :employer_receipt

  # send email when invoice is created
  config.subscribe 'invoice.created' do |event|
    subscription = Payola::SubscriptionPlan.find_by(stripe_id: event.data.object.subscription)
    user = User.find(subscription.owner_id)
    UserMailer.invoice_created_email(user).deliver_now
  end


  config.subscribe 'invoice.payment_succeeded' do |event|
    subscription = Payola::SubscriptionPlan.find_by(stripe_id: event.data.object.subscription)
    user = User.find(subscription.owner_id)
    subscription.save
    UserMailer.successful_payment_email(user).deliver_now
  end

  Payola.subscribe 'payola.sale.refunded' do |event|
    sale = Payola::Sale.find_by(stripe_id: event.data.object.id)
    sale.refund! unless sale.refunded?
  end

  Payola.subscribe 'payola.sale.finished' do |event|
    # SubscriptionMailer.receipt(event.guid).deliver
  end

  Payola.subscribe 'payola.sale.failed' do |event|
    # TO DO
  end

  Payola.subscribe 'payola.subscription.deleted' do |event|
    sale = Sale.find_by(stripe_id: event.data.object.id)
    customer = User.find_by(email: sale.email) || Employer.find_by(email: sale.email)
    UserMailer.expire_email(customer).deliver || EmployerMailer.expire_email(customer)
    customer.destroy
  end
end

0 ответов

Другие вопросы по тегам