Checkout
CheckoutService sert à créer des sessions Stripe Checkout en mode paiement ou abonnement.
Modes Checkout
| Méthode | Mode | Usage |
|---|---|---|
create() | payment | Paiement unique |
createSubscription() | subscription | Abonnement |
| SetupIntentService | setup | Collecter 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
metadataversinvoice_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
Last updated on