BCard - Documentation technique

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

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
throws
AccessDeniedException

Si la commande n'appartient pas à l'utilisateur connecté.

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 - Annuel|Mensuel », dont le montant est celui du paiement converti en entier, et crée la session Checkout avec la métadonnée 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
throws
AccessDeniedException

Si la commande n'appartient pas à l'utilisateur connecté.

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
throws
AccessDeniedException

Si la commande n'appartient pas à l'utilisateur connecté.

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).


        
On this page

Search results