Skip to Content
DocumentationÉvénements Symfony

Événements Symfony

Le bundle dispatch des événements Symfony pour permettre à l’application consommatrice de se brancher proprement sur le billing.

Tableau des événements et propriétés

EventMéthodes disponibles
PaymentSucceededEventgetCustomerId(), getPaymentIntentId(), getAmount() (centimes), getCurrency(), getInvoiceId(): ?string, getCheckoutSessionId(): ?string, getAmountInDecimal(): float
PaymentFailedEventgetCustomerId(), getPaymentIntentId(), getAmount(), getCurrency(), getAmountInDecimal(): float
SubscriptionCreatedEventgetSubscription(): Subscription
SubscriptionUpdatedEventgetSubscription(): Subscription
SubscriptionDeletedEventgetSubscription(): Subscription
WebhookReceivedEventgetEvent(): \Stripe\Event
WebhookHandledEventgetEvent(): \Stripe\Event

Webhook lifecycle

WebhookReceivedEvent

Déclenché dès réception d’un webhook Stripe valide.

WebhookHandledEvent

Déclenché après le passage des handlers configurés.

Événements métier

SubscriptionCreatedEvent

Émis lorsqu’un abonnement local a été créé ou synchronisé depuis Stripe.

SubscriptionUpdatedEvent

Émis lorsqu’un abonnement local est modifié après un webhook ou une synchronisation.

SubscriptionDeletedEvent

Émis lorsqu’un abonnement est supprimé ou terminé.

PaymentSucceededEvent

Émis sur paiement confirmé. Cet événement est particulièrement utile pour:

  • valider une commande
  • déclencher une réservation
  • envoyer une notification
  • archiver une facture applicative additionnelle si besoin

PaymentFailedEvent

Émis lorsque Stripe signale un échec de paiement.

Exemple d’écoute

use CashierBundle\Event\PaymentSucceededEvent; use Symfony\Component\EventDispatcher\Attribute\AsEventListener; #[AsEventListener(event: PaymentSucceededEvent::class)] final class ConfirmOrderListener { public function __invoke(PaymentSucceededEvent $event): void { $customerId = $event->getCustomerId(); $paymentIntentId = $event->getPaymentIntentId(); // retrouver votre commande et la confirmer } }

Bonne pratique

Gardez les listeners métier:

  • idempotents
  • rapides
  • traçables

Si le traitement devient lourd, déléguez vers Messenger ou un bus applicatif.

Intégration Messenger

Les événements Symfony peuvent déclencher des messages async. Messages disponibles:

  • CancelSubscriptionMessage
  • ProcessInvoiceMessage
  • RetryPaymentMessage
  • SyncCustomerDetailsMessage
  • UpdateSubscriptionQuantityMessage

Nécessite symfony/messenger dans composer.json.

Exemple : déclencher SyncCustomerDetailsMessage depuis un listener CustomerUpdatedEvent:

use CashierBundle\Event\CustomerUpdatedEvent; use CashierBundle\Message\SyncCustomerDetailsMessage; use Symfony\Component\EventDispatcher\Attribute\AsEventListener; use Symfony\Component\Messenger\MessageBusInterface; #[AsEventListener(event: CustomerUpdatedEvent::class)] final class SyncCustomerDetailsListener { public function __construct( private MessageBusInterface $messageBus, ) { } public function __invoke(CustomerUpdatedEvent $event): void { $this->messageBus->dispatch(new SyncCustomerDetailsMessage($event->getStripeCustomerId())); } }

Commandes CLI →

Last updated on