Не найдено подписей, соответствующих ожидаемой подписи для полезной нагрузки

#ruby-on-rails #stripe-payments #ngrok

#ruby-on-rails #stripe-платежи #ngrok

Вопрос:

Я работаю над приложением marketplace. При выплате на учетную запись connect с платформы я хочу обновить информацию о балансе учетной записи и добавить модель поступления в мое приложение. Но No signatures found matching the expected signature for payload возникает ошибка, и я не могу получить payout.paid событие.

stripe.rb

 StripeEvent.configure do |events|
  # The case transfer created
  events.subscribe(
    'payout.paid',
    Events::PayoutPaid.new
  )
end
 

приложения / сервисы / события /payout_paid.rb

 class Events::PayoutPaid
  def call(event)
    source = event.data.object

    # Fetch balence information
    account = source.destination
    balance = Stripe::Balance.retrieve(
        {stripe_account: account}
      )

    @user = User.find_by({
      stripe_account_id: account
    })
    @user.balance = balance["available"][0]["amount"]
    @user.save

    # create receipt
    @receipt = Receipt.new
    @receipt.user = @user
    @receipt.amount = source.amount
    @receipt.save
  end
end
 

Хотя другой веб-хук stripe будет работать.

Ответ №1:

Это потому, что вы не загрузили секреты подписи в StripeEvent

Чтобы не сказать, что вы создаете 2 webhooks на панели инструментов Stripe, один из которых подписан на события счетов-фактур, а другой — на события клиентов. Сначала вам нужно скопировать каждый из секретов подписи (нажмите «Раскрыть»), а затем сохранить их в config/credentials.yml.enc файле

Сначала запустите команду EDITOR="atom --wait" rails credentials:edit (используя редактор по вашему выбору). Затем добавьте следующие значения:

     stripe:
      development:
        secret_key: MY_SECRET_KEY
        publishable_key: MY_PUBLISHABLE_KEY
        signing_secret_customer_endpoint: MY_SIGNING_SECRET_CUSTOMERS
        signing_secrets_invoice_endpoint: MY_SIGNING_SECRET_INVOICES
 

Сохраните файл. Теперь отредактируйте инициализатор для stripeEvent. В моем случае это было config/initializers/stripe.rb и добавить:

 StripeEvent.signing_secrets = [
  Rails.application.credentials[:stripe][Rails.env.to_sym][:signing_secret_customer_endpoint],
  Rails.application.credentials[:stripe][Rails.env.to_sym][:signing_secrets_invoice_endpoint]]
 

Теперь секреты подписи загружены, и веб-хуки должны работать

Ответ №2:

У меня была такая же проблема, и решение заключалось в:

  1. войдите в Stripe
  2. перейдите на страницу веб-крючка, который не удался
  3. получите секрет подписи из середины этой страницы
  4. и установите переменную env с именем STRIPE_SIGNING_SECRET с секретом подписи в качестве его значения.

Это упоминается в документах Stripe, здесь .