BCard - Documentation technique

SubscriptionPaymentService
in package

Logique commune de passage d'un paiement d'abonnement à l'état « payé ».

Utilisée par la validation manuelle d'un administrateur, par le retour de la passerelle Djomy et par son webhook : le paiement passe à COMPLETED, la commande liée à TERMINER et l'abonnement est activé, le tout dans une transaction. L'opération est idempotente, ce qui permet de recevoir plusieurs notifications pour un même paiement sans effet de bord.

Table of Contents

Properties

$entityManager  : EntityManagerInterface
$logger  : LoggerInterface
$subscriptionService  : SubscriptionService

Methods

__construct()  : mixed
markPaymentCompleted()  : bool
Marque un paiement comme encaissé et active l'abonnement associé.
reportPossibleDoublePayment()  : void
Journalise en `critical` un succès reçu pour un paiement déjà encaissé avec une autre transaction.

Properties

Methods

__construct()

public __construct(EntityManagerInterface $entityManager, SubscriptionService $subscriptionService, LoggerInterface $logger) : mixed
Parameters
$entityManager : EntityManagerInterface

Transaction et persistance.

$subscriptionService : SubscriptionService

Activation de l'abonnement rattaché au paiement.

$logger : LoggerInterface

Trace l'origine de chaque validation.

markPaymentCompleted()

Marque un paiement comme encaissé et active l'abonnement associé.

public markPaymentCompleted(Payment $payment[, string|null $source = null ][, string|null $transactionId = null ]) : bool

Dans une transaction, le paiement est relu avec un verrou d'écriture pour absorber les appels concurrents (retour navigateur et webhook simultanés) : s'il est déjà COMPLETED, rien n'est modifié. Sinon, faute d'abonnement lié, un warning est journalisé et une exception levée (le paiement n'est pas marqué payé) ; autrement le paiement passe à COMPLETED (avec updatedAt), la commande liée à Order::TERMINER, puis l'abonnement lié est activé via SubscriptionService::activateSubscription().

Si le paiement est déjà COMPLETED et que la transaction reçue diffère de celle enregistrée, un double paiement possible est journalisé en critical (voir self::reportPossibleDoublePayment()).

Parameters
$payment : Payment

Paiement à solder.

$source : string|null = null

Origine de la validation (djomy_return, djomy_webhook, admin…), pour les journaux.

$transactionId : string|null = null

Transaction du prestataire à l'origine de l'appel, si connue.

Tags
throws
LogicException

Si aucun abonnement n'est rattaché au paiement.

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à.

reportPossibleDoublePayment()

Journalise en `critical` un succès reçu pour un paiement déjà encaissé avec une autre transaction.

public reportPossibleDoublePayment(Payment $payment, string|null $transactionId, string|null $source) : void

Le client a alors probablement payé deux fois : un remboursement manuel est à étudier. Sans effet si la transaction reçue est inconnue ou identique à celle enregistrée.

Parameters
$payment : Payment

Paiement déjà COMPLETED.

$transactionId : string|null

Transaction réussie reçue.

$source : string|null

Origine de l'appel, pour les journaux.


        
On this page

Search results