BCard - Documentation technique

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

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

Si le changement de mode de paiement doit être refusé.

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

Si le téléphone est invalide, Djomy non configuré ou une tentative précédente bloque.

DjomyException

Si Djomy refuse ou n'est pas joignable.

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.

Tags
throws
DjomyStartException

Si la nouvelle tentative ou le changement de mode doit être refusé.


        
On this page

Search results