#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:
У меня была такая же проблема, и решение заключалось в:
- войдите в Stripe
- перейдите на страницу веб-крючка, который не удался
- получите секрет подписи из середины этой страницы
- и установите переменную env с именем STRIPE_SIGNING_SECRET с секретом подписи в качестве его значения.
Это упоминается в документах Stripe, здесь .