DjomyCheckoutService
in package
Démarrage d'un paiement Djomy pour un paiement existant, avec retour sur une route de retour à jeton.
Mutualise ce que chaque parcours web faisait à la main : référence marchande, jeton de retour aléatoire,
création de la transaction « gateway » et enregistrement des références sur le Payment. Le retour du
navigateur est traité par DjomyReturnController (route djomy_payment_return, ou la
route propre à l'inscription entreprise), la confirmation asynchrone par le webhook ; les deux passent par
PaymentFulfillmentService.
Table of Contents
Constants
- PENDING_WINDOW_MINUTES : mixed = 10
- Durée pendant laquelle une transaction restée `PENDING` interdit d'en ouvrir une nouvelle.
Properties
- $djomyService : DjomyService
- $entityManager : EntityManagerInterface
- $fulfillment : PaymentFulfillmentService
- $logger : LoggerInterface
- $urlGenerator : UrlGeneratorInterface
Methods
- __construct() : mixed
- assertCanSwitchToOffline() : void
- Vérifie qu'un paiement dont la dernière transaction Djomy est connue peut passer au paiement à la livraison.
- describeFailure() : array{type: string, message: string}
- Décrit l'échec d'un démarrage pour l'utilisateur, sans exposer le message de l'exception.
- isConfigured() : bool
- Indique si Djomy est configuré (URL, identifiant et secret renseignés).
- start() : string
- Crée la transaction Djomy d'un paiement et renvoie l'URL de la page de paiement.
- assertPreviousAttemptAllows() : void
- Vérifie que la transaction précédente d'un paiement n'empêche pas d'en ouvrir une nouvelle.
Constants
PENDING_WINDOW_MINUTES
Durée pendant laquelle une transaction restée `PENDING` interdit d'en ouvrir une nouvelle.
public
mixed
PENDING_WINDOW_MINUTES
= 10
Properties
$djomyService read-only
private
DjomyService
$djomyService
$entityManager read-only
private
EntityManagerInterface
$entityManager
$fulfillment read-only
private
PaymentFulfillmentService
$fulfillment
$logger read-only
private
LoggerInterface
$logger
$urlGenerator read-only
private
UrlGeneratorInterface
$urlGenerator
Methods
__construct()
public
__construct(DjomyService $djomyService, PaymentFulfillmentService $fulfillment, EntityManagerInterface $entityManager, UrlGeneratorInterface $urlGenerator, LoggerInterface $logger) : mixed
Parameters
- $djomyService : DjomyService
-
Client de la passerelle.
- $fulfillment : PaymentFulfillmentService
-
Traite une transaction précédente trouvée déjà payée.
- $entityManager : EntityManagerInterface
-
Persistance des références.
- $urlGenerator : UrlGeneratorInterface
-
Génère l'URL de retour absolue.
- $logger : LoggerInterface
-
Journalise les anomalies, sans donnée sensible.
assertCanSwitchToOffline()
Vérifie qu'un paiement dont la dernière transaction Djomy est connue peut passer au paiement à la livraison.
public
assertCanSwitchToOffline(Payment $payment) : void
Même contrôle que pour une nouvelle tentative en ligne : transaction payée (le paiement est validé,
ALREADY_PAID), toujours en cours depuis moins de self::PENDING_WINDOW_MINUTES minutes
(IN_PROGRESS) ou statut illisible (CHECK_FAILED) interdisent le changement. Sans transaction, rien
n'est contrôlé.
Parameters
- $payment : Payment
-
Paiement en attente.
Tags
describeFailure()
Décrit l'échec d'un démarrage pour l'utilisateur, sans exposer le message de l'exception.
public
static describeFailure(Throwable $e) : array{type: string, message: string}
Parameters
- $e : Throwable
-
Exception levée par self::start().
Return values
array{type: string, message: string} —Type de flash (error, warning, success) et message.
isConfigured()
Indique si Djomy est configuré (URL, identifiant et secret renseignés).
public
isConfigured() : bool
Return values
bool —true si le paiement en ligne est utilisable.
start()
Crée la transaction Djomy d'un paiement et renvoie l'URL de la page de paiement.
public
start(Payment $payment, string $payerPhone, string $description[, string $returnRoute = 'djomy_payment_return' ]) : string
Le téléphone est normalisé (00224…) et Djomy doit être configuré, sans quoi une
DjomyStartException est levée avant tout appel. Le paiement est ensuite relu avec un verrou
d'écriture, dans une transaction ouverte ici si l'appelant n'en a pas déjà une, pour qu'un double clic
n'ouvre pas deux transactions. Si le paiement porte déjà une transaction, celle-ci est relue d'abord
(voir self::assertPreviousAttemptAllows()). La référence marchande est BCARD-PAY-<id>, suffixée
de -R<timestamp> quand une transaction existait. Les références (provider, référence, transaction,
jeton de retour, heure de démarrage) et la méthode DJOMY du paiement et de sa commande ne sont
enregistrées que si l'appel à Djomy réussit. Le jeton sert aussi d'URL d'annulation, Djomy ne renvoyant
pas le client en cas d'échec.
Parameters
- $payment : Payment
-
Paiement en attente (persisté, ou persisté ici si nouveau).
- $payerPhone : string
-
Numéro saisi par le payeur.
- $description : string
-
Libellé affiché au payeur.
- $returnRoute : string = 'djomy_payment_return'
-
Route de retour recevant le jeton (par défaut
djomy_payment_return).
Tags
Return values
string —URL de la page de paiement Djomy.
assertPreviousAttemptAllows()
Vérifie que la transaction précédente d'un paiement n'empêche pas d'en ouvrir une nouvelle.
private
assertPreviousAttemptAllows(Payment $payment, string $transactionId) : void
Le statut est relu chez Djomy : une erreur de lecture interdit tout (CHECK_FAILED, une transaction
potentiellement payée ne doit pas être doublée). SUCCESS valide le paiement puis lève ALREADY_PAID.
PENDING démarré depuis moins de self::PENDING_WINDOW_MINUTES minutes lève IN_PROGRESS avec le
temps restant ; au-delà (Djomy laisse les transactions abandonnées en PENDING), ou pour tout autre
statut, une nouvelle tentative est permise.
Parameters
- $payment : Payment
-
Paiement concerné.
- $transactionId : string
-
Transaction Djomy précédente.