PaymentController
extends AbstractController
in package
Contrôleur du panier, du tunnel de commande et du paiement des cartes physiques vendues à l'unité.
Le panier est stocké en session sous la clé cart, indexé par identifiant de produit Card ;
il ne contient que des données scalaires (identifiant, quantité, police, couleur, design,
fichier de design, options de couleur et d'impression) et est réhydraté depuis la base à chaque
affichage. Le tunnel accepte les visiteurs non authentifiés : un compte ROLE_USER est créé à
la volée avec un jeton de réinitialisation de mot de passe, et un e-mail d'accès lui est envoyé
une fois la commande confirmée. Trois méthodes de paiement sont prévues — carte bancaire via
Stripe Checkout, paiement à la livraison, et Orange Money qui est désactivé et provoque une
erreur. Les montants sont exprimés en francs guinéens (gnf) et arrondis à l'entier pour
Stripe.
Aucun préfixe de route ni contrôle d'accès au niveau de la classe : les pages sont accessibles
sans authentification, la propriété d'une commande étant vérifiée soit par l'utilisateur
connecté, soit par l'identifiant checkout_order_id conservé en session pour les invités.
Table of Contents
Constants
- DEFAULT_STRIPE_IMAGE_URL : mixed = 'https://card.binn.pro/assets/new_design/images...
- Image de repli utilisée dans les lignes Stripe lorsqu'un produit n'a aucune image.
Properties
- $logger : LoggerInterface
Methods
- __construct() : mixed
- addCart() : Response
- Ajoute un produit au panier, avec ses options de personnalisation et un éventuel fichier de design.
- cart() : Response
- Affiche le contenu du panier.
- continueToPayment() : Response
- Allows a user to continue with a previously initiated payment.
- miniCart() : JsonResponse
- Retourne en JSON un résumé du panier destiné au mini-panier de l'en-tête.
- paymentCancel() : Response
- Handles the cancellation of a payment, redirecting the user to the homepage.
- paymentSuccess() : Response
- Finalise une commande après paiement et affiche la page de confirmation.
- procedeToPayment() : Response
- Handles the entire checkout process.
- removeCart() : Response
- Retire une ligne du panier.
- resumeOrderPayment() : Response
- Propose à un utilisateur connecté de choisir un mode de règlement pour reprendre une commande en attente de paiement.
- showOrder() : Response
- Displays the success page after a successful payment and clears the user's cart.
- updateCart() : Response
- Met à jour les quantités des lignes du panier.
- generatePassword() : string
- Generates a random password for new user accounts.
- handlePaymentException() : string
- Handles various exceptions that can occur during the payment process.
- hydrateCartForView() : array<int|string, array<string, mixed>>
- Recharge les entités `Card` d'un panier normalisé pour l'affichage.
- normalizeCart() : array<int|string, array<string, mixed>>
- Normalise un panier de session pour n'y conserver que des données scalaires.
- parseMoney() : float
- Convertit un montant stocké sous forme de chaîne en flottant.
- processCashOnDeliveryPayment() : Response
- Processes cash on delivery payments.
- processCreditCardPayment() : Response
- Processes credit card payments using Stripe.
- processOrangeMoneyPayment() : Response
- Processes payments made via Orange Money.
- sendWelcomeEmail() : void
- Sends a welcome email to a new user with their credentials.
Constants
DEFAULT_STRIPE_IMAGE_URL
Image de repli utilisée dans les lignes Stripe lorsqu'un produit n'a aucune image.
private
mixed
DEFAULT_STRIPE_IMAGE_URL
= 'https://card.binn.pro/assets/new_design/images/bcard.png'
Properties
$logger
private
LoggerInterface
$logger
Methods
__construct()
public
__construct(LoggerInterface $logger) : mixed
Parameters
- $logger : LoggerInterface
-
Journalise les échecs d'upload, d'envoi d'e-mail, d'appel Stripe et de traitement de commande.
addCart()
Ajoute un produit au panier, avec ses options de personnalisation et un éventuel fichier de design.
public
addCart(Card $card, Request $request, SessionInterface $session, UploaderService $uploaderService) : Response
La quantité est ramenée à un minimum de 1 ; la police vaut Arial et le design classic
par défaut. Si un fichier design_file est fourni, il subit trois contrôles successifs,
chacun se soldant en cas d'échec par un message flash et un retour vers la fiche produit :
validité de l'upload, taille inférieure au paramètre design_file_max_bytes, et type
accepté (MIME image/png, image/jpeg, image/jpg, application/pdf ou extension png,
jpg, jpeg, pdf). Le répertoire design_directory est créé s'il n'existe pas, puis le
fichier est déposé via UploaderService::uploadFile() ; une FileException est
journalisée et signalée à l'utilisateur. L'entrée est indexée par l'identifiant du produit,
ce qui écrase toute personnalisation antérieure du même produit au lieu de cumuler les
quantités.
Route : /panier/ajouter/{id} (POST), nom app_add_cart. Accès public.
Parameters
- $card : Card
-
Produit à ajouter, résolu depuis le paramètre de route
id. - $request : Request
-
Requête HTTP contenant les options et le fichier
design_file. - $session : SessionInterface
-
Session dans laquelle le panier est enregistré.
- $uploaderService : UploaderService
-
Service d'upload du fichier de design.
Attributes
- #[Route]
- '/panier/ajouter/{id}'
- $name: 'app_add_cart'
- $methods: ['POST']
Return values
Response —Redirection vers app_cart en cas de succès, ou vers app_product_retail (avec l'identifiant du produit) si le fichier de design est refusé.
cart()
Affiche le contenu du panier.
public
cart(SessionInterface $session, EntityManagerInterface $entityManager) : Response
Lit le panier en session en le remplaçant par un tableau vide s'il n'est pas un tableau, le
normalise via PaymentController::normalizeCart(), réécrit la version normalisée en
session (ce qui purge les anciennes entrées contenant des entités sérialisées), puis
l'enrichit des entités Card avec PaymentController::hydrateCartForView().
Route : /panier (GET), nom app_cart. Accès public.
Parameters
- $session : SessionInterface
-
Session contenant la clé
cart. - $entityManager : EntityManagerInterface
-
Utilisé pour recharger les produits du panier.
Attributes
- #[Route]
- '/panier'
- $name: 'app_cart'
- $methods: ['GET']
Return values
Response —Page HTML home/cart.html.twig avec la variable cart (array<int|string, array<string, mixed>>).
continueToPayment()
Allows a user to continue with a previously initiated payment.
public
continueToPayment(Request $request, EntityManagerInterface $entityManager, SessionInterface $session, StripeService $stripeService) : Response
Reprend un paiement Stripe déjà initié. L'identifiant de commande est lu dans le paramètre de
requête order, avec repli sur checkout_order_id en session ; à défaut, ou si la commande
est introuvable, l'utilisateur est renvoyé au panier. Le contrôle d'accès est identique à
celui de PaymentController::showOrder(). Une commande déjà en Order::EN_TRAITEMENT
redirige vers payment_success, et une commande dont la méthode n'est pas
Payment::CREDIT_CARD est déclarée non reprenable. La session Stripe existante est ensuite
relue : si elle est déjà payée, redirection vers payment_success ; si elle expose encore
une URL, l'utilisateur y est renvoyé. Aucune nouvelle session n'est créée ici, contrairement
à PaymentController::resumeOrderPayment().
Route : /continue-to-paiement (toutes méthodes), nom app_continue_payment. Accès public sous réserve du contrôle de propriété.
Parameters
- $request : Request
-
Requête HTTP contenant éventuellement le paramètre
order. - $entityManager : EntityManagerInterface
-
Charge la commande.
- $session : SessionInterface
-
Session contenant
checkout_order_id. - $stripeService : StripeService
-
Récupération de la session Stripe Checkout.
Attributes
- #[Route]
- '/continue-to-paiement'
- $name: 'app_continue_payment'
Return values
Response —Redirection vers l'URL Stripe, vers payment_success si le paiement est déjà réglé, vers app_cart si aucune commande n'est exploitable, vers app_home en cas d'accès refusé, ou vers procede_to_payment si la reprise est impossible.
miniCart()
Retourne en JSON un résumé du panier destiné au mini-panier de l'en-tête.
public
miniCart(SessionInterface $session, EntityManagerInterface $entityManager) : JsonResponse
Normalise et réenregistre le panier en session, puis le réhydrate. Les lignes de quantité nulle ou négative sont ignorées. Les options de couleur et d'impression ne sont prises en compte que si elles existent, sont actives et appartiennent bien au produit de la ligne : cette validation évite qu'une option d'un autre produit gonfle le prix. Le prix unitaire additionne le prix du produit et celui des options retenues ; le total et les montants sont arrondis à l'entier. L'illustration est la première image du produit, à défaut une image par défaut.
Route : /panier/mini (GET), nom app_cart_mini. Accès public.
Parameters
- $session : SessionInterface
-
Session contenant le panier.
- $entityManager : EntityManagerInterface
-
Charge les produits et les options.
Attributes
- #[Route]
- '/panier/mini'
- $name: 'app_cart_mini'
- $methods: ['GET']
Return values
JsonResponse —array{count: int, subtotal: int, currency: string, items: list<array{cardId: int, name: string, quantity: int, unitPrice: int, lineTotal: int, imageUrl: string}>} (HTTP 200).
paymentCancel()
Handles the cancellation of a payment, redirecting the user to the homepage.
public
paymentCancel() : Response
Page de retour utilisée comme URL d'annulation par Stripe Checkout. Aucune donnée n'est modifiée : ni la commande ni le paiement ne changent de statut, et le panier est conservé pour permettre une nouvelle tentative. Un simple message flash d'erreur est ajouté.
Route : /payment-cancel (toutes méthodes), nom payment_cancel. Accès public.
Attributes
- #[Route]
- '/payment-cancel'
- $name: 'payment_cancel'
Return values
Response —Redirection vers app_home.
paymentSuccess()
Finalise une commande après paiement et affiche la page de confirmation.
public
paymentSuccess(Order $order, SessionInterface $session, MailerService $mailerService, EntityManagerInterface $entityManager, StripeService $stripeService) : Response
Applique le même contrôle d'accès que PaymentController::showOrder() : propriétaire
connecté ou identifiant de commande présent en session pour un invité. Si la commande est
déjà en Order::EN_TRAITEMENT, le panier et l'identifiant de session sont nettoyés et la
page de confirmation est rendue avec un message signalant un traitement déjà effectué. Pour
une commande réglée par carte, l'identifiant de session Stripe est obligatoire et la session
est relue : une absence d'identifiant, un échec de récupération ou un payment_status
différent de paid renvoie l'utilisateur vers procede_to_payment avec un message
d'erreur. La mise à jour du statut se fait dans une transaction DBAL : la commande passe en
Order::EN_TRAITEMENT et, sauf en paiement à la livraison, les paiements en attente passent
en COMPLETED_STATUS. L'e-mail de confirmation est ensuite envoyé — avec un objet et des
instructions adaptés au mode de règlement — suivi le cas échéant de l'e-mail d'accès du
compte créé pour un invité ; un échec d'envoi est journalisé sans bloquer. Enfin le panier
et checkout_order_id sont supprimés de la session.
Route : /payment-success/{order} (toutes méthodes), nom payment_success. Accès public sous réserve du contrôle de propriété.
Parameters
- $order : Order
-
Commande concernée, résolue depuis le paramètre de route
order. - $session : SessionInterface
-
Session contenant le panier et les indicateurs de tunnel.
- $mailerService : MailerService
-
Envoi des e-mails de confirmation et d'accès.
- $entityManager : EntityManagerInterface
-
Persistance et gestion de la transaction.
- $stripeService : StripeService
-
Vérification de la session Stripe Checkout.
Attributes
- #[Route]
- '/payment-success/{order}'
- $name: 'payment_success'
Return values
Response —Page HTML payment/confirmation.html.twig, redirection vers procede_to_payment si le paiement n'est pas confirmé, ou vers app_home en cas d'accès refusé ou d'erreur inattendue.
procedeToPayment()
Handles the entire checkout process.
public
procedeToPayment(Request $request, SessionInterface $session, UserPasswordHasherInterface $userPasswordHasher, MailerService $mailerService, StripeService $stripeService, EntityManagerInterface $entityManager) : Response
It manages the checkout form, creates a new user if one does not exist, and delegates to the appropriate payment processing method based on user selection.
Traite l'intégralité du tunnel de commande. Le panier est normalisé puis réhydraté ; s'il est
vide, l'utilisateur est renvoyé à l'accueil. Lorsqu'un utilisateur est connecté, le
formulaire CheckoutType est prérempli avec son nom (découpé en prénom/nom sur le
premier espace), son e-mail et son téléphone. À la soumission valide, l'e-mail, le prénom et
le nom sont exigés, puis le total est recalculé côté serveur à partir des prix en base : une
ligne sans produit valide ou de quantité nulle interrompt le processus. Les options de
couleur et d'impression ne sont retenues que si elles sont actives et rattachées au produit.
Si aucun utilisateur n'est connecté, un compte existant portant le même e-mail est réutilisé,
sinon un compte ROLE_USER est créé avec un mot de passe aléatoire et un jeton de
réinitialisation, les indicateurs checkout_new_user et checkout_new_user_email étant
placés en session. Les OrderItem sont ensuite construits (le fichier de design prime sur le
design textuel) et un Payment en PENDING_STATUS est rattaché à la commande. Seules les
méthodes orange_money, credit_card et cash_on_delivery sont acceptées. La persistance
a lieu dans une transaction DBAL explicite : orange_money lève systématiquement une
InvalidArgumentException (indisponible), cash_on_delivery valide la transaction, envoie
l'e-mail de commande puis vide le panier, et credit_card crée une session Stripe Checkout,
enregistre son identifiant sur la commande et redirige vers elle sans vider le panier. Toute
exception provoque un rollBack(), un message flash adapté (e-mail déjà utilisé, message
métier, ou erreur générique) et une journalisation ; un try/catch externe rattrape les
erreurs restantes et redirige vers l'accueil.
Route : /paiement (toutes méthodes), nom procede_to_payment. Accès public (les invités sont pris en charge).
Parameters
- $request : Request
-
Requête HTTP courante (formulaire, schéma et hôte pour les images Stripe).
- $session : SessionInterface
-
Session contenant le panier et les indicateurs de tunnel.
- $userPasswordHasher : UserPasswordHasherInterface
-
Hache le mot de passe aléatoire du compte créé pour un invité.
- $mailerService : MailerService
-
Envoi des e-mails de commande et d'accès au compte.
- $stripeService : StripeService
-
Création de la session Stripe Checkout.
- $entityManager : EntityManagerInterface
-
Persistance et gestion de la transaction.
Attributes
- #[Route]
- '/paiement'
- $name: 'procede_to_payment'
Return values
Response —Page HTML payment/index.html.twig, redirection vers Stripe, vers payment_success en paiement à la livraison, ou vers app_home si le panier est vide, invalide ou en cas d'erreur inattendue.
removeCart()
Retire une ligne du panier.
public
removeCart(int $id, SessionInterface $session) : Response
Supprime l'entrée dont la clé correspond à l'identifiant fourni, sans vérifier son existence : une clé inconnue n'a aucun effet et ne produit aucun message.
Route : /panier/supprimer/{id} (POST, GET), nom app_remove_cart. Accès public.
Parameters
- $id : int
-
Clé de la ligne à retirer, c'est-à-dire l'identifiant du produit.
- $session : SessionInterface
-
Session contenant le panier.
Attributes
- #[Route]
- '/panier/supprimer/{id}'
- $name: 'app_remove_cart'
- $methods: ['POST', 'GET']
Return values
Response —Redirection vers app_cart.
resumeOrderPayment()
Propose à un utilisateur connecté de choisir un mode de règlement pour reprendre une commande en attente de paiement.
public
resumeOrderPayment(Order $order, Request $request, EntityManagerInterface $entityManager, StripeService $stripeService) : Response
L'accès exige un utilisateur connecté propriétaire de la commande. Une commande déjà en
Order::EN_TRAITEMENT redirige vers son détail, et toute commande dont le statut n'est pas
Order::EN_ATTENTE_PAIEMENT est refusée. Un formulaire construit à la volée, protégé par un
jeton CSRF propre à la commande, propose Orange Money, la carte bancaire (choix par défaut)
et le paiement à la livraison. Orange Money est refusé par un message d'erreur. Le montant
est recalculé depuis le total de la commande via PaymentController::parseMoney() :
s'il est nul ou négatif, la commande est directement confirmée en Order::EN_TRAITEMENT. Un
paiement en attente existant est réutilisé, sinon un nouveau Payment est créé et rattaché.
En paiement à la livraison, la méthode est enregistrée et l'utilisateur est renvoyé vers
payment_success qui se charge de la suite (statut, e-mails) ; en carte bancaire, une
session Stripe est créée avec une ligne unique « Commande #
Route : /paiement/reprendre/{order} (GET, POST), nom app_resume_order_payment. Utilisateur connecté et propriétaire de la commande.
Parameters
- $order : Order
-
Commande à reprendre, résolue depuis le paramètre de route
order. - $request : Request
-
Requête HTTP courante (soumission du formulaire).
- $entityManager : EntityManagerInterface
-
Persistance des paiements et de la commande.
- $stripeService : StripeService
-
Création de la session Stripe Checkout.
Attributes
- #[Route]
- '/paiement/reprendre/{order}'
- $name: 'app_resume_order_payment'
- $methods: ['GET', 'POST']
Return values
Response —Page HTML payment/resume_order.html.twig, redirection vers Stripe, vers payment_success, vers app_my_order_show si la commande est déjà traitée, vers physical_card_my_orders si elle n'est pas en attente de paiement ou si le montant est nul, ou vers app_home en cas d'accès refusé.
showOrder()
Displays the success page after a successful payment and clears the user's cart.
public
showOrder(Order $order, SessionInterface $session) : Response
Affiche le détail d'une commande. Contrairement à ce que suggère la description historique
ci-dessus, aucune donnée n'est modifiée et le panier n'est pas vidé. Le contrôle d'accès est
double : un utilisateur connecté doit être le propriétaire de la commande, tandis qu'un
visiteur non authentifié n'y accède que si l'identifiant checkout_order_id conservé en
session correspond à la commande demandée. Tout écart provoque un message flash d'erreur et
un retour à l'accueil.
Route : /my-order/{order} (toutes méthodes), nom app_my_order_show. Accès public sous réserve du contrôle décrit ci-dessus.
Parameters
- $order : Order
-
Commande à afficher, résolue depuis le paramètre de route
order. - $session : SessionInterface
-
Session contenant
checkout_order_idpour les invités.
Attributes
- #[Route]
- '/my-order/{order}'
- $name: 'app_my_order_show'
Return values
Response —Page HTML payment/confirmation.html.twig, ou redirection vers app_home si l'accès est refusé.
updateCart()
Met à jour les quantités des lignes du panier.
public
updateCart(Request $request, SessionInterface $session) : Response
Les nouvelles quantités sont lues dans le tableau de requête quantity, indexé par la clé
de la ligne du panier. Les lignes absentes de ce tableau sont laissées inchangées, et chaque
quantité est ramenée à un minimum de 1. Aucune suppression n'est effectuée : mettre 0 revient
à mettre 1.
Route : /panier/mettre-a-jour (POST), nom app_update_cart. Accès public.
Parameters
- $request : Request
-
Requête HTTP contenant le tableau
quantity. - $session : SessionInterface
-
Session contenant le panier.
Attributes
- #[Route]
- '/panier/mettre-a-jour'
- $name: 'app_update_cart'
- $methods: ['POST']
Return values
Response —Redirection vers app_cart.
generatePassword()
Generates a random password for new user accounts.
private
generatePassword([int $length = 12 ]) : string
Tire aléatoirement des caractères, via random_int(), dans un alphabet composé de chiffres,
de lettres minuscules et majuscules et de symboles. Si random_int() échoue, un repli non
aléatoire est utilisé : la chaîne Password suivie d'un uniqid() et de !@. Méthode
utilitaire actuellement non appelée, le tunnel de commande générant lui-même un mot de passe
via bin2hex(random_bytes(16)).
Parameters
- $length : int = 12
-
Longueur du mot de passe à générer (12 par défaut).
Return values
string —Mot de passe généré.
handlePaymentException()
Handles various exceptions that can occur during the payment process.
private
handlePaymentException(Throwable $e) : string
Traduit une exception en message destiné à l'utilisateur : erreur d'envoi d'e-mail pour une
TransportExceptionInterface, adresse e-mail déjà associée à un compte pour une
UniqueConstraintViolationException, et sinon un message générique auquel le message
d'origine de l'exception est concaténé. Méthode utilitaire actuellement non appelée, la
gestion d'erreurs étant inline dans PaymentController::procedeToPayment().
Parameters
- $e : Throwable
-
Exception survenue pendant le traitement du paiement.
Return values
string —Message d'erreur en français à afficher à l'utilisateur.
hydrateCartForView()
Recharge les entités `Card` d'un panier normalisé pour l'affichage.
private
hydrateCartForView(array<int|string, array<string, mixed>> $cart, EntityManagerInterface $entityManager) : array<int|string, array<string, mixed>>
Collecte les identifiants présents, effectue une unique requête findBy sur les
identifiants dédoublonnés, puis construit une table de correspondance. Chaque ligne se voit
ajouter une clé card ; les lignes dont le produit n'existe plus en base sont
silencieusement écartées du résultat, sans être supprimées de la session.
Parameters
- $cart : array<int|string, array<string, mixed>>
-
Panier normalisé.
- $entityManager : EntityManagerInterface
-
Utilisé pour charger les produits.
Return values
array<int|string, array<string, mixed>> —Panier enrichi d'une clé card contenant l'entité Card.
normalizeCart()
Normalise un panier de session pour n'y conserver que des données scalaires.
private
normalizeCart(array<int|string, mixed> $rawCart) : array<int|string, array<string, mixed>>
Ignore les entrées qui ne sont pas des tableaux. L'identifiant de produit est repris de la
clé cardId ou, pour les paniers issus d'un ancien format, extrait de l'entité Card
stockée sous la clé card ; cette entité est ensuite retirée afin d'éviter de sérialiser un
objet Doctrine en session. Les entrées sans identifiant exploitable sont écartées, les clés
d'origine étant préservées pour les autres.
Parameters
- $rawCart : array<int|string, mixed>
-
Panier brut lu en session.
Return values
array<int|string, array<string, mixed>> —Panier normalisé, chaque ligne comportant une clé cardId entière.
parseMoney()
Convertit un montant stocké sous forme de chaîne en flottant.
private
parseMoney(string|null $value) : float
Retourne 0.0 si la valeur est nulle. Sinon les espaces sont supprimés et les virgules
converties en points avant le transtypage, ce qui permet d'accepter des prix saisis au
format français (25 000,50).
Parameters
- $value : string|null
-
Montant textuel provenant d'une entité (produit, option, commande).
Return values
float —Montant numérique, 0.0 si la valeur est nulle ou non numérique.
processCashOnDeliveryPayment()
Processes cash on delivery payments.
private
processCashOnDeliveryPayment(Order $order, Payment $payment, SessionInterface $session, MailerService $mailerService, string $email) : Response
Ancienne implémentation du paiement à la livraison, remplacée par la branche
cash_on_delivery de PaymentController::procedeToPayment() et non appelée. La
commande passe en Order::EN_TRAITEMENT avec la méthode Payment::DELIVERY_CASH, le
paiement reste en PENDING_STATUS, l'identifiant de commande est mémorisé en session et
l'e-mail de confirmation est envoyé. Si un compte a été créé pour un invité
(checkout_new_user) et que l'e-mail correspond à celui de la commande, l'e-mail d'accès est
envoyé et les indicateurs de session sont nettoyés ; un échec d'envoi est journalisé sans
bloquer. Le panier est ensuite vidé. Aucun flush() n'est réalisé ici : la persistance
incombe à l'appelant.
Parameters
- $order : Order
-
Commande à confirmer.
- $payment : Payment
-
Paiement associé à la commande.
- $session : SessionInterface
-
Session contenant le panier et les indicateurs de tunnel.
- $mailerService : MailerService
-
Envoi des e-mails de confirmation et d'accès.
- $email : string
-
Adresse e-mail destinataire de l'e-mail de confirmation.
Tags
Return values
Response —Redirection vers payment_success avec l'identifiant de la commande.
processCreditCardPayment()
Processes credit card payments using Stripe.
private
processCreditCardPayment(Order $order, Payment $payment, Request $request, SessionInterface $session, StripeService $stripeService, MailerService $mailerService, EntityManagerInterface $entityManager, string $email) : Response
Ancienne implémentation du règlement par carte, aujourd'hui remplacée par la branche
credit_card intégrée à PaymentController::procedeToPayment() et non appelée. Elle
construit les lignes Stripe à partir du panier en session en ignorant les produits
introuvables ou de quantité nulle, en ne retenant que les options actives appartenant au
produit, et en calculant le prix unitaire arrondi à l'entier. La commande passe en
Order::EN_ATTENTE avec la méthode Payment::CREDIT_CARD, l'identifiant de commande est
mémorisé en session, un e-mail « en attente de paiement » est envoyé puis le paiement est
placé en PENDING_STATUS. Attention : l'identifiant de session Stripe n'est pas enregistré
sur la commande, contrairement au flux actuellement utilisé.
Parameters
- $order : Order
-
Commande à régler.
- $payment : Payment
-
Paiement associé à la commande.
- $request : Request
-
Requête HTTP (schéma et hôte pour les URL d'images).
- $session : SessionInterface
-
Session contenant le panier.
- $stripeService : StripeService
-
Création de la session Stripe Checkout.
- $mailerService : MailerService
-
Envoi de l'e-mail d'attente de paiement.
- $entityManager : EntityManagerInterface
-
Chargement des produits et des options.
- $email : string
-
Adresse e-mail destinataire de l'e-mail.
Tags
Return values
Response —Redirection vers l'URL de la session Stripe Checkout.
processOrangeMoneyPayment()
Processes payments made via Orange Money.
private
processOrangeMoneyPayment(Order $order, Payment $payment, string $orangeMoneyNumber, SessionInterface $session, MailerService $mailerService, string $email) : Response
Méthode neutralisée et actuellement inutilisée : elle se contente d'ajouter un message flash signalant l'indisponibilité d'Orange Money et de rediriger vers le panier. L'implémentation historique (enregistrement de la méthode de paiement, passage en attente, envoi de l'e-mail d'instructions, vidage du panier) est conservée en commentaire et n'est plus exécutée ; aucun des paramètres n'est donc utilisé.
Parameters
- $order : Order
-
Commande concernée (ignorée).
- $payment : Payment
-
Paiement associé (ignoré).
- $orangeMoneyNumber : string
-
Numéro Orange Money saisi (ignoré).
- $session : SessionInterface
-
Session courante (ignorée).
- $mailerService : MailerService
-
Service d'envoi d'e-mails (ignoré).
- $email : string
-
Adresse e-mail du client (ignorée).
Tags
Return values
Response —Redirection vers app_cart avec un message d'information.
sendWelcomeEmail()
Sends a welcome email to a new user with their credentials.
private
sendWelcomeEmail(MailerService $mailerService, string $email, string $password, string $firstName) : void
Envoie un e-mail de bienvenue reprenant le template create_credential, auquel sont
transmis l'adresse e-mail, le mot de passe en clair et le prénom du destinataire. Méthode
utilitaire actuellement non appelée : le tunnel de commande envoie désormais un e-mail de
réinitialisation de mot de passe plutôt que des identifiants en clair.
Parameters
- $mailerService : MailerService
-
Service d'envoi d'e-mails.
- $email : string
-
Adresse e-mail du nouvel utilisateur.
- $password : string
-
Mot de passe en clair communiqué à l'utilisateur.
- $firstName : string
-
Prénom utilisé dans le corps de l'e-mail.