找不到与有效负载的预期签名相匹配的签名
No signatures found matching the expected signature for payload
我正在开发市场应用程序。从平台向关联账户付款时,我想更新账户余额信息并在我的应用程序中添加收据模型。但是发生 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
apps/services/events/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
虽然其他条纹 webhook 也可以工作。
那是因为你还没有加载签名秘密到 StripeEvent
假设您在 Stripe 仪表板上创建了 2 个 webhook,一个订阅了发票事件,另一个订阅了客户事件。您首先需要复制每个签名秘密(点击显示),然后将它们存储在 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]]
现在签名密钥已加载,webhook 应该可以工作了
我遇到了同样的问题,解决方案是:
- 登录 Stripe
- 转到失败的 webhook 页面
- 从该页面的中间获取签名密码
- 并设置一个名为 STRIPE_SIGNING_SECRET 的环境 VAR,并将签名密钥作为其值。
Stripe 文档中提到了这一点,here。
我正在开发市场应用程序。从平台向关联账户付款时,我想更新账户余额信息并在我的应用程序中添加收据模型。但是发生 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
apps/services/events/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
虽然其他条纹 webhook 也可以工作。
那是因为你还没有加载签名秘密到 StripeEvent
假设您在 Stripe 仪表板上创建了 2 个 webhook,一个订阅了发票事件,另一个订阅了客户事件。您首先需要复制每个签名秘密(点击显示),然后将它们存储在 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]]
现在签名密钥已加载,webhook 应该可以工作了
我遇到了同样的问题,解决方案是:
- 登录 Stripe
- 转到失败的 webhook 页面
- 从该页面的中间获取签名密码
- 并设置一个名为 STRIPE_SIGNING_SECRET 的环境 VAR,并将签名密钥作为其值。
Stripe 文档中提到了这一点,here。