Files
aperonight/app/controllers/webhooks/stripe_controller.rb
kbe 3c1e17c2af feat(payouts): implement promoter earnings viewing, request flow, and admin Stripe processing with webhooks
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
2025-09-17 02:07:52 +02:00

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