update stripe webhook

This commit is contained in:
Andras Bacsai
2024-12-13 08:18:08 +01:00
parent 82a1478ca1
commit 9832d92bda

View File

@@ -173,8 +173,8 @@ class StripeProcessJob implements ShouldQueue
$userId = data_get($data, 'metadata.user_id'); $userId = data_get($data, 'metadata.user_id');
$customerId = data_get($data, 'customer'); $customerId = data_get($data, 'customer');
$status = data_get($data, 'status'); $status = data_get($data, 'status');
$subscriptionId = data_get($data, 'items.data.0.subscription'); $subscriptionId = data_get($data, 'items.data.0.subscription') ?? data_get($data, 'id');
$planId = data_get($data, 'items.data.0.plan.id'); $planId = data_get($data, 'items.data.0.plan.id') ?? data_get($data, 'plan.id');
if (Str::contains($excludedPlans, $planId)) { if (Str::contains($excludedPlans, $planId)) {
send_internal_notification('Subscription excluded.'); send_internal_notification('Subscription excluded.');
break; break;
@@ -218,9 +218,18 @@ class StripeProcessJob implements ShouldQueue
'stripe_cancel_at_period_end' => $cancelAtPeriodEnd, 'stripe_cancel_at_period_end' => $cancelAtPeriodEnd,
]); ]);
if ($status === 'paused' || $status === 'incomplete_expired') { if ($status === 'paused' || $status === 'incomplete_expired') {
$subscription->update([ if ($subscription->stripe_subscription_id === $subscriptionId) {
'stripe_invoice_paid' => false, $subscription->update([
]); 'stripe_invoice_paid' => false,
]);
}
}
if ($status === 'active') {
if ($subscription->stripe_subscription_id === $subscriptionId) {
$subscription->update([
'stripe_invoice_paid' => true,
]);
}
} }
if ($feedback) { if ($feedback) {
$reason = "Cancellation feedback for {$customerId}: '".$feedback."'"; $reason = "Cancellation feedback for {$customerId}: '".$feedback."'";
@@ -228,13 +237,24 @@ class StripeProcessJob implements ShouldQueue
$reason .= ' with comment: \''.$comment."'"; $reason .= ' with comment: \''.$comment."'";
} }
} }
break; break;
case 'customer.subscription.deleted': case 'customer.subscription.deleted':
// End subscription
$customerId = data_get($data, 'customer'); $customerId = data_get($data, 'customer');
$subscription = Subscription::where('stripe_customer_id', $customerId)->firstOrFail(); $subscriptionId = data_get($data, 'id');
$team = data_get($subscription, 'team'); $subscription = Subscription::where('stripe_customer_id', $customerId)->where('stripe_subscription_id', $subscriptionId)->first();
$team?->subscriptionEnded(); if ($subscription) {
$team = data_get($subscription, 'team');
if ($team) {
$team->subscriptionEnded();
} else {
send_internal_notification('Subscription deleted but no team found in Coolify for customer: '.$customerId);
throw new \RuntimeException("No team found in Coolify for customer: {$customerId}");
}
} else {
send_internal_notification('Subscription deleted but no subscription found in Coolify for customer: '.$customerId);
throw new \RuntimeException("No subscription found in Coolify for customer: {$customerId}");
}
break; break;
default: default:
throw new \RuntimeException("Unhandled event type: {$type}"); throw new \RuntimeException("Unhandled event type: {$type}");