DjomyWebhookController
extends AbstractController
in package
Point d'entrée des notifications (webhooks) de la passerelle de paiement Djomy.
La route est publique (^/webhook en PUBLIC_ACCESS) : l'authenticité de l'appel repose sur la
signature X-Webhook-Signature, vérifiée par DjomyService::verifyWebhookSignature(), puis sur une
relecture du statut auprès de Djomy avant toute activation. Les formats V2 (data.payment) et V1 (champs
du paiement directement dans data) sont acceptés.
Table of Contents
Properties
- $djomyService : DjomyService
- $entityManager : EntityManagerInterface
- $logger : LoggerInterface
- $paymentFulfillmentService : PaymentFulfillmentService
Methods
- __construct() : mixed
- __invoke() : Response
- Traite une notification Djomy.
- extractPaymentInfo() : array<string, mixed>
- Isole les champs du paiement d'une notification, au format V2 (`data.payment`) ou V1 (`data`).
- findPayment() : Payment|null
- Retrouve le paiement Djomy concerné par une notification.
Properties
$djomyService read-only
private
DjomyService
$djomyService
$entityManager read-only
private
EntityManagerInterface
$entityManager
$logger read-only
private
LoggerInterface
$logger
$paymentFulfillmentService read-only
private
PaymentFulfillmentService
$paymentFulfillmentService
Methods
__construct()
public
__construct(DjomyService $djomyService, PaymentFulfillmentService $paymentFulfillmentService, EntityManagerInterface $entityManager, LoggerInterface $logger) : mixed
Parameters
- $djomyService : DjomyService
-
Vérifie la signature et relit le statut des transactions.
- $paymentFulfillmentService : PaymentFulfillmentService
-
Valide le paiement et applique ses conséquences (abonnement, commande, cartes).
- $entityManager : EntityManagerInterface
-
Recherche du paiement concerné.
- $logger : LoggerInterface
-
Journalise les notifications reçues, sans secret.
__invoke()
Traite une notification Djomy.
public
__invoke(Request $request) : Response
Une signature invalide est journalisée (en-tête reçu tronqué, taille du corps, puis eventType et
transactionId s'ils sont lisibles, pour calibrer le format) et refusée en 401. Une fois la signature
valide, le paiement est retrouvé par transactionId, à défaut par merchantPaymentReference, à défaut
par l'identifiant extrait de cette référence (cas d'un réessai ayant remplacé les références stockées) ;
il doit être un paiement Djomy. Sur payment.success (ou statut SUCCESS en V1), le corps n'est pas
cru : le statut de la transaction est relu auprès de Djomy et le paiement n'est validé que si ce statut
est SUCCESS (devise GNF si fournie) et que la référence marchande renvoyée désigne bien ce paiement.
Les autres événements sont seulement journalisés. Un paiement introuvable ou un événement ignoré répond
200 ; seule une erreur interne (lecture du statut, validation) répond 500 pour que Djomy renvoie.
Route : /webhook/djomy (POST), nom djomy_webhook.
Parameters
- $request : Request
-
Requête HTTP portant le corps JSON et l'en-tête
X-Webhook-Signature.
Attributes
- #[Route]
- '/webhook/djomy'
- $name: 'djomy_webhook'
- $methods: ['POST']
Return values
Response —JSON {"received":true} (200), 401 si la signature est invalide, 500 en cas d'erreur interne.
extractPaymentInfo()
Isole les champs du paiement d'une notification, au format V2 (`data.payment`) ou V1 (`data`).
private
extractPaymentInfo(array<string, mixed> $payload) : array<string, mixed>
Parameters
- $payload : array<string, mixed>
-
Corps JSON décodé.
Return values
array<string, mixed> —Champs du paiement (transactionId, status, merchantPaymentReference…).
findPayment()
Retrouve le paiement Djomy concerné par une notification.
private
findPayment(string $transactionId, string $reference) : Payment|null
Recherche par identifiant de transaction, puis par référence marchande, puis par l'identifiant extrait
de la référence (BCARD-PAY-<id>[-R<timestamp>]). Seul un paiement dont provider vaut djomy est accepté.
Parameters
- $transactionId : string
-
Identifiant de transaction Djomy.
- $reference : string
-
Référence marchande.
Return values
Payment|null —Paiement trouvé, ou null.