Рельсы 4 Payola Stripe webhook вставить в таблицу при оплате счета

Я пытаюсь настроить веб-крюк с драгоценным камнем Payola для вставки данных в таблицу, если оплата счета выполнена успешно (например, событие invoice.payment_succeeded, По какой-то причине это не работает, но аналогичное событие для отправки электронной почты при создании счета работает. Это код, который у меня есть в моем payola.rb файл инициализации:

Payola.configure do |config|

  Payola.secret_key =Rails.application.secrets.payola_secret_key
  Payola.publishable_key = Rails.application.secrets.payola_publishable_key

  config.send_email_for :receipt, :admin_receipt
  Payola.support_email="me@example.com"

# this webhook works and I get an email when new invoice is created
  config.subscribe 'invoice.created' do |event|
    subscription = Payola::Subscription.find_by(stripe_id: event.data.object.subscription)
    user=User.find(subscription.owner_id)
    UserMailer.invoicecreated_email(user).deliver_now
  end
# this webhook is supposed to create a new PaymentHistory record and send an email, but none of these actions is performed after invoice is paid.  
  config.subscribe 'invoice.payment_succeeded' do |event|
      subscription = Payola::Subscription.find_by(stripe_id: event.data.object.subscription)
      #subscription = Payola::Subscription.find_by(stripe_id: event.data.object.lines.data[0].id)
      user=User.find(subscription.owner_id)
      subscription.fail_payment_date1 = nil
      subscription.fail_payment_date2 = nil
      subscription.update
      PayolaPaymentHistory.create(owner_id: user.id, subscription_id: subscription.id,
          payment_date: Time.at(event.data.object.date).to_date,amount: event.data.object.amount_due,currency: event.data.object.currency,
          date_start: Time.at(event.data.object.lines.data[0].period.start).to_date,
          date_end: Time.at(event.data.object.lines.data[0].period.end).to_date,
          description: 'Monthly payment')
      UserMailer.successpayment_email(user).deliver_now
  end
end

Что мне не хватает?

2 ответа

Решение

Попробуйте обрезать блок до этого, пока мы не получим что-то простое:

config.subscribe 'invoice.payment_succeeded' do |event|
  raise 'Yes the invoice.payment_succeeded webhook is running!'
end

Остановите сервер Rails и остановите Spring с bin/spring stop чтобы обеспечить payola.rb изменения инициализатора подобраны (попробуйте остановить Spring каждый раз, когда payola.rb изменения инициализатора).

Сделайте пробный платеж и посмотрите, появляется ли указанное выше сообщение об ошибке в ваших журналах и / или rails server выход. Пожалуйста, сообщите с тем, что вы узнали.

Так что, если у кого-то возникают головные боли из-за этой глупой ошибки, вот где я ошибся:

subscription = Payola::Subscription.find_by(stripe_id: event.data.object.subscription)
# this is wrong
subscription.fail_payment_date1 = nil
subscription.fail_payment_date2 = nil
subscription.update

# this is allowed
subscription.fail_payment_date1 = nil
subscription.fail_payment_date2 = nil
subscription.save

# this is also allowed
subscription.update(fail_payment_date1: nil, fail_payment_date2: nil)

С Payola не было никаких проблем... полностью моя ошибка.

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