sync($subscription, 'checkout_subscription_created'); } public function onSubscriptionStatusUpdated(object $subscription, string $newStatus, string $oldStatus): void { $this->sync($subscription, "subscription_status_{$oldStatus}_to_{$newStatus}"); } public function onSubscriptionPaymentComplete(object $subscription): void { $this->sync($subscription, 'subscription_payment_complete'); } public function onSubscriptionPaymentFailed(object $subscription, string $newStatus = ''): void { $this->sync($subscription, 'subscription_payment_failed'); } private function sync(object $subscription, string $trigger): void { if (! Options::isEnabled()) { Logger::debug('Skipping subscription sync because the plugin is disabled.', [ 'subscription_id' => $this->getSubscriptionId($subscription), 'trigger' => $trigger, ]); return; } $subscriptionId = $this->getSubscriptionId($subscription); if ($subscriptionId <= 0) { Logger::error('Subscription hook received an invalid subscription.', [ 'trigger' => $trigger, ]); return; } Logger::info('Subscription sync triggered.', [ 'subscription_id' => $subscriptionId, 'trigger' => $trigger, ]); $service = new SubscriptionSyncService(); $service->syncSubscription($subscriptionId); } private function getSubscriptionId(object $subscription): int { return method_exists($subscription, 'get_id') ? (int) $subscription->get_id() : 0; } }