SubscriptionOrderController
extends AbstractController
in package
Contrôleur de paiement des commandes portant un abonnement.
Il traite le cas d'une Order (typiquement issue d'une commande de carte physique) dont
le premier Payment est rattaché à une Subscription : règlement par Stripe Checkout,
confirmation au retour et annulation. Contrairement à SubscriptionController, le retour
de succès revérifie réellement auprès de Stripe que la session est payée avant d'activer
l'abonnement. Chaque action contrôle que la commande appartient bien à l'utilisateur connecté
et renvoie systématiquement vers la liste des commandes physical_card_my_orders.
Aucun préfixe de route au niveau de la classe. Réservé à ROLE_USER.
Attributes
- #[IsGranted]
- 'ROLE_USER'
Table of Contents
Properties
- $entityManager : EntityManagerInterface
- $stripeService : StripeService
- $subscriptionService : SubscriptionService
Methods
- __construct() : mixed
- cancel() : Response
- Traiter l'abandon du paiement Stripe d'une commande d'abonnement.
- index() : Response
- Rediriger la liste des commandes d'abonnement vers la liste des commandes de cartes physiques.
- pay() : Response
- Démarrer le règlement Stripe d'une commande d'abonnement.
- success() : Response
- Confirmer le paiement Stripe d'une commande d'abonnement et activer l'abonnement.
Properties
$entityManager read-only
private
EntityManagerInterface
$entityManager
$stripeService read-only
private
StripeService
$stripeService
$subscriptionService read-only
private
SubscriptionService
$subscriptionService
Methods
__construct()
public
__construct(EntityManagerInterface $entityManager, StripeService $stripeService, SubscriptionService $subscriptionService) : mixed
Parameters
- $entityManager : EntityManagerInterface
-
Gestionnaire Doctrine (persistance de l'identifiant de session Stripe et des changements de statut, transaction de confirmation).
- $stripeService : StripeService
-
Passerelle Stripe : création et relecture des sessions Checkout.
- $subscriptionService : SubscriptionService
-
Service métier activant l'abonnement une fois le paiement confirmé.
cancel()
Traiter l'abandon du paiement Stripe d'une commande d'abonnement.
public
cancel(Order $order) : Response
URL de retour d'annulation fournie à Stripe. Se limite à vérifier que la commande appartient
à l'utilisateur connecté puis à afficher un message flash info. Aucun statut n'est modifié :
la commande et son paiement restent en attente et peuvent être repayés via
self::pay().
Route : /subscription/orders/{id}/cancel (GET), nom app_subscription_order_cancel.
Parameters
- $order : Order
-
Commande résolue par ParamConverter à partir de
{id}.
Tags
Attributes
- #[Route]
- '/subscription/orders/{id}/cancel'
- $name: 'app_subscription_order_cancel'
- $methods: ['GET']
Return values
Response —Redirection vers physical_card_my_orders.
index()
Rediriger la liste des commandes d'abonnement vers la liste des commandes de cartes physiques.
public
index() : Response
Cette action ne contient aucune logique propre : elle sert d'alias historique et redirige
immédiatement vers physical_card_my_orders, qui affiche l'ensemble des commandes de
l'utilisateur connecté.
Route : /subscription/orders (GET), nom app_subscription_orders_index.
Attributes
- #[Route]
- '/subscription/orders'
- $name: 'app_subscription_orders_index'
- $methods: ['GET']
Return values
Response —Redirection permanente d'usage (302) vers physical_card_my_orders.
pay()
Démarrer le règlement Stripe d'une commande d'abonnement.
public
pay(Order $order, Request $request) : Response
Enchaîne quatre contrôles : la commande doit appartenir à l'utilisateur connecté (sinon
AccessDeniedException), le jeton CSRF pay<id> transmis dans _token doit être valide,
le premier paiement de la commande doit exister et être rattaché à une Subscription,
et ce paiement doit être au statut Payment::PENDING_STATUS ; chaque échec pose un flash
et renvoie vers physical_card_my_orders. Construit ensuite une ligne Stripe unique en gnf
libellée « Abonnement order_id. L'identifiant de session
Stripe est enregistré sur la commande (setStripeSessionId) avant la redirection, ce qui permet
la vérification ultérieure dans self::success(). Toute exception est convertie en flash error.
Route : /subscription/orders/{id}/pay (POST), nom app_subscription_order_pay.
Parameters
- $order : Order
-
Commande résolue par ParamConverter à partir de
{id}. - $request : Request
-
Requête POST portant le jeton CSRF
_token.
Tags
Attributes
- #[Route]
- '/subscription/orders/{id}/pay'
- $name: 'app_subscription_order_pay'
- $methods: ['POST']
Return values
Response —Redirection vers l'URL Stripe Checkout, ou vers physical_card_my_orders
en cas de contrôle non satisfait ou d'erreur Stripe.
success()
Confirmer le paiement Stripe d'une commande d'abonnement et activer l'abonnement.
public
success(Order $order) : Response
URL de retour de succès fournie à Stripe. Vérifie la propriété de la commande, l'existence
d'un paiement rattaché à une Subscription, l'absence de double confirmation
(statut déjà Payment::COMPLETED_STATUS) et la présence d'un identifiant de session
Stripe sur la commande. Relit ensuite la session via
StripeService::retrieveCheckoutSession() et n'agit que si
payment_status vaut paid ; sinon un flash warning signale un paiement non confirmé.
Dans une transaction Doctrine, le paiement passe en Payment::COMPLETED_STATUS,
la commande en Order::TERMINER, puis l'abonnement est activé via
SubscriptionService::activateSubscription() avant le commit.
Toute exception provoque un rollback et un flash error.
Route : /subscription/orders/{id}/success (GET), nom app_subscription_order_success.
Parameters
- $order : Order
-
Commande résolue par ParamConverter à partir de
{id}.
Tags
Attributes
- #[Route]
- '/subscription/orders/{id}/success'
- $name: 'app_subscription_order_success'
- $methods: ['GET']
Return values
Response —Redirection vers physical_card_my_orders dans tous les cas, le résultat
étant communiqué par message flash (success, info, warning ou error).