【发布时间】:2022-10-18 16:49:53
【问题描述】:
我目前正在为我的 rails 应用程序开发条带 webhook,但遇到了问题。除了checkout.session.completed 之外的所有事件都在工作。
我的主要目标是在事件checkout.session.completed 发生时将付款状态booking.paid 更改为true。条带 webhook 日志为事件 checkout.session.completed 提供了 500 个内部服务器错误。我认为问题出在我的 Webhook 控制器上,但我就是不知道出了什么问题。任何帮助都会很棒!
这是我的 Webhooks_controller:
class WebhooksController < ApplicationController
skip_before_action :authenticate_user!
skip_before_action :verify_authenticity_token
def create
payload = request.body.read
sig_header = request.env['HTTP_STRIPE_SIGNATURE']
event = nil
begin
event = Stripe::Webhook.construct_event(
payload, sig_header, Rails.application.credentials[:stripe][:webhook]
)
rescue JSON::ParserError => e
status 400
return
rescue Stripe::SignatureVerificationError => e
# Invalid signature
puts "Signature error"
p e
return
end
# Handle the event
case event.type
when 'checkout.session.completed'
# session = event.data.object
# @booking.session.client_reference_id.paid = true
booking = Booking.find_by(checkout_session_id: event.data.object.id)
booking.update(paid: true)
end
render json: { message: 'success' }
end
end
【问题讨论】:
-
如果出现服务器错误,则应将错误消息和堆栈跟踪写入您的日志文件或报告给您的错误跟踪系统。请分享完整的错误消息和堆栈跟踪。
-
@spickermann 是的,我现在收到此错误:签名错误#<Stripe::SignatureVerificationError: No signatures found matching the expected signature for payload> No template found for WebhooksController#create, rendering head:no_content Completed 204 No Content in 0ms (Allocations:第594章)
-
你最终进入了这个
rescue Stripe::SignatureVerificationError块。可能是因为您没有正确设置凭据。该块最后只是简单地调用return。但是,相反,您需要呈现一些 JSON 错误响应。这意味着:首先修复设置并确保您在应用程序中配置了正确的凭据和机密。其次,确保即使出现错误也能返回有用的 JSON 响应。
标签: ruby-on-rails ruby stripe-payments payment