BCard - Documentation technique

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

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, commande EN_TRAITEMENT, paiement COMPLETED, puis e-mail de confirmation ;
  • commande entreprise : commande EN_TRAITEMENT, tous les paiements en attente COMPLETED, puis génération des cartes de visite des employés et e-mail de confirmation ;
  • commande boutique : commande EN_TRAITEMENT, paiements en attente COMPLETED, 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
throws
LogicException

Si le paiement n'est rattaché ni à un abonnement ni à une commande.

Throwable

Toute erreur de la transaction, relancée après rollback.

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.


        
On this page

Search results