false, 'subscriptionId' => 'existing', 'msg' => 'User already has active subscription for this plan', 'existingSubscriptions' => $existingCheck['activeSubscriptions'] ]; } else { $sp = new SubscriptionPlansTable($analysis['plans_id']); $subscription_name = $sp->getName() ?? 'Subscription'; // Proceed with creating new subscription $subscriptionMetadata = [ 'users_id' => (int)$analysis['users_id'], 'plans_id' => (int)$analysis['plans_id'], 'subscription_name' => $subscription_name, 'initial_payment_id' => $parsed['transactionId'] ]; $interval = (int)($sp->getHow_many_days() ?? 30); $intervalUnit = 'days'; $subscriptionResult = AuthorizeNet::createSubscription( $analysis['users_id'], $analysis['amount'], $subscriptionMetadata, $interval, $intervalUnit ); Subscription::renew($analysis['users_id'], $analysis['plans_id'], SubscriptionTable::$gatway_authorize, $subscriptionResult['subscriptionId'], $subscriptionResult); if (!empty($subscriptionResult['error'])) { _error_log('[Authorize.Net webhook] Subscription creation failed: ' . $subscriptionResult['msg']); // Don't fail the entire webhook - the payment was processed successfully } else { _error_log('[Authorize.Net webhook] Subscription created: ' . $subscriptionResult['subscriptionId']); } } } // 9) Return success response echo json_encode([ 'success' => true, 'users_id' => $analysis['users_id'], 'subscription' => $analysis['isASubscription'], 'subscriptionId' => $analysis['subscriptionId'] ?? ($subscriptionResult['subscriptionId'] ?? null), 'newSubscription' => $shouldCreateSubscription, 'subscriptionCreated' => !empty($subscriptionResult) && empty($subscriptionResult['error']), 'sigValid' => $parsed['signatureValid'], 'logId' => $result['logId'] ?? null ]);