diff --git a/backend/app/Http/Controllers/Api/SubscriptionController.php b/backend/app/Http/Controllers/Api/SubscriptionController.php index fcd35aa..7a5c934 100755 --- a/backend/app/Http/Controllers/Api/SubscriptionController.php +++ b/backend/app/Http/Controllers/Api/SubscriptionController.php @@ -843,6 +843,38 @@ private function handlePaymentCompleted(array $resource): void $subscription = Subscription::where('paypal_subscription_id', $billingAgreementId)->first(); if (!$subscription) return; + $paymentId = $resource['id'] ?? null; + + // Check if invoice already exists for this payment (avoid duplicates) + if ($paymentId) { + $existingInvoice = Invoice::where('paypal_payment_id', $paymentId) + ->orWhere('paypal_capture_id', $paymentId) + ->first(); + + if ($existingInvoice) { + Log::info('Invoice already exists for this payment', [ + 'payment_id' => $paymentId, + 'invoice_id' => $existingInvoice->id, + ]); + return; + } + } + + // Check if a paid invoice was already created for this subscription today (initial payment) + $todayInvoice = Invoice::where('subscription_id', $subscription->id) + ->where('status', Invoice::STATUS_PAID) + ->whereDate('created_at', today()) + ->first(); + + if ($todayInvoice) { + Log::info('Invoice already created today for subscription, skipping duplicate', [ + 'subscription_id' => $subscription->id, + 'existing_invoice_id' => $todayInvoice->id, + 'payment_id' => $paymentId, + ]); + return; + } + // Create invoice for recurring payment $invoice = Invoice::createForSubscription( $subscription,