Skip to Content

Checkout

CheckoutService sert à créer des sessions Stripe Checkout en mode paiement ou abonnement.

Modes Checkout

MéthodeModeUsage
create()paymentPaiement unique
createSubscription()subscriptionAbonnement
SetupIntentServicesetupCollecter un PM sans paiement

Paiement produit / commande

use CashierBundle\Service\CheckoutService; $checkout = $checkoutService->create($user, [ // retourne CashierBundle\Model\Checkout [ 'price_data' => [ 'currency' => 'eur', 'product_data' => ['name' => 'Réservation premium'], 'unit_amount' => 4990, // 49.90 € en centimes ], 'quantity' => 1, ], ], [ 'success_url' => 'https://example.com/checkout/success?session_id={CHECKOUT_SESSION_ID}', 'cancel_url' => 'https://example.com/checkout/cancel', 'metadata' => [ 'app_order_id' => '42', 'app_user_id' => '4', ], 'customer_email' => 'user@example.com', 'allow_promotion_codes' => true, ]); return new RedirectResponse($checkout->url());

Propagation des metadata

Pour create() : les metadata sont automatiquement propagées vers invoice_creation.invoice_data.metadata. Pour createSubscription() : les metadata sont propagées vers subscription_data.metadata.

Utile pour le linkage avec InvoiceArchiveService (voir Factures).

Ce que le bundle ajoute pour vous

Par défaut, le bundle active:

  • invoice_creation.enabled = true
  • la propagation des metadata vers invoice_creation.invoice_data.metadata
  • l’archivage local du PDF après invoice.payment_succeeded

Cela permet ensuite de lier plus proprement:

  • la session checkout
  • le payment intent
  • l’invoice Stripe
  • l’invoice archivée localement
  • votre ressource métier via metadata

Abonnement via Checkout

$checkout = $checkoutService->createSubscription($user, [ // retourne CashierBundle\Model\Checkout ['price' => 'price_monthly', 'quantity' => 1], ], [ 'success_url' => 'https://example.com/account?checkout=success', 'cancel_url' => 'https://example.com/account?checkout=cancel', 'metadata' => [ 'plan_code' => 'premium', ], 'automatic_tax' => ['enabled' => true], ]);

Billing portal

$url = $checkoutService->billingPortal( billable: $user, returnUrl: 'https://example.com/account', );

Retrouver une session

$session = $checkoutService->findSession('cs_test_xxx'); // retourne ?CashierBundle\Model\Checkout if ($session?->isComplete()) { // paiement confirmé }

Conseil d’intégration

Ne faites pas dépendre votre métier uniquement du retour frontend.

Utilisez les webhooks Stripe pour:

  • confirmer le paiement côté serveur
  • archiver la facture
  • déclencher vos actions métier post-paiement

Factures →

Last updated on