找不到与有效负载的预期签名匹配的签名

时间:2019-04-14 00:52:43

标签: ruby-on-rails stripe-payments ngrok

我正在开发市场应用程序。从平台向连接帐户付款时,我想更新帐户的余额信息并在我的应用程序中添加收据模型。但是发生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

尽管其他条纹网钩也可以使用。

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,解决方案是:

  1. 登录 Stripe
  2. 转到失败的 webhook 的页面
  3. 从该页面中间获取签名密钥
  4. 并设置一个名为 STRIPE_SIGNING_SECRET 的 env VAR,并将签名密钥作为其值。

这在 Stripe 文档中提到,here

答案 1 :(得分:0)

那是因为您尚未将签名机密加载到StripeEvent

至少可以说您在Stripe仪表板上创建了2个Webhooks,一个订阅了发票事件,另一个订阅了客户事件。您首先需要复制每个签名机密(单击“显示”),然后将其存储在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]]

现在已经加载了签名机密,网络钩应该可以工作