PaymentFulfillmentService
in package
Traitement unique d'un paiement en ligne réussi, quel que soit le parcours d'origine.
Appelé par le retour du navigateur (DjomyReturnController), par le webhook Djomy
et par les flux de relance : il ne dépend d'aucune session HTTP, de sorte que le résultat est identique
quelle que soit l'origine de la confirmation. L'opération est idempotente : un paiement déjà COMPLETED
n'est jamais retraité. Les effets de bord qui peuvent échouer sans remettre en cause l'encaissement
(génération des cartes, e-mails) sont exécutés après le commit et seulement journalisés en cas d'erreur.
Quatre natures de paiement sont reconnues, dans cet ordre : abonnement (délégué à SubscriptionPaymentService), carte physique, commande entreprise (articles liés à un employé) et commande de la boutique.
Table of Contents
Properties
- $businessCardGenerationService : BusinessCardGenerationService
- $entityManager : EntityManagerInterface
- $logger : LoggerInterface
- $mailerService : MailerService
- $physicalCardRepository : PhysicalCardRepository
- $subscriptionPaymentService : SubscriptionPaymentService
Methods
- __construct() : mixed
- fulfill() : bool
- Marque un paiement comme encaissé et applique ses conséquences métier.
- completeCompanyOrder() : void
- Génère les cartes de visite d'une commande entreprise payée puis envoie la confirmation.
- isCompanyOrder() : bool
- Indique si au moins un article de la commande est destiné à un employé (commande entreprise).
- notifyPhysicalCard() : void
- Envoie la confirmation d'une commande de carte physique, sans bloquer en cas d'échec.
- notifyProSubscription() : void
- Envoie la confirmation d'un abonnement Pro souscrit en libre-service, sans bloquer en cas d'échec.
- notifyShopOrder() : void
- Envoie la confirmation de paiement d'une commande de la boutique, sans bloquer en cas d'échec.
Properties
$businessCardGenerationService read-only
private
BusinessCardGenerationService
$businessCardGenerationService
$entityManager read-only
private
EntityManagerInterface
$entityManager
$logger read-only
private
LoggerInterface
$logger
$mailerService read-only
private
MailerService
$mailerService
$physicalCardRepository read-only
private
PhysicalCardRepository
$physicalCardRepository
$subscriptionPaymentService read-only
private
SubscriptionPaymentService
$subscriptionPaymentService
Methods
__construct()
public
__construct(EntityManagerInterface $entityManager, SubscriptionPaymentService $subscriptionPaymentService, MailerService $mailerService, BusinessCardGenerationService $businessCardGenerationService, PhysicalCardRepository $physicalCardRepository, LoggerInterface $logger) : mixed
Parameters
- $entityManager : EntityManagerInterface
-
Transaction, verrou et persistance.
- $subscriptionPaymentService : SubscriptionPaymentService
-
Traitement des paiements liés à un abonnement.
- $mailerService : MailerService
-
E-mails de confirmation.
- $businessCardGenerationService : BusinessCardGenerationService
-
Génération des cartes des commandes entreprise.
- $physicalCardRepository : PhysicalCardRepository
-
Retrouve la carte physique liée à une commande.
- $logger : LoggerInterface
-
Trace l'origine de chaque validation et les échecs non bloquants.
fulfill()
Marque un paiement comme encaissé et applique ses conséquences métier.
public
fulfill(Payment $payment, string $source[, string|null $transactionId = null ]) : bool
Paiement lié à un abonnement : délégué à SubscriptionPaymentService::markPaymentCompleted()
(paiement COMPLETED, commande TERMINER, abonnement activé) ; pour un abonnement Pro souscrit en
libre-service (ni commande ni entreprise), l'e-mail de confirmation est ensuite envoyé.
Autres paiements, dans une transaction avec verrou d'écriture sur le paiement :
- carte physique : carte
CONFIRMED, commandeEN_TRAITEMENT, paiementCOMPLETED, puis e-mail de confirmation ; - commande entreprise : commande
EN_TRAITEMENT, tous les paiements en attenteCOMPLETED, puis génération des cartes de visite des employés et e-mail de confirmation ; - commande boutique : commande
EN_TRAITEMENT, paiements en attenteCOMPLETED, puis e-mail de confirmation. L'e-mail d'accès d'un compte créé pour un invité est envoyé à la création de la commande, pas ici.
Si la commande est annulée ou remboursée, le paiement est quand même marqué COMPLETED (l'argent est
encaissé) mais la commande n'est pas modifiée, rien n'est généré, et un message critical signale un
remboursement à faire. Si le paiement est déjà COMPLETED avec une autre transaction que celle reçue,
un double paiement possible est journalisé en critical.
Parameters
- $payment : Payment
-
Paiement à solder.
- $source : string
-
Origine de la validation (
djomy_return,djomy_webhook…), pour les journaux. - $transactionId : string|null = null
-
Transaction Djomy réussie à l'origine de l'appel, si connue.
Tags
Return values
bool —true si le paiement vient d'être validé, false s'il l'était déjà.
completeCompanyOrder()
Génère les cartes de visite d'une commande entreprise payée puis envoie la confirmation.
private
completeCompanyOrder(Order $order) : void
Un échec de génération ou d'envoi est journalisé : l'encaissement reste acquis et les cartes peuvent être créées manuellement depuis le tableau de bord.
Parameters
- $order : Order
-
Commande entreprise payée.
isCompanyOrder()
Indique si au moins un article de la commande est destiné à un employé (commande entreprise).
private
isCompanyOrder(Order $order) : bool
Parameters
- $order : Order
-
Commande à examiner.
Return values
bool —true pour une commande de cartes entreprise.
notifyPhysicalCard()
Envoie la confirmation d'une commande de carte physique, sans bloquer en cas d'échec.
private
notifyPhysicalCard(Order $order) : void
Parameters
- $order : Order
-
Commande payée.
notifyProSubscription()
Envoie la confirmation d'un abonnement Pro souscrit en libre-service, sans bloquer en cas d'échec.
private
notifyProSubscription(Payment $payment) : void
Parameters
- $payment : Payment
-
Paiement d'abonnement qui vient d'être validé.
notifyShopOrder()
Envoie la confirmation de paiement d'une commande de la boutique, sans bloquer en cas d'échec.
private
notifyShopOrder(Order $order) : void
Parameters
- $order : Order
-
Commande payée.