Add model methods for accurate net calculations (€0.50 + 1.5% fees), eligibility, refund handling Update promoter/payouts controller for index (pending events), create (eligibility checks) Integrate admin processing via Stripe::Transfer, webhook for status sync Enhance views: index pending cards, events/show preview/form Add comprehensive tests (models, controllers, service, integration); run migrations
35 lines
973 B
Ruby
35 lines
973 B
Ruby
class Webhooks::StripeController < ApplicationController
|
|
skip_before_action :verify_authenticity_token
|
|
|
|
def create
|
|
payload = request.body.read
|
|
sig_header = request.env["HTTP_STRIPE_SIGNATURE"]
|
|
|
|
begin
|
|
event = Stripe::Webhook.construct_event(
|
|
payload, sig_header, ENV["STRIPE_WEBHOOK_SECRET"]
|
|
)
|
|
rescue Stripe::SignatureVerificationError => e
|
|
# Invalid signature
|
|
return head 400
|
|
end
|
|
|
|
case event["type"]
|
|
when "transfer.payout.succeeded"
|
|
payout_id = event.data.object.metadata["payout_id"]
|
|
payout = Payout.find(payout_id)
|
|
if payout && payout.processing?
|
|
payout.update!(status: :completed, stripe_payout_id: event.data.object.id)
|
|
end
|
|
when "transfer.payout.failed", "transfer.canceled"
|
|
payout_id = event.data.object.metadata["payout_id"]
|
|
payout = Payout.find(payout_id)
|
|
if payout
|
|
payout.update!(status: :failed)
|
|
end
|
|
end
|
|
|
|
head 200
|
|
end
|
|
end
|